@@ -61,6 +61,7 @@ function normalizeRule(configRule) {
6161 configRule . status = parseInt ( configRule . status || 200 ) ;
6262 configRule . method = configRule . method || "" ;
6363 configRule . urlFilter = configRule . urlFilter || "" ;
64+ configRule . headersFilter = configRule . headersFilter || null ;
6465 configRule . response = configRule . response || "" ;
6566 configRule . encoding = configRule . encoding || "" ;
6667 configRule . ignoredHeaders =
@@ -81,27 +82,42 @@ var defaultRule = {
8182} ;
8283normalizeRule ( defaultRule ) ;
8384
84- function getMatchingConfigRule ( requestUrl , method ) {
85- var requestUrlNoQueryString = requestUrl . split ( "?" ) [ 0 ] ;
85+ function getMatchingConfigRule ( requestUrl , method , headers ) {
86+ var requestUrlNoQueryString = requestUrl . split ( "?" ) [ 0 ] ;
8687 for ( var i = 0 ; i < configArray . length ; i ++ ) {
8788 var configRule = configArray [ i ] ;
89+
8890 // Match method
8991 if ( configRule . method === "" || configRule . method === method ) {
9092 // Match Url
91- if (
92- new RegExp ( "^/?" + configRule . urlFilter + "$" ) . test (
93+ if ( new RegExp ( "^/?" + configRule . urlFilter + "$" ) . test (
9394 requestUrlNoQueryString
9495 )
9596 ) {
96- return configRule ;
97+ trace ( "configRule.headersFilter: " , configRule . headersFilter )
98+ if ( configRule . headersFilter === null ) {
99+ return configRule
100+ } else {
101+ var counter = 0 ;
102+ // Check if all headers in headersFilter are in request's headers for this config rule
103+ for ( const header in configRule . headersFilter ) {
104+ if ( headers [ header ] === configRule . headersFilter [ header ] ) {
105+ counter ++ ;
106+ }
107+ }
108+ // Check if condition abbove was met for this config rule
109+ if ( counter == Object . keys ( configRule . headersFilter ) . length ) {
110+ return configRule ;
111+ }
112+ }
97113 }
98114 }
99115 }
100116 return defaultRule ;
101117}
102118
103- function shouldFilterHeader ( headerName , requestUrl , requestMethod ) {
104- var matchingRule = getMatchingConfigRule ( requestUrl , requestMethod ) ;
119+ function shouldFilterHeader ( headerName , requestUrl , requestMethod , headers ) {
120+ var matchingRule = getMatchingConfigRule ( requestUrl , requestMethod , headers ) ;
105121 var isToIgnore = ! matchingRule . ignoredHeaders . every ( function ( e ) {
106122 return e != headerName ;
107123 } ) ;
@@ -115,11 +131,11 @@ function shouldFilterHeader(headerName, requestUrl, requestMethod) {
115131}
116132
117133function filterHeaders ( headers , requestUrl , requestMethod ) {
118- var filtered = { } ;
134+ var filtered = { } ;
119135 Object . keys ( headers ) . forEach ( function ( key ) {
120136 if (
121137 ! (
122- shouldFilterHeader ( key , requestUrl , requestMethod ) ||
138+ shouldFilterHeader ( key , requestUrl , requestMethod , headers ) ||
123139 ( key == "content-length" && headers [ key ] == "0" )
124140 )
125141 ) {
@@ -221,8 +237,8 @@ var server = http.createServer(function(request, response) {
221237 console . log (
222238 jsonutils . sortedStringify ( requestDetails , { indent : " " } )
223239 ) ;
224-
225- var matchingRule = getMatchingConfigRule ( request . url , request . method ) ;
240+
241+ var matchingRule = getMatchingConfigRule ( request . url , request . method , request . headers ) ;
226242 trace ( "Response rule: " + jsonutils . inspect ( matchingRule ) ) ;
227243
228244 handleResponse ( request , response , matchingRule ) ;
0 commit comments