Skip to content

Commit 817b68a

Browse files
Update CORS
1 parent c1c35f3 commit 817b68a

2 files changed

Lines changed: 57 additions & 8 deletions

File tree

src/main/java/com/uid2/operator/vertx/UIDOperatorVerticle.java

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -235,13 +235,8 @@ public void start(Promise<Void> startPromise) throws Exception {
235235

236236
}
237237

238-
private Router createRoutesSetup() throws IOException {
239-
final Router router = Router.router(vertx);
240-
241-
router.allowForward(AllowForwardHeaders.X_FORWARD);
242-
router.route().handler(new RequestCapturingHandler(siteProvider));
243-
router.route().handler(new ClientVersionCapturingHandler("static/js", "*.js", clientKeyProvider));
244-
router.route().handler(CorsHandler.create()
238+
private CorsHandler createCorsHandler() {
239+
return CorsHandler.create()
245240
.addRelativeOrigin(".*.")
246241
.allowedMethod(io.vertx.core.http.HttpMethod.GET)
247242
.allowedMethod(io.vertx.core.http.HttpMethod.POST)
@@ -251,7 +246,17 @@ private Router createRoutesSetup() throws IOException {
251246
.allowedHeader("Access-Control-Allow-Credentials")
252247
.allowedHeader("Access-Control-Allow-Origin")
253248
.allowedHeader("Access-Control-Allow-Headers")
254-
.allowedHeader("Content-Type"));
249+
.allowedHeader("Content-Type");
250+
}
251+
252+
private Router createRoutesSetup() throws IOException {
253+
final Router router = Router.router(vertx);
254+
255+
router.allowForward(AllowForwardHeaders.X_FORWARD);
256+
router.route().handler(new RequestCapturingHandler(siteProvider));
257+
router.route().handler(new ClientVersionCapturingHandler("static/js", "*.js", clientKeyProvider));
258+
router.route(V2_TOKEN_VALIDATE.toString()).handler(createCorsHandler().allowedHeader("Authorization"));
259+
router.route().handler(createCorsHandler());
255260
router.route().handler(new StatsCollectorHandler(_statsCollectorQueue, vertx));
256261
router.route("/static/*").handler(StaticHandler.create("static"));
257262
router.route().handler(ctx -> {

src/test/java/com/uid2/operator/UIDOperatorVerticleTest.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2311,6 +2311,50 @@ void tokenValidateWithEmailHash_Mismatch(Vertx vertx, VertxTestContext testConte
23112311
});
23122312
}
23132313

2314+
@Test
2315+
void corsTokenValidateAllowsAuthorizationHeader(Vertx vertx, VertxTestContext testContext) {
2316+
WebClient client = WebClient.create(vertx);
2317+
client.requestAbs(io.vertx.core.http.HttpMethod.OPTIONS, getUrlForEndpoint("v2/token/validate"))
2318+
.putHeader("Origin", "https://example.com")
2319+
.putHeader("Access-Control-Request-Method", "POST")
2320+
.putHeader("Access-Control-Request-Headers", "Content-Type, Authorization")
2321+
.send(ar -> {
2322+
assertTrue(ar.succeeded());
2323+
HttpResponse<Buffer> response = ar.result();
2324+
assertEquals(204, response.statusCode());
2325+
2326+
String allowedHeaders = response.getHeader("Access-Control-Allow-Headers");
2327+
assertNotNull(allowedHeaders, "Access-Control-Allow-Headers header should be present");
2328+
assertTrue(allowedHeaders.contains("Content-Type"), "Content-Type should be allowed");
2329+
assertTrue(allowedHeaders.contains(ClientVersionHeader), "Client version header should be allowed");
2330+
assertTrue(allowedHeaders.contains("Authorization"), "Authorization header should be allowed for token/validate");
2331+
2332+
testContext.completeNow();
2333+
});
2334+
}
2335+
2336+
@Test
2337+
void corsTokenGenerateDoesNotAllowAuthorizationHeader(Vertx vertx, VertxTestContext testContext) {
2338+
WebClient client = WebClient.create(vertx);
2339+
client.requestAbs(io.vertx.core.http.HttpMethod.OPTIONS, getUrlForEndpoint("v2/token/generate"))
2340+
.putHeader("Origin", "https://example.com")
2341+
.putHeader("Access-Control-Request-Method", "POST")
2342+
.putHeader("Access-Control-Request-Headers", "Content-Type, Authorization")
2343+
.send(ar -> {
2344+
assertTrue(ar.succeeded());
2345+
HttpResponse<Buffer> response = ar.result();
2346+
assertEquals(204, response.statusCode());
2347+
2348+
String allowedHeaders = response.getHeader("Access-Control-Allow-Headers");
2349+
assertNotNull(allowedHeaders, "Access-Control-Allow-Headers header should be present");
2350+
assertTrue(allowedHeaders.contains("Content-Type"), "Content-Type should be allowed");
2351+
assertTrue(allowedHeaders.contains(ClientVersionHeader), "Client version header should be allowed");
2352+
assertFalse(allowedHeaders.contains("Authorization"), "Authorization header should NOT be allowed for token/generate");
2353+
2354+
testContext.completeNow();
2355+
});
2356+
}
2357+
23142358
@Test
23152359
void identityMapBatchBothEmailAndHashEmpty(Vertx vertx, VertxTestContext testContext) {
23162360
final int clientSiteId = 201;

0 commit comments

Comments
 (0)