Skip to content

Commit 4d82e6b

Browse files
authored
Fix #1264 bolt-http4k fails to parse a request with duplicated header lines (#1266)
1 parent 5afc51b commit 4d82e6b

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

bolt-http4k/src/main/java/com/slack/api/bolt/http4k/Http4kSlackApp.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
import org.slf4j.Logger;
1313
import org.slf4j.LoggerFactory;
1414

15+
import java.util.ArrayList;
16+
import java.util.HashMap;
1517
import java.util.List;
1618
import java.util.Map;
1719

@@ -111,9 +113,15 @@ protected com.slack.api.bolt.request.Request<?> toSlackRequest(Request httpReque
111113
Map<String, List<String>> queryString = toParameters(httpRequest.getUri().getQuery())
112114
.stream()
113115
.collect(toMap(Pair::component1, it -> singletonList(it.component2())));
114-
RequestHeaders headers = new RequestHeaders(httpRequest.getHeaders()
115-
.stream()
116-
.collect(toMap(Pair::component1, it -> singletonList(it.component2()))));
116+
117+
Map<String, List<String>> underlyingHeaders = new HashMap<>();
118+
for (Pair<String, String> header : httpRequest.getHeaders()) {
119+
String name = header.getFirst();
120+
List<String> values = underlyingHeaders.getOrDefault(name, new ArrayList<>());
121+
values.add(header.getSecond());
122+
underlyingHeaders.put(name, values);
123+
}
124+
RequestHeaders headers = new RequestHeaders(underlyingHeaders);
117125
return requestParser.parse(SlackRequestParser.HttpRequest.builder()
118126
.requestUri(httpRequest.getUri().getPath())
119127
.queryString(queryString)

bolt-http4k/src/test/java/test_locally/Http4kSlackAppTest.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,8 @@ private static Request slackEventRequest(String requestBody) {
8585
.header(X_SLACK_REQUEST_TIMESTAMP, timestamp)
8686
.header(X_SLACK_SIGNATURE, signature)
8787
.header("Content-Type", "application/json")
88+
.header("X-Forwarded-Host", "proxy1.example.com")
89+
.header("X-Forwarded-Host", "proxy2.example.com")
8890
.query("query", "queryValue")
8991
.body(requestBody);
9092
}
@@ -108,7 +110,7 @@ public void slackEvents() {
108110
.header("Content-Type", "application/json; charset=utf-8")
109111
.body("{\"text\":\"" +
110112
"query: query " +
111-
"headers: content-type,x-slack-request-timestamp,x-slack-signature " +
113+
"headers: x-forwarded-host,content-type,x-slack-request-timestamp,x-slack-signature " +
112114
"body: command\\u003decho" +
113115
"\"}");
114116

0 commit comments

Comments
 (0)