Skip to content

Commit 9fdd7eb

Browse files
Adding cors headers directly to the job
1 parent 8121532 commit 9fdd7eb

File tree

5 files changed

+30
-33
lines changed

5 files changed

+30
-33
lines changed

server/server-core/build.gradle.kts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,4 @@ dependencies {
1616
implementation(libs.smithy.model)
1717
implementation(project(":io"))
1818
implementation(project(":logging"))
19-
implementation(libs.netty.all)
2019
}

server/server-core/src/main/java/software/amazon/smithy/java/server/core/CorsHeaders.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77

88
import static software.amazon.smithy.java.core.schema.TraitKey.CORS_TRAIT;
99

10-
import io.netty.handler.codec.http.HttpHeaders;
1110
import java.util.Arrays;
1211
import java.util.List;
1312
import java.util.Map;
@@ -16,15 +15,15 @@ public final class CorsHeaders {
1615

1716
private CorsHeaders() {}
1817

19-
private static final Map<String, Iterable<?>> BASE_CORS_HEADERS = Map.of(
18+
private static final Map<String, List<String>> BASE_CORS_HEADERS = Map.of(
2019
"Access-Control-Allow-Methods",
2120
List.of("GET, POST, PUT, DELETE, OPTIONS"),
2221
"Access-Control-Allow-Headers",
2322
List.of("*,Access-Control-Allow-Headers,Access-Control-Allow-Methods,Access-Control-Allow-Origin,Amz-Sdk-Invocation-Id,Amz-Sdk-Request,Authorization,Content-Length,Content-Type,X-Amz-User-Agent,X-Amzn-Trace-Id"),
2423
"Access-Control-Max-Age",
2524
List.of("600"));
2625

27-
public static void of(HttpJob job, HttpHeaders headers) {
26+
public static void addCorsHeaders(HttpJob job) {
2827
if (!shouldAddCorsHeaders(job)) {
2928
return;
3029
}
@@ -36,11 +35,8 @@ public static void of(HttpJob job, HttpHeaders headers) {
3635
return;
3736
}
3837

39-
for (Map.Entry<String, Iterable<?>> entrySet : BASE_CORS_HEADERS.entrySet()) {
40-
headers.set(entrySet.getKey(), entrySet.getValue());
41-
}
42-
43-
headers.set("Access-Control-Allow-Origin", List.of(requestOrigin));
38+
job.response().headers().putHeaders(BASE_CORS_HEADERS);
39+
job.response().headers().putHeader("Access-Control-Allow-Origin", List.of(requestOrigin));
4440
}
4541

4642
private static boolean shouldAddCorsHeaders(HttpJob job) {

server/server-core/src/test/java/software/amazon/smithy/java/server/core/CorsHeadersTest.java

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
import static org.junit.jupiter.api.Assertions.assertFalse;
99
import static org.junit.jupiter.api.Assertions.assertTrue;
1010

11-
import io.netty.handler.codec.http.DefaultHttpHeaders;
1211
import java.net.URI;
1312
import java.net.URISyntaxException;
1413
import java.util.List;
@@ -19,6 +18,7 @@
1918
import software.amazon.smithy.java.core.schema.ApiService;
2019
import software.amazon.smithy.java.core.schema.Schema;
2120
import software.amazon.smithy.java.http.api.HttpHeaders;
21+
import software.amazon.smithy.java.http.api.ModifiableHttpHeaders;
2222
import software.amazon.smithy.java.server.Operation;
2323
import software.amazon.smithy.model.traits.CorsTrait;
2424

@@ -99,29 +99,28 @@ public Schema schema() {
9999
HttpJob job = new HttpJob(testOperation, protocol, request, response);
100100

101101
// Apply CORS headers
102-
var responseHeaders = new DefaultHttpHeaders();
103-
CorsHeaders.of(job, responseHeaders);
102+
CorsHeaders.addCorsHeaders(job);
104103

105104
// Verify headers
106105
if (testCase.shouldHaveHeaders) {
107-
assertContainsHeader(responseHeaders, testCase.expectedAllowOrigin);
106+
assertContainsHeader(job.response().headers(), testCase.expectedAllowOrigin);
108107
} else {
109-
assertDoNotContainsHeader(responseHeaders);
108+
assertDoNotContainsHeader(job.response().headers());
110109
}
111110
}
112111

113-
private void assertContainsHeader(io.netty.handler.codec.http.HttpHeaders responseHeaders, String allowedOrigin) {
114-
assertTrue(responseHeaders.contains("Access-Control-Allow-Methods"));
115-
assertTrue(responseHeaders.contains("Access-Control-Allow-Headers"));
116-
assertTrue(responseHeaders.contains("Access-Control-Max-Age"));
117-
assertTrue(responseHeaders.contains("Access-Control-Allow-Origin"));
118-
assertTrue(responseHeaders.get("Access-Control-Allow-Origin").contains(allowedOrigin));
112+
private void assertContainsHeader(ModifiableHttpHeaders responseHeaders, String allowedOrigin) {
113+
assertTrue(responseHeaders.hasHeader("Access-Control-Allow-Methods"));
114+
assertTrue(responseHeaders.hasHeader("Access-Control-Allow-Headers"));
115+
assertTrue(responseHeaders.hasHeader("Access-Control-Max-Age"));
116+
assertTrue(responseHeaders.hasHeader("Access-Control-Allow-Origin"));
117+
assertTrue(responseHeaders.allValues("Access-Control-Allow-Origin").contains(allowedOrigin));
119118
}
120119

121-
private void assertDoNotContainsHeader(io.netty.handler.codec.http.HttpHeaders responseHeaders) {
122-
assertFalse(responseHeaders.contains("Access-Control-Allow-Methods"));
123-
assertFalse(responseHeaders.contains("Access-Control-Allow-Headers"));
124-
assertFalse(responseHeaders.contains("Access-Control-Max-Age"));
125-
assertFalse(responseHeaders.contains("Access-Control-Allow-Origin"));
120+
private void assertDoNotContainsHeader(ModifiableHttpHeaders responseHeaders) {
121+
assertFalse(responseHeaders.hasHeader("Access-Control-Allow-Methods"));
122+
assertFalse(responseHeaders.hasHeader("Access-Control-Allow-Headers"));
123+
assertFalse(responseHeaders.hasHeader("Access-Control-Max-Age"));
124+
assertFalse(responseHeaders.hasHeader("Access-Control-Allow-Origin"));
126125
}
127126
}

server/server-core/src/test/java/software/amazon/smithy/java/server/core/TestStructs.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
package software.amazon.smithy.java.server.core;
77

8+
import java.util.HashMap;
89
import java.util.Iterator;
910
import java.util.List;
1011
import java.util.Map;
@@ -130,39 +131,41 @@ public ApiService service() {
130131
}
131132

132133
public static class TestModifiableHttpHeaders implements ModifiableHttpHeaders {
134+
Map<String, List<String>> headers = new HashMap<>();
135+
133136
@Override
134137
public void putHeader(String name, String value) {
135-
138+
headers.put(name, List.of(value));
136139
}
137140

138141
@Override
139142
public void putHeader(String name, List<String> values) {
140-
143+
headers.put(name, values);
141144
}
142145

143146
@Override
144147
public void removeHeader(String name) {
145-
148+
headers.remove(name);
146149
}
147150

148151
@Override
149152
public List<String> allValues(String name) {
150-
return List.of();
153+
return headers.getOrDefault(name, List.of());
151154
}
152155

153156
@Override
154157
public int size() {
155-
return 0;
158+
return headers.size();
156159
}
157160

158161
@Override
159162
public Map<String, List<String>> map() {
160-
return Map.of();
163+
return headers;
161164
}
162165

163166
@Override
164167
public Iterator<Map.Entry<String, List<String>>> iterator() {
165-
return null;
168+
return headers.entrySet().iterator();
166169
}
167170
}
168171

server/server-netty/src/main/java/software/amazon/smithy/java/server/netty/HttpRequestHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,12 @@ private void writeResponse(Channel channel, HttpJob job) {
9999
HttpVersion.HTTP_1_1,
100100
HttpResponseStatus.valueOf(job.response().getStatusCode()),
101101
Unpooled.wrappedBuffer(serializedValue.waitForByteBuffer()));
102+
CorsHeaders.addCorsHeaders(job);
102103
response.headers().set(((NettyHttpHeaders) job.response().headers()).getNettyHeaders());
103104
response.headers().set("content-length", serializedValue.contentLength());
104105
if (serializedValue.contentType() != null) {
105106
response.headers().set("content-type", serializedValue.contentType());
106107
}
107-
CorsHeaders.of(job, response.headers());
108108
} catch (Throwable e) {
109109
response = new DefaultFullHttpResponse(
110110
HttpVersion.HTTP_1_1,

0 commit comments

Comments
 (0)