diff --git a/docs/generators/go-server.md b/docs/generators/go-server.md index a2094d82603a..a602a39c42bb 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 a4951e19c5d1..36f2d820cc75 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 GoServerCodegen() { 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 void processOpts() { 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 void setPackageVersion(String packageVersion) { 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 941790cac37e..230bbcdc5baf 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).