From 5b4441892fc8c5088a22419b9bf5bdbae8b17a2c Mon Sep 17 00:00:00 2001 From: Jesse Michael Date: Fri, 8 Nov 2019 00:35:27 -0700 Subject: [PATCH] Add Go Server featureCORS option (#4400) Add a Go server configuration option of "featureCORS" that defaults to false. When set to true the Go server routers will be generated with Cross-Origin Resource Sharing middleware through gorrilla mux. https://www.gorillatoolkit.org/pkg/handlers#CORS --- docs/generators/go-server.md | 1 + .../codegen/languages/GoServerCodegen.java | 16 ++++++++++++++++ .../main/resources/go-server/routers.mustache | 5 ++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/docs/generators/go-server.md b/docs/generators/go-server.md index a2094d82603..a602a39c42b 100644 --- a/docs/generators/go-server.md +++ b/docs/generators/go-server.md @@ -10,3 +10,4 @@ sidebar_label: go-server |hideGenerationTimestamp|Hides the generation timestamp when files are generated.| |true| |sourceFolder|source folder for generated code| |go| |serverPort|The network port the generated server binds to| |8080| +|featureCORS|Enable Cross-Origin Resource Sharing middleware| |false| diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java index a4951e19c5d..36f2d820cc7 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/GoServerCodegen.java @@ -39,6 +39,7 @@ public class GoServerCodegen extends AbstractGoCodegen { protected int serverPort = 8080; protected String projectName = "openapi-server"; protected String sourceFolder = "go"; + protected Boolean corsFeatureEnabled = false; public GoServerCodegen() { @@ -55,6 +56,11 @@ public class GoServerCodegen extends AbstractGoCodegen { optServerPort.defaultValue(Integer.toString(serverPort)); cliOptions.add(optServerPort); + CliOption optFeatureCORS = new CliOption("featureCORS", "Enable Cross-Origin Resource Sharing middleware"); + optFeatureCORS.setType("bool"); + optFeatureCORS.defaultValue(corsFeatureEnabled.toString()); + cliOptions.add(optFeatureCORS); + /* * Models. You can write model files using the modelTemplateFiles map. * if you want to create one template for file, you can do so here. @@ -142,6 +148,12 @@ public class GoServerCodegen extends AbstractGoCodegen { additionalProperties.put("serverPort", serverPort); } + if (additionalProperties.containsKey("featureCORS")) { + this.setFeatureCORS(convertPropertyToBooleanAndWriteBack("featureCORS")); + } else { + additionalProperties.put("featureCORS", corsFeatureEnabled); + } + modelPackage = packageName; apiPackage = packageName; @@ -263,4 +275,8 @@ public class GoServerCodegen extends AbstractGoCodegen { public void setServerPort(int serverPort) { this.serverPort = serverPort; } + + public void setFeatureCORS(Boolean featureCORS) { + this.corsFeatureEnabled = featureCORS; + } } diff --git a/modules/openapi-generator/src/main/resources/go-server/routers.mustache b/modules/openapi-generator/src/main/resources/go-server/routers.mustache index 941790cac37..230bbcdc5ba 100644 --- a/modules/openapi-generator/src/main/resources/go-server/routers.mustache +++ b/modules/openapi-generator/src/main/resources/go-server/routers.mustache @@ -7,7 +7,9 @@ import ( "net/http" "os" "strconv" +{{#featureCORS}} + "github.com/gorilla/handlers"{{/featureCORS}} "github.com/gorilla/mux" ) @@ -34,7 +36,8 @@ func NewRouter(routers ...Router) *mux.Router { for _, route := range api.Routes() { var handler http.Handler handler = route.HandlerFunc - handler = Logger(handler, route.Name) + handler = Logger(handler, route.Name){{#featureCORS}} + handler = handlers.CORS()(handler){{/featureCORS}} router. Methods(route.Method).