From ff53285fa085096282cb9caf0196bf4473515a30 Mon Sep 17 00:00:00 2001 From: MBcom <27956078+MBcom@users.noreply.github.com> Date: Sun, 27 Jan 2019 15:35:56 +0100 Subject: [PATCH 1/9] general support to add scopes for bearer auth too implemented authorize workflow in aspnet core too --- .../codegen/DefaultGenerator.java | 30 +++++++++++++++++++ .../aspnetcore/2.1/controller.mustache | 5 +++- 2 files changed, 34 insertions(+), 1 deletion(-) 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 649227fdf338..7bd7e9653a03 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 @@ -1024,6 +1024,7 @@ private void processOperation(String resourcePath, String httpMethod, Operation if (securities != null && securities.isEmpty()) { continue; } + Map authMethods = getAuthMethods(securities, securitySchemes); if (authMethods == null || authMethods.isEmpty()) { authMethods = getAuthMethods(globalSecurities, securitySchemes); @@ -1031,6 +1032,35 @@ private void processOperation(String resourcePath, String httpMethod, Operation if (authMethods != null && !authMethods.isEmpty()) { codegenOperation.authMethods = config.fromSecurity(authMethods); + List> scopes = new ArrayList>(); + for (CodegenSecurity security : codegenOperation.authMethods){ + if (security.isBasicBearer){ + for (SecurityRequirement req : securities){ + for (String key : req.keySet()){ + if (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 (count < req.get(key).size()){ + scope.put("hasMore", "true"); + } else { + scope.put("hasMore", null); + } + scopes.add(scope); + } + //end this inner for + break; + } + } + + } + 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 1805b7d2cc6e..3f9fcc28165a 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 @@ -8,6 +8,7 @@ using Newtonsoft.Json; using System.ComponentModel.DataAnnotations; using {{packageName}}.Attributes; using {{packageName}}.Models; +using Microsoft.AspNetCore.Authorization; namespace {{packageName}}.Controllers { {{#operations}} @@ -24,7 +25,9 @@ namespace {{packageName}}.Controllers /// {{description}}{{/allParams}}{{#responses}} /// {{message}}{{/responses}} [{{httpMethod}}] - [Route("{{{basePathWithoutHost}}}{{{path}}}")] + [Route("{{{basePathWithoutHost}}}{{{path}}}")]{{#hasAuthMethods}} +{{#authMethods}}{{#isBasicBearer}} [Authorize{{#scopes}}(Roles = "{{scope}}{{#hasMore}},{{/hasMore}}"{{/scopes}}]{{/isBasicBearer}}{{/authMethods}} +{{/hasAuthMethods}} [ValidateModelState]{{#useSwashbuckle}} [SwaggerOperation("{{operationId}}")]{{#responses}}{{#dataType}} [SwaggerResponse(statusCode: {{code}}, type: typeof({{&dataType}}), description: "{{message}}")]{{/dataType}}{{^dataType}}{{/dataType}}{{/responses}}{{/useSwashbuckle}} From 5613706ad8f6d3ca36af9712aff36d2483dcb185 Mon Sep 17 00:00:00 2001 From: MBcom <27956078+MBcom@users.noreply.github.com> Date: Sun, 27 Jan 2019 15:36:05 +0100 Subject: [PATCH 2/9] petstore update --- .../aspnetcore/.openapi-generator/VERSION | 2 +- .../Org.OpenAPITools/Controllers/PetApi.cs | 8 +++---- .../Org.OpenAPITools/Controllers/StoreApi.cs | 4 ++-- .../Org.OpenAPITools/Controllers/UserApi.cs | 16 +++++++------- .../wwwroot/openapi-original.json | 21 ++++++++++++------- 5 files changed, 29 insertions(+), 22 deletions(-) diff --git a/samples/server/petstore/aspnetcore/.openapi-generator/VERSION b/samples/server/petstore/aspnetcore/.openapi-generator/VERSION index e24c1f857e01..afa636560641 100644 --- a/samples/server/petstore/aspnetcore/.openapi-generator/VERSION +++ b/samples/server/petstore/aspnetcore/.openapi-generator/VERSION @@ -1 +1 @@ -3.3.3-SNAPSHOT \ No newline at end of file +4.0.0-SNAPSHOT \ No newline at end of file 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 9ea99af7cdf6..aa08f520afa3 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -28,13 +28,13 @@ public class PetApiController : ControllerBase /// /// Add a new pet to the store /// - /// Pet object that needs to be added to the store + /// Pet object that needs to be added to the store /// Invalid input [HttpPost] [Route("/v2/pet")] [ValidateModelState] [SwaggerOperation("AddPet")] - public virtual IActionResult AddPet([FromBody]Pet pet) + public virtual IActionResult AddPet([FromBody]Pet body) { //TODO: Uncomment the next line to return response 405 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(405); @@ -162,7 +162,7 @@ public virtual IActionResult GetPetById([FromRoute][Required]long? petId) /// /// Update an existing pet /// - /// Pet object that needs to be added to the store + /// Pet object that needs to be added to the store /// Invalid ID supplied /// Pet not found /// Validation exception @@ -170,7 +170,7 @@ public virtual IActionResult GetPetById([FromRoute][Required]long? petId) [Route("/v2/pet")] [ValidateModelState] [SwaggerOperation("UpdatePet")] - public virtual IActionResult UpdatePet([FromBody]Pet pet) + public virtual IActionResult UpdatePet([FromBody]Pet body) { //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); 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 2b46191a7925..4f9ac8f5e184 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -110,7 +110,7 @@ public virtual IActionResult GetOrderById([FromRoute][Required][Range(1, 5)]long /// /// Place an order for a pet /// - /// order placed for purchasing the pet + /// order placed for purchasing the pet /// successful operation /// Invalid Order [HttpPost] @@ -118,7 +118,7 @@ public virtual IActionResult GetOrderById([FromRoute][Required][Range(1, 5)]long [ValidateModelState] [SwaggerOperation("PlaceOrder")] [SwaggerResponse(statusCode: 200, type: typeof(Order), description: "successful operation")] - public virtual IActionResult PlaceOrder([FromBody]Order order) + public virtual IActionResult PlaceOrder([FromBody]Order body) { //TODO: Uncomment the next line to return response 200 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(200, default(Order)); 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 99fc6e4ea243..85820331a5e6 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -29,13 +29,13 @@ public class UserApiController : ControllerBase /// Create user /// /// This can only be done by the logged in user. - /// Created user object + /// Created user object /// successful operation [HttpPost] [Route("/v2/user")] [ValidateModelState] [SwaggerOperation("CreateUser")] - public virtual IActionResult CreateUser([FromBody]User user) + public virtual IActionResult CreateUser([FromBody]User body) { //TODO: Uncomment the next line to return response 0 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(0); @@ -47,13 +47,13 @@ public virtual IActionResult CreateUser([FromBody]User user) /// /// Creates list of users with given input array /// - /// List of user object + /// List of user object /// successful operation [HttpPost] [Route("/v2/user/createWithArray")] [ValidateModelState] [SwaggerOperation("CreateUsersWithArrayInput")] - public virtual IActionResult CreateUsersWithArrayInput([FromBody]List user) + public virtual IActionResult CreateUsersWithArrayInput([FromBody]List body) { //TODO: Uncomment the next line to return response 0 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(0); @@ -65,13 +65,13 @@ public virtual IActionResult CreateUsersWithArrayInput([FromBody]List user /// /// Creates list of users with given input array /// - /// List of user object + /// List of user object /// successful operation [HttpPost] [Route("/v2/user/createWithList")] [ValidateModelState] [SwaggerOperation("CreateUsersWithListInput")] - public virtual IActionResult CreateUsersWithListInput([FromBody]List user) + public virtual IActionResult CreateUsersWithListInput([FromBody]List body) { //TODO: Uncomment the next line to return response 0 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(0); @@ -188,14 +188,14 @@ public virtual IActionResult LogoutUser() /// /// This can only be done by the logged in user. /// name that need to be deleted - /// Updated user object + /// Updated user object /// Invalid user supplied /// User not found [HttpPut] [Route("/v2/user/{username}")] [ValidateModelState] [SwaggerOperation("UpdateUser")] - public virtual IActionResult UpdateUser([FromRoute][Required]string username, [FromBody]User user) + public virtual IActionResult UpdateUser([FromRoute][Required]string username, [FromBody]User body) { //TODO: Uncomment the next line to return response 400 or use other options such as return this.NotFound(), return this.BadRequest(..), ... // return StatusCode(400); diff --git a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/wwwroot/openapi-original.json b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/wwwroot/openapi-original.json index 82d674b55753..a0a4803cd077 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/wwwroot/openapi-original.json +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/wwwroot/openapi-original.json @@ -60,7 +60,8 @@ }, "security" : [ { "petstore_auth" : [ "write:pets", "read:pets" ] - } ] + } ], + "x-codegen-request-body-name" : "body" }, "post" : { "tags" : [ "pet" ], @@ -90,7 +91,8 @@ }, "security" : [ { "petstore_auth" : [ "write:pets", "read:pets" ] - } ] + } ], + "x-codegen-request-body-name" : "body" } }, "/pet/findByStatus" : { @@ -432,7 +434,8 @@ "description" : "Invalid Order", "content" : { } } - } + }, + "x-codegen-request-body-name" : "body" } }, "/store/order/{orderId}" : { @@ -527,7 +530,8 @@ "description" : "successful operation", "content" : { } } - } + }, + "x-codegen-request-body-name" : "body" } }, "/user/createWithArray" : { @@ -554,7 +558,8 @@ "description" : "successful operation", "content" : { } } - } + }, + "x-codegen-request-body-name" : "body" } }, "/user/createWithList" : { @@ -581,7 +586,8 @@ "description" : "successful operation", "content" : { } } - } + }, + "x-codegen-request-body-name" : "body" } }, "/user/login" : { @@ -732,7 +738,8 @@ "description" : "User not found", "content" : { } } - } + }, + "x-codegen-request-body-name" : "body" }, "delete" : { "tags" : [ "user" ], From f837cdc6db06a5659ef404fb86ddb050e69ff27f Mon Sep 17 00:00:00 2001 From: MBcom <27956078+MBcom@users.noreply.github.com> Date: Sun, 27 Jan 2019 15:36:18 +0100 Subject: [PATCH 3/9] fix missing ) --- .../aspnetcore/2.1/controller.mustache | 2 +- .../Org.OpenAPITools/Controllers/PetApi.cs | 9 +++++++ .../Org.OpenAPITools/Controllers/StoreApi.cs | 11 ++++---- .../Org.OpenAPITools/Controllers/UserApi.cs | 25 +++++++------------ 4 files changed, 24 insertions(+), 23 deletions(-) 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 3f9fcc28165a..8dc9495de4c7 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 @@ -26,7 +26,7 @@ namespace {{packageName}}.Controllers /// {{message}}{{/responses}} [{{httpMethod}}] [Route("{{{basePathWithoutHost}}}{{{path}}}")]{{#hasAuthMethods}} -{{#authMethods}}{{#isBasicBearer}} [Authorize{{#scopes}}(Roles = "{{scope}}{{#hasMore}},{{/hasMore}}"{{/scopes}}]{{/isBasicBearer}}{{/authMethods}} +{{#authMethods}}{{#isBasicBearer}} [Authorize{{#scopes}}(Roles = "{{scope}}{{#hasMore}},{{/hasMore}}"){{/scopes}}]{{/isBasicBearer}}{{/authMethods}} {{/hasAuthMethods}} [ValidateModelState]{{#useSwashbuckle}} [SwaggerOperation("{{operationId}}")]{{#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 aa08f520afa3..eeca07e3e313 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 System.ComponentModel.DataAnnotations; using Org.OpenAPITools.Attributes; using Org.OpenAPITools.Models; +using Microsoft.AspNetCore.Authorization; namespace Org.OpenAPITools.Controllers { @@ -32,6 +33,7 @@ public class PetApiController : ControllerBase /// Invalid input [HttpPost] [Route("/v2/pet")] + [ValidateModelState] [SwaggerOperation("AddPet")] public virtual IActionResult AddPet([FromBody]Pet body) @@ -51,6 +53,7 @@ public virtual IActionResult AddPet([FromBody]Pet body) /// Invalid pet value [HttpDelete] [Route("/v2/pet/{petId}")] + [ValidateModelState] [SwaggerOperation("DeletePet")] public virtual IActionResult DeletePet([FromRoute][Required]long? petId, [FromHeader]string apiKey) @@ -71,6 +74,7 @@ public virtual IActionResult DeletePet([FromRoute][Required]long? petId, [FromHe /// Invalid status value [HttpGet] [Route("/v2/pet/findByStatus")] + [ValidateModelState] [SwaggerOperation("FindPetsByStatus")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "successful operation")] @@ -102,6 +106,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery][Required()]ListInvalid tag value [HttpGet] [Route("/v2/pet/findByTags")] + [ValidateModelState] [SwaggerOperation("FindPetsByTags")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "successful operation")] @@ -134,6 +139,7 @@ public virtual IActionResult FindPetsByTags([FromQuery][Required()]List /// Pet not found [HttpGet] [Route("/v2/pet/{petId}")] + [ValidateModelState] [SwaggerOperation("GetPetById")] [SwaggerResponse(statusCode: 200, type: typeof(Pet), description: "successful operation")] @@ -168,6 +174,7 @@ public virtual IActionResult GetPetById([FromRoute][Required]long? petId) /// Validation exception [HttpPut] [Route("/v2/pet")] + [ValidateModelState] [SwaggerOperation("UpdatePet")] public virtual IActionResult UpdatePet([FromBody]Pet body) @@ -194,6 +201,7 @@ public virtual IActionResult UpdatePet([FromBody]Pet body) /// Invalid input [HttpPost] [Route("/v2/pet/{petId}")] + [ValidateModelState] [SwaggerOperation("UpdatePetWithForm")] public virtual IActionResult UpdatePetWithForm([FromRoute][Required]long? petId, [FromForm]string name, [FromForm]string status) @@ -214,6 +222,7 @@ public virtual IActionResult UpdatePetWithForm([FromRoute][Required]long? petId, /// successful operation [HttpPost] [Route("/v2/pet/{petId}/uploadImage")] + [ValidateModelState] [SwaggerOperation("UploadFile")] [SwaggerResponse(statusCode: 200, type: typeof(ApiResponse), description: "successful operation")] 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 4f9ac8f5e184..c4b8f1d63a2b 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 System.ComponentModel.DataAnnotations; using Org.OpenAPITools.Attributes; using Org.OpenAPITools.Models; +using Microsoft.AspNetCore.Authorization; namespace Org.OpenAPITools.Controllers { @@ -33,8 +34,7 @@ public class StoreApiController : ControllerBase /// Invalid ID supplied /// Order not found [HttpDelete] - [Route("/v2/store/order/{orderId}")] - [ValidateModelState] + [Route("/v2/store/order/{orderId}")] [ValidateModelState] [SwaggerOperation("DeleteOrder")] public virtual IActionResult DeleteOrder([FromRoute][Required]string orderId) { @@ -55,6 +55,7 @@ public virtual IActionResult DeleteOrder([FromRoute][Required]string orderId) /// successful operation [HttpGet] [Route("/v2/store/inventory")] + [ValidateModelState] [SwaggerOperation("GetInventory")] [SwaggerResponse(statusCode: 200, type: typeof(Dictionary), description: "successful operation")] @@ -81,8 +82,7 @@ public virtual IActionResult GetInventory() /// Invalid ID supplied /// Order not found [HttpGet] - [Route("/v2/store/order/{orderId}")] - [ValidateModelState] + [Route("/v2/store/order/{orderId}")] [ValidateModelState] [SwaggerOperation("GetOrderById")] [SwaggerResponse(statusCode: 200, type: typeof(Order), description: "successful operation")] public virtual IActionResult GetOrderById([FromRoute][Required][Range(1, 5)]long? orderId) @@ -114,8 +114,7 @@ public virtual IActionResult GetOrderById([FromRoute][Required][Range(1, 5)]long /// successful operation /// Invalid Order [HttpPost] - [Route("/v2/store/order")] - [ValidateModelState] + [Route("/v2/store/order")] [ValidateModelState] [SwaggerOperation("PlaceOrder")] [SwaggerResponse(statusCode: 200, type: typeof(Order), description: "successful operation")] public virtual IActionResult PlaceOrder([FromBody]Order body) 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 85820331a5e6..e23a9c253b01 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 System.ComponentModel.DataAnnotations; using Org.OpenAPITools.Attributes; using Org.OpenAPITools.Models; +using Microsoft.AspNetCore.Authorization; namespace Org.OpenAPITools.Controllers { @@ -32,8 +33,7 @@ public class UserApiController : ControllerBase /// Created user object /// successful operation [HttpPost] - [Route("/v2/user")] - [ValidateModelState] + [Route("/v2/user")] [ValidateModelState] [SwaggerOperation("CreateUser")] public virtual IActionResult CreateUser([FromBody]User body) { @@ -50,8 +50,7 @@ public virtual IActionResult CreateUser([FromBody]User body) /// List of user object /// successful operation [HttpPost] - [Route("/v2/user/createWithArray")] - [ValidateModelState] + [Route("/v2/user/createWithArray")] [ValidateModelState] [SwaggerOperation("CreateUsersWithArrayInput")] public virtual IActionResult CreateUsersWithArrayInput([FromBody]List body) { @@ -68,8 +67,7 @@ public virtual IActionResult CreateUsersWithArrayInput([FromBody]List body /// List of user object /// successful operation [HttpPost] - [Route("/v2/user/createWithList")] - [ValidateModelState] + [Route("/v2/user/createWithList")] [ValidateModelState] [SwaggerOperation("CreateUsersWithListInput")] public virtual IActionResult CreateUsersWithListInput([FromBody]List body) { @@ -88,8 +86,7 @@ public virtual IActionResult CreateUsersWithListInput([FromBody]List body) /// Invalid username supplied /// User not found [HttpDelete] - [Route("/v2/user/{username}")] - [ValidateModelState] + [Route("/v2/user/{username}")] [ValidateModelState] [SwaggerOperation("DeleteUser")] public virtual IActionResult DeleteUser([FromRoute][Required]string username) { @@ -111,8 +108,7 @@ public virtual IActionResult DeleteUser([FromRoute][Required]string username) /// Invalid username supplied /// User not found [HttpGet] - [Route("/v2/user/{username}")] - [ValidateModelState] + [Route("/v2/user/{username}")] [ValidateModelState] [SwaggerOperation("GetUserByName")] [SwaggerResponse(statusCode: 200, type: typeof(User), description: "successful operation")] public virtual IActionResult GetUserByName([FromRoute][Required]string username) @@ -145,8 +141,7 @@ public virtual IActionResult GetUserByName([FromRoute][Required]string username) /// successful operation /// Invalid username/password supplied [HttpGet] - [Route("/v2/user/login")] - [ValidateModelState] + [Route("/v2/user/login")] [ValidateModelState] [SwaggerOperation("LoginUser")] [SwaggerResponse(statusCode: 200, type: typeof(string), description: "successful operation")] public virtual IActionResult LoginUser([FromQuery][Required()]string username, [FromQuery][Required()]string password) @@ -171,8 +166,7 @@ public virtual IActionResult LoginUser([FromQuery][Required()]string username, [ /// /// successful operation [HttpGet] - [Route("/v2/user/logout")] - [ValidateModelState] + [Route("/v2/user/logout")] [ValidateModelState] [SwaggerOperation("LogoutUser")] public virtual IActionResult LogoutUser() { @@ -192,8 +186,7 @@ public virtual IActionResult LogoutUser() /// Invalid user supplied /// User not found [HttpPut] - [Route("/v2/user/{username}")] - [ValidateModelState] + [Route("/v2/user/{username}")] [ValidateModelState] [SwaggerOperation("UpdateUser")] public virtual IActionResult UpdateUser([FromRoute][Required]string username, [FromBody]User body) { From 963e57eb279ca9ac9943ea6e0ec5b8189e283687 Mon Sep 17 00:00:00 2001 From: MBcom <27956078+MBcom@users.noreply.github.com> Date: Tue, 29 Jan 2019 15:56:41 +0100 Subject: [PATCH 4/9] multi roles fix --- .../src/main/java/org/openapitools/codegen/CodegenSecurity.java | 2 +- .../main/java/org/openapitools/codegen/DefaultGenerator.java | 1 + .../src/main/resources/aspnetcore/2.1/controller.mustache | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) 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 24d665aacbb4..ab64461b17fc 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 7bd7e9653a03..b1c91f59f7e4 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 @@ -1057,6 +1057,7 @@ private void processOperation(String resourcePath, String httpMethod, Operation } } + security.hasScopes = scopes.size() > 0; security.scopes = scopes; } } 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 8dc9495de4c7..3727d8255a17 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 @@ -26,7 +26,7 @@ namespace {{packageName}}.Controllers /// {{message}}{{/responses}} [{{httpMethod}}] [Route("{{{basePathWithoutHost}}}{{{path}}}")]{{#hasAuthMethods}} -{{#authMethods}}{{#isBasicBearer}} [Authorize{{#scopes}}(Roles = "{{scope}}{{#hasMore}},{{/hasMore}}"){{/scopes}}]{{/isBasicBearer}}{{/authMethods}} +{{#authMethods}}{{#isBasicBearer}} [Authorize{{#hasScopes}}(Roles = "{{#scopes}}{{scope}}{{#hasMore}},{{/hasMore}}{{/scopes}}"){{/hasScopes}}]{{/isBasicBearer}}{{/authMethods}} {{/hasAuthMethods}} [ValidateModelState]{{#useSwashbuckle}} [SwaggerOperation("{{operationId}}")]{{#responses}}{{#dataType}} From bcead21d7c373eece9fd6d1c1cd89581eb9c7ee4 Mon Sep 17 00:00:00 2001 From: MBcom <27956078+MBcom@users.noreply.github.com> Date: Wed, 20 Feb 2019 12:43:25 +0100 Subject: [PATCH 5/9] null pointer error prevention --- .../main/java/org/openapitools/codegen/DefaultGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b1c91f59f7e4..ab8302a1108c 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 @@ -1044,7 +1044,7 @@ private void processOperation(String resourcePath, String httpMethod, Operation scope.put("scope", sc); scope.put("description", ""); count++; - if (count < req.get(key).size()){ + if (req.get(key) != null && count < req.get(key).size()){ scope.put("hasMore", "true"); } else { scope.put("hasMore", null); From a5ad654d84f682a4d81ca3f705ce3e2665c9208d Mon Sep 17 00:00:00 2001 From: MBcom <27956078+MBcom@users.noreply.github.com> Date: Wed, 20 Feb 2019 12:57:09 +0100 Subject: [PATCH 6/9] null point exception fixes --- .../main/java/org/openapitools/codegen/DefaultGenerator.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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 ab8302a1108c..d27a1cc1f584 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 @@ -1034,10 +1034,11 @@ private void processOperation(String resourcePath, String httpMethod, Operation codegenOperation.authMethods = config.fromSecurity(authMethods); List> scopes = new ArrayList>(); for (CodegenSecurity security : codegenOperation.authMethods){ - if (security.isBasicBearer){ + if (security != null && security.isBasicBearer != null && security.isBasicBearer){ for (SecurityRequirement req : securities){ + if (req == null) continue; for (String key : req.keySet()){ - if (key.equals(security.name)){ + if (security.name != null && key.equals(security.name)){ int count = 0; for (String sc : req.get(key)){ Map scope = new HashMap(); From cb728063a6503717e7bb6b28365cf6d3681a01bf Mon Sep 17 00:00:00 2001 From: MBcom <27956078+MBcom@users.noreply.github.com> Date: Tue, 12 Mar 2019 14:26:06 +0100 Subject: [PATCH 7/9] null pointer fixes --- .../codegen/DefaultGenerator.java | 48 ++++++++++--------- 1 file changed, 25 insertions(+), 23 deletions(-) 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 d27a1cc1f584..3dad4f5a6817 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 @@ -1033,36 +1033,38 @@ private void processOperation(String resourcePath, String httpMethod, Operation if (authMethods != null && !authMethods.isEmpty()) { codegenOperation.authMethods = config.fromSecurity(authMethods); List> scopes = new ArrayList>(); - for (CodegenSecurity security : codegenOperation.authMethods){ - if (security != null && security.isBasicBearer != null && security.isBasicBearer){ - 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); + if (odegenOperation.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); } - scopes.add(scope); + //end this inner for + break; } - //end this inner for - break; } + } - + security.hasScopes = scopes.size() > 0; + security.scopes = scopes; } - security.hasScopes = scopes.size() > 0; - security.scopes = scopes; } } - codegenOperation.hasAuthMethods = true; } From 56bb04884f2f42649b029f1fbbf5c71ba37494c2 Mon Sep 17 00:00:00 2001 From: MBcom <27956078+MBcom@users.noreply.github.com> Date: Tue, 12 Mar 2019 14:41:04 +0100 Subject: [PATCH 8/9] npe fix --- .../main/java/org/openapitools/codegen/DefaultGenerator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b8bfcb7dfdf7..ec734d987bca 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 @@ -1033,7 +1033,7 @@ private void processOperation(String resourcePath, String httpMethod, Operation if (authMethods != null && !authMethods.isEmpty()) { codegenOperation.authMethods = config.fromSecurity(authMethods); List> scopes = new ArrayList>(); - if (odegenOperation.authMethods != null){ + if (codegenOperation.authMethods != null){ for (CodegenSecurity security : codegenOperation.authMethods){ if (security != null && security.isBasicBearer != null && security.isBasicBearer && securities != null){ From bc8718f484a5e7e95fbe9ce5f17bcc5eec1c3bb1 Mon Sep 17 00:00:00 2001 From: MBcom <27956078+MBcom@users.noreply.github.com> Date: Tue, 4 Jun 2019 10:29:07 +0200 Subject: [PATCH 9/9] solved line break issue --- .../aspnetcore/2.1/controller.mustache | 5 ++-- .../Org.OpenAPITools/Controllers/PetApi.cs | 8 ------- .../Org.OpenAPITools/Controllers/StoreApi.cs | 10 ++++---- .../Org.OpenAPITools/Controllers/UserApi.cs | 24 ++++++++++++------- 4 files changed, 24 insertions(+), 23 deletions(-) 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 ac269c00eb8a..949469c048f5 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 @@ -25,9 +25,8 @@ namespace {{packageName}}.Controllers /// {{description}}{{/allParams}}{{#responses}} /// {{message}}{{/responses}} [{{httpMethod}}] - [Route("{{{basePathWithoutHost}}}{{{path}}}")]{{#hasAuthMethods}} -{{#authMethods}}{{#isBasicBearer}} [Authorize{{#hasScopes}}(Roles = "{{#scopes}}{{scope}}{{#hasMore}},{{/hasMore}}{{/scopes}}"){{/hasScopes}}]{{/isBasicBearer}}{{/authMethods}} -{{/hasAuthMethods}} + [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}} 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 e207a9e82f42..ef678525b1d2 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/PetApi.cs @@ -33,7 +33,6 @@ public class PetApiController : ControllerBase /// Invalid input [HttpPost] [Route("/v2/pet")] - [ValidateModelState] [SwaggerOperation("AddPet")] public virtual IActionResult AddPet([FromBody]Pet body) @@ -53,7 +52,6 @@ public virtual IActionResult AddPet([FromBody]Pet body) /// Invalid pet value [HttpDelete] [Route("/v2/pet/{petId}")] - [ValidateModelState] [SwaggerOperation("DeletePet")] public virtual IActionResult DeletePet([FromRoute][Required]long? petId, [FromHeader]string apiKey) @@ -74,7 +72,6 @@ public virtual IActionResult DeletePet([FromRoute][Required]long? petId, [FromHe /// Invalid status value [HttpGet] [Route("/v2/pet/findByStatus")] - [ValidateModelState] [SwaggerOperation("FindPetsByStatus")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "successful operation")] @@ -106,7 +103,6 @@ public virtual IActionResult FindPetsByStatus([FromQuery][Required()]ListInvalid tag value [HttpGet] [Route("/v2/pet/findByTags")] - [ValidateModelState] [SwaggerOperation("FindPetsByTags")] [SwaggerResponse(statusCode: 200, type: typeof(List), description: "successful operation")] @@ -139,7 +135,6 @@ public virtual IActionResult FindPetsByTags([FromQuery][Required()]List /// Pet not found [HttpGet] [Route("/v2/pet/{petId}")] - [ValidateModelState] [SwaggerOperation("GetPetById")] [SwaggerResponse(statusCode: 200, type: typeof(Pet), description: "successful operation")] @@ -174,7 +169,6 @@ public virtual IActionResult GetPetById([FromRoute][Required]long? petId) /// Validation exception [HttpPut] [Route("/v2/pet")] - [ValidateModelState] [SwaggerOperation("UpdatePet")] public virtual IActionResult UpdatePet([FromBody]Pet body) @@ -201,7 +195,6 @@ public virtual IActionResult UpdatePet([FromBody]Pet body) /// Invalid input [HttpPost] [Route("/v2/pet/{petId}")] - [ValidateModelState] [SwaggerOperation("UpdatePetWithForm")] public virtual IActionResult UpdatePetWithForm([FromRoute][Required]long? petId, [FromForm]string name, [FromForm]string status) @@ -222,7 +215,6 @@ public virtual IActionResult UpdatePetWithForm([FromRoute][Required]long? petId, /// successful operation [HttpPost] [Route("/v2/pet/{petId}/uploadImage")] - [ValidateModelState] [SwaggerOperation("UploadFile")] [SwaggerResponse(statusCode: 200, type: typeof(ApiResponse), description: "successful operation")] 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 c340884d352c..8cf0ee09e0a1 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/StoreApi.cs @@ -34,7 +34,8 @@ public class StoreApiController : ControllerBase /// Invalid ID supplied /// Order not found [HttpDelete] - [Route("/v2/store/order/{orderId}")] [ValidateModelState] + [Route("/v2/store/order/{orderId}")] + [ValidateModelState] [SwaggerOperation("DeleteOrder")] public virtual IActionResult DeleteOrder([FromRoute][Required]string orderId) { @@ -55,7 +56,6 @@ public virtual IActionResult DeleteOrder([FromRoute][Required]string orderId) /// successful operation [HttpGet] [Route("/v2/store/inventory")] - [ValidateModelState] [SwaggerOperation("GetInventory")] [SwaggerResponse(statusCode: 200, type: typeof(Dictionary), description: "successful operation")] @@ -82,7 +82,8 @@ public virtual IActionResult GetInventory() /// Invalid ID supplied /// Order not found [HttpGet] - [Route("/v2/store/order/{orderId}")] [ValidateModelState] + [Route("/v2/store/order/{orderId}")] + [ValidateModelState] [SwaggerOperation("GetOrderById")] [SwaggerResponse(statusCode: 200, type: typeof(Order), description: "successful operation")] public virtual IActionResult GetOrderById([FromRoute][Required][Range(1, 5)]long? orderId) @@ -114,7 +115,8 @@ public virtual IActionResult GetOrderById([FromRoute][Required][Range(1, 5)]long /// successful operation /// Invalid Order [HttpPost] - [Route("/v2/store/order")] [ValidateModelState] + [Route("/v2/store/order")] + [ValidateModelState] [SwaggerOperation("PlaceOrder")] [SwaggerResponse(statusCode: 200, type: typeof(Order), description: "successful operation")] public virtual IActionResult PlaceOrder([FromBody]Order body) 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 b14f35e53e2c..53a47cbf0adf 100644 --- a/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs +++ b/samples/server/petstore/aspnetcore/src/Org.OpenAPITools/Controllers/UserApi.cs @@ -33,7 +33,8 @@ public class UserApiController : ControllerBase /// Created user object /// successful operation [HttpPost] - [Route("/v2/user")] [ValidateModelState] + [Route("/v2/user")] + [ValidateModelState] [SwaggerOperation("CreateUser")] public virtual IActionResult CreateUser([FromBody]User body) { @@ -50,7 +51,8 @@ public virtual IActionResult CreateUser([FromBody]User body) /// List of user object /// successful operation [HttpPost] - [Route("/v2/user/createWithArray")] [ValidateModelState] + [Route("/v2/user/createWithArray")] + [ValidateModelState] [SwaggerOperation("CreateUsersWithArrayInput")] public virtual IActionResult CreateUsersWithArrayInput([FromBody]List body) { @@ -67,7 +69,8 @@ public virtual IActionResult CreateUsersWithArrayInput([FromBody]List body /// List of user object /// successful operation [HttpPost] - [Route("/v2/user/createWithList")] [ValidateModelState] + [Route("/v2/user/createWithList")] + [ValidateModelState] [SwaggerOperation("CreateUsersWithListInput")] public virtual IActionResult CreateUsersWithListInput([FromBody]List body) { @@ -86,7 +89,8 @@ public virtual IActionResult CreateUsersWithListInput([FromBody]List body) /// Invalid username supplied /// User not found [HttpDelete] - [Route("/v2/user/{username}")] [ValidateModelState] + [Route("/v2/user/{username}")] + [ValidateModelState] [SwaggerOperation("DeleteUser")] public virtual IActionResult DeleteUser([FromRoute][Required]string username) { @@ -108,7 +112,8 @@ public virtual IActionResult DeleteUser([FromRoute][Required]string username) /// Invalid username supplied /// User not found [HttpGet] - [Route("/v2/user/{username}")] [ValidateModelState] + [Route("/v2/user/{username}")] + [ValidateModelState] [SwaggerOperation("GetUserByName")] [SwaggerResponse(statusCode: 200, type: typeof(User), description: "successful operation")] public virtual IActionResult GetUserByName([FromRoute][Required]string username) @@ -141,7 +146,8 @@ public virtual IActionResult GetUserByName([FromRoute][Required]string username) /// successful operation /// Invalid username/password supplied [HttpGet] - [Route("/v2/user/login")] [ValidateModelState] + [Route("/v2/user/login")] + [ValidateModelState] [SwaggerOperation("LoginUser")] [SwaggerResponse(statusCode: 200, type: typeof(string), description: "successful operation")] public virtual IActionResult LoginUser([FromQuery][Required()]string username, [FromQuery][Required()]string password) @@ -166,7 +172,8 @@ public virtual IActionResult LoginUser([FromQuery][Required()]string username, [ /// /// successful operation [HttpGet] - [Route("/v2/user/logout")] [ValidateModelState] + [Route("/v2/user/logout")] + [ValidateModelState] [SwaggerOperation("LogoutUser")] public virtual IActionResult LogoutUser() { @@ -186,7 +193,8 @@ public virtual IActionResult LogoutUser() /// Invalid user supplied /// User not found [HttpPut] - [Route("/v2/user/{username}")] [ValidateModelState] + [Route("/v2/user/{username}")] + [ValidateModelState] [SwaggerOperation("UpdateUser")] public virtual IActionResult UpdateUser([FromRoute][Required]string username, [FromBody]User body) {