From 39677c0c7a96c054bff761fc61728e78feb07b0a Mon Sep 17 00:00:00 2001 From: dreamhead Date: Thu, 31 Aug 2023 09:27:01 +0800 Subject: [PATCH] changed cors max age to duration and time unit --- .../java/com/github/dreamhead/moco/MocoCors.java | 5 +++-- .../java/com/github/dreamhead/moco/MocoCorsTest.java | 4 +++- moco-doc/ReleaseNotes.md | 4 ++-- moco-doc/apis.md | 12 +++++++++--- .../deserializer/CorsContainerDeserializer.java | 3 ++- .../dreamhead/moco/parser/model/CorsContainer.java | 6 +++--- moco-runner/src/test/resources/cors.json | 10 ++++++++-- 7 files changed, 30 insertions(+), 14 deletions(-) diff --git a/moco-core/src/main/java/com/github/dreamhead/moco/MocoCors.java b/moco-core/src/main/java/com/github/dreamhead/moco/MocoCors.java index 59cae57f2..dd82e4769 100644 --- a/moco-core/src/main/java/com/github/dreamhead/moco/MocoCors.java +++ b/moco-core/src/main/java/com/github/dreamhead/moco/MocoCors.java @@ -10,6 +10,7 @@ import com.github.dreamhead.moco.handler.cors.CorsOriginConfig; import java.util.Arrays; +import java.util.concurrent.TimeUnit; public final class MocoCors { public static ResponseHandler cors(final CorsConfig... configs) { @@ -57,8 +58,8 @@ public static CorsConfig exposeHeaders(final String... headers) { return new CorsExposedHeadersConfig(headers); } - public static CorsConfig maxAge(final long maxAge) { - return new CorsMaxAgeConfig(maxAge); + public static CorsConfig maxAge(final long maxAge, final TimeUnit unit) { + return new CorsMaxAgeConfig(unit.toSeconds(maxAge)); } private MocoCors() { diff --git a/moco-core/src/test/java/com/github/dreamhead/moco/MocoCorsTest.java b/moco-core/src/test/java/com/github/dreamhead/moco/MocoCorsTest.java index 1eb33583b..b0cb272a0 100644 --- a/moco-core/src/test/java/com/github/dreamhead/moco/MocoCorsTest.java +++ b/moco-core/src/test/java/com/github/dreamhead/moco/MocoCorsTest.java @@ -4,6 +4,8 @@ import org.apache.hc.core5.http.ClassicHttpResponse; import org.junit.Test; +import java.util.concurrent.TimeUnit; + import static com.github.dreamhead.moco.MocoCors.allowCredentials; import static com.github.dreamhead.moco.MocoCors.allowHeaders; import static com.github.dreamhead.moco.MocoCors.allowMethods; @@ -184,7 +186,7 @@ public void should_get_preflight_response() throws Exception { @Test public void should_support_cors_with_max_age() throws Exception { - server.response(cors(allowOrigin("https://www.github.com/"), maxAge(1728000))); + server.response(cors(allowOrigin("https://www.github.com/"), maxAge(1728000, TimeUnit.SECONDS))); running(server, () -> { ClassicHttpResponse response = helper.putForResponseWithHeaders(root(), "", of("Origin", "https://www.github.com/")); diff --git a/moco-doc/ReleaseNotes.md b/moco-doc/ReleaseNotes.md index ce4bd82b7..d26d7dcdf 100644 --- a/moco-doc/ReleaseNotes.md +++ b/moco-doc/ReleaseNotes.md @@ -1,8 +1,8 @@ # Release 1.5.0 ## APIs * `req.client.port` is supported in template -* `sameSite` cookie attribute is supported in template -* `cors` in response is supported for CORS. +* `sameSite` cookie attribute is supported +* `cors` in response is supported for CORS * `allowOrigin`(Access-Control-Allow-Credentials) * `allowCredentials`(Access-Control-Allow-Credentials) * `exposeHeaders`(Access-Control-Expose-Headers) diff --git a/moco-doc/apis.md b/moco-doc/apis.md index 711520d78..c11575ea6 100644 --- a/moco-doc/apis.md +++ b/moco-doc/apis.md @@ -1905,7 +1905,7 @@ You can allow CORS with specific max age with `cors` operator with `maxAge` argu * Java API ```java -server.response(cors(maxAge(1))); +server.response(cors(maxAge(1728000, TimeUnit.SECONDS))); ``` * JSON @@ -1915,7 +1915,10 @@ server.response(cors(maxAge(1))); { "cors" : { - "maxAge" : 1 + "maxAge": { + "duration": 1728000, + "unit": "second" + } } } } @@ -1928,7 +1931,10 @@ In JSON API, you can also use `Access-Control-Max-Age` directly. { "cors" : { - "Access-Control-Max-Age" : 1 + "Access-Control-Max-Age" : { + "duration": 1728000, + "unit": "second" + } } } } diff --git a/moco-runner/src/main/java/com/github/dreamhead/moco/parser/deserializer/CorsContainerDeserializer.java b/moco-runner/src/main/java/com/github/dreamhead/moco/parser/deserializer/CorsContainerDeserializer.java index 1dfa0e03a..91202b34b 100644 --- a/moco-runner/src/main/java/com/github/dreamhead/moco/parser/deserializer/CorsContainerDeserializer.java +++ b/moco-runner/src/main/java/com/github/dreamhead/moco/parser/deserializer/CorsContainerDeserializer.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.github.dreamhead.moco.parser.model.CorsContainer; +import com.github.dreamhead.moco.parser.model.LatencyContainer; import java.io.IOException; import java.util.List; @@ -40,7 +41,7 @@ static class InternalCorsContainer { private List allowHeaders; @JsonAlias("Access-Control-Max-Age") - private Long maxAge; + private LatencyContainer maxAge; @JsonAlias("Access-Control-Expose-Headers") private List exposeHeaders; diff --git a/moco-runner/src/main/java/com/github/dreamhead/moco/parser/model/CorsContainer.java b/moco-runner/src/main/java/com/github/dreamhead/moco/parser/model/CorsContainer.java index 6c4d004c3..3457db4ae 100644 --- a/moco-runner/src/main/java/com/github/dreamhead/moco/parser/model/CorsContainer.java +++ b/moco-runner/src/main/java/com/github/dreamhead/moco/parser/model/CorsContainer.java @@ -31,7 +31,7 @@ public final class CorsContainer { private List allowHeaders; @JsonAlias("Access-Control-Max-Age") - private Long maxAge; + private LatencyContainer maxAge; @JsonAlias("Access-Control-Expose-Headers") private List exposeHeaders; @@ -46,7 +46,7 @@ public static CorsContainer newContainer() { public static CorsContainer newContainer(final String allowOrigin, final List allowMethods, final List allowHeaders, - final long maxAge, + final LatencyContainer maxAge, final List exposeHeaders, final Boolean allowCredentials) { CorsContainer container = new CorsContainer(); @@ -74,7 +74,7 @@ public CorsConfig[] getConfigs() { } if (maxAge != null) { - configs.add(maxAge(maxAge)); + configs.add(maxAge(maxAge.getLatency(), maxAge.getUnit())); } if (exposeHeaders != null) { diff --git a/moco-runner/src/test/resources/cors.json b/moco-runner/src/test/resources/cors.json index 3fc2b5001..b672abfbf 100644 --- a/moco-runner/src/test/resources/cors.json +++ b/moco-runner/src/test/resources/cors.json @@ -24,7 +24,10 @@ "allowHeaders": [ "Content-Type, Authorization, Accept, X-Requested-With" ], - "maxAge": 1728000, + "maxAge": { + "duration": 1728000, + "unit": "second" + }, "exposeHeaders": [ "X-My-Custom-Header, X-Another-Custom-Header" ], @@ -49,7 +52,10 @@ "Access-Control-Allow-Headers": [ "Content-Type, Authorization, Accept, X-Requested-With" ], - "Access-Control-Max-Age": 1728000, + "Access-Control-Max-Age": { + "duration": 1728000, + "unit": "second" + }, "Access-Control-Expose-Headers": [ "X-My-Custom-Header, X-Another-Custom-Header" ],