diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenSecurity.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenSecurity.java index 7e545eec738..ea354971202 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenSecurity.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/CodegenSecurity.java @@ -38,7 +38,7 @@ public class CodegenSecurity { // Oauth specific public String flow, authorizationUrl, tokenUrl; public List> scopes; - public Boolean isCode, isPassword, isApplication, isImplicit; + public Boolean isCode, isPassword, isApplication, isImplicit, hasScopes; @Override public String toString() { diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java index 1226eaba9fe..7a76a472269 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/DefaultGenerator.java @@ -1051,6 +1051,7 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { if (securities != null && securities.isEmpty()) { continue; } + Map authMethods = getAuthMethods(securities, securitySchemes); if (authMethods == null || authMethods.isEmpty()) { authMethods = getAuthMethods(globalSecurities, securitySchemes); @@ -1058,6 +1059,39 @@ public class DefaultGenerator extends AbstractGenerator implements Generator { if (authMethods != null && !authMethods.isEmpty()) { codegenOperation.authMethods = config.fromSecurity(authMethods); + List> scopes = new ArrayList>(); + if (codegenOperation.authMethods != null){ + for (CodegenSecurity security : codegenOperation.authMethods){ + if (security != null && security.isBasicBearer != null && security.isBasicBearer && + securities != null){ + for (SecurityRequirement req : securities){ + if (req == null) continue; + for (String key : req.keySet()){ + if (security.name != null && key.equals(security.name)){ + int count = 0; + for (String sc : req.get(key)){ + Map scope = new HashMap(); + scope.put("scope", sc); + scope.put("description", ""); + count++; + if (req.get(key) != null && count < req.get(key).size()){ + scope.put("hasMore", "true"); + } else { + scope.put("hasMore", null); + } + scopes.add(scope); + } + //end this inner for + break; + } + } + + } + security.hasScopes = scopes.size() > 0; + security.scopes = scopes; + } + } + } codegenOperation.hasAuthMethods = true; } diff --git a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/controller.mustache b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/controller.mustache index dec27299ffc..75121e64532 100644 --- a/modules/openapi-generator/src/main/resources/aspnetcore/2.1/controller.mustache +++ b/modules/openapi-generator/src/main/resources/aspnetcore/2.1/controller.mustache @@ -14,6 +14,7 @@ using Newtonsoft.Json; {{/isLibrary}} using System.ComponentModel.DataAnnotations; using {{packageName}}.Attributes; +using Microsoft.AspNetCore.Authorization; using {{modelPackage}}; namespace {{apiPackage}} @@ -32,7 +33,8 @@ namespace {{apiPackage}} /// {{description}}{{/allParams}}{{#responses}} /// {{message}}{{/responses}} [{{httpMethod}}] - [Route("{{{basePathWithoutHost}}}{{{path}}}")] + [Route("{{{basePathWithoutHost}}}{{{path}}}")]{{#hasAuthMethods}}{{#authMethods}}{{#isBasicBearer}} + [Authorize{{#hasScopes}}(Roles = "{{#scopes}}{{scope}}{{#hasMore}},{{/hasMore}}{{/scopes}}"){{/hasScopes}}]{{/isBasicBearer}}{{/authMethods}}{{/hasAuthMethods}} [ValidateModelState]{{#useSwashbuckle}} [SwaggerOperation("{{operationId}}")]{{#responses}}{{#dataType}} [SwaggerResponse(statusCode: {{code}}, type: typeof({{&dataType}}), description: "{{message}}")]{{/dataType}}{{^dataType}}{{/dataType}}{{/responses}}{{/useSwashbuckle}}{{^useSwashbuckle}}{{#responses}}{{#dataType}} diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs index a945134b8a9..2a2599284de 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -17,6 +17,7 @@ using Newtonsoft.Json; using System.ComponentModel.DataAnnotations; using Org.OpenAPITools.Attributes; using Org.OpenAPITools.Models; +using Microsoft.AspNetCore.Authorization; namespace Org.OpenAPITools.Controllers { diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs index 1e981d697ae..93acea2d083 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -17,6 +17,7 @@ using Newtonsoft.Json; using System.ComponentModel.DataAnnotations; using Org.OpenAPITools.Attributes; using Org.OpenAPITools.Models; +using Microsoft.AspNetCore.Authorization; namespace Org.OpenAPITools.Controllers { diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs index 7c455f25a57..c3a29ff7aed 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -17,6 +17,7 @@ using Newtonsoft.Json; using System.ComponentModel.DataAnnotations; using Org.OpenAPITools.Attributes; using Org.OpenAPITools.Models; +using Microsoft.AspNetCore.Authorization; namespace Org.OpenAPITools.Controllers {