Skip to content

Commit e158e0d

Browse files
committed
fixes #96 HeaderMiddleware cannot add new headers from header.yml
1 parent c87a590 commit e158e0d

File tree

4 files changed

+18
-5
lines changed

4 files changed

+18
-5
lines changed

src/main/java/com/networknt/aws/lambda/handler/middleware/header/HeaderMiddleware.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,13 +80,24 @@ public void updateHeaders(Map<String, Object> updateMap, Map<String, String> hea
8080
for (Map.Entry<String, Object> entry : updateMap.entrySet()) {
8181
lowercaseUpdateMap.put(entry.getKey().toLowerCase(), entry.getValue());
8282
}
83-
// Iterate over the original map and update values where keys match case-insensitively
83+
// Iterate over the original header map and update values where keys match case-insensitively
8484
for (Map.Entry<String, String> entry : headers.entrySet()) {
8585
String lowercaseKey = entry.getKey().toLowerCase();
8686
if (lowercaseUpdateMap.containsKey(lowercaseKey)) {
8787
headers.put(entry.getKey(), (String)lowercaseUpdateMap.get(lowercaseKey));
8888
}
8989
}
90-
90+
// convert the headers map to lowercase
91+
Map<String, String> lowercaseHeaders = new HashMap<>();
92+
for (Map.Entry<String, String> entry : headers.entrySet()) {
93+
lowercaseHeaders.put(entry.getKey().toLowerCase(), entry.getValue());
94+
}
95+
// Iterate over the update map and add new entries to the header map
96+
for (Map.Entry<String, Object> entry : updateMap.entrySet()) {
97+
String lowercaseKey = entry.getKey().toLowerCase();
98+
if (!lowercaseHeaders.containsKey(lowercaseKey)) {
99+
headers.put(entry.getKey(), (String)entry.getValue());
100+
}
101+
}
91102
}
92103
}

src/test/java/com/networknt/aws/lambda/middleware/header/ResponseHeaderMiddlewareTest.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,5 +40,9 @@ void testResponseHeaderRemoveUpdate() {
4040
// headerC and headerD should be removed by the /v1/pets rule.
4141
Assertions.assertTrue(MapUtil.getValueIgnoreCase(responseEvent.getHeaders(), "headerC").isEmpty());
4242
Assertions.assertTrue(MapUtil.getValueIgnoreCase(responseEvent.getHeaders(), "headerD").isEmpty());
43+
44+
// keyC and KeyD should be added by the /v1/pets rule.
45+
Assertions.assertEquals("valueC", responseEvent.getHeaders().get("keyC")); // lower case
46+
Assertions.assertEquals("valueD", responseEvent.getHeaders().get("KeyD")); // upper case
4347
}
4448
}

src/test/java/com/networknt/aws/lambda/middleware/proxy/MockLambdaProxyMiddleware.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,6 @@ private String invokeFunction(final LambdaClient client, String functionName, fi
7575
headers.put("Content-Type", "application/json");
7676
headers.put("Key3", "oldValue3");
7777
headers.put("key4", "oldValue4");
78-
headers.put("KeyC", "oldValueC");
79-
headers.put("keyD", "oldValueD");
8078
headers.put("header3", "value3");
8179
headers.put("Header4", "value4");
8280
headers.put("headerC", "valueC");

src/test/resources/config/values.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ header.pathPrefixHeader:
6262
- headerD
6363
update:
6464
keyC: valueC
65-
keyD: valueD
65+
KeyD: valueD
6666

6767
# handler.yml
6868
handler.handlers:

0 commit comments

Comments
 (0)