Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

[ASP.Net Core] General support to add scopes for bearer authentication #1984

Merged
merged 11 commits into from
Jun 4, 2019
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public class CodegenSecurity {
// Oauth specific
public String flow, authorizationUrl, tokenUrl;
public List<Map<String, Object>> scopes;
public Boolean isCode, isPassword, isApplication, isImplicit;
public Boolean isCode, isPassword, isApplication, isImplicit, hasScopes;

@Override
public String toString() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1024,13 +1024,47 @@ private void processOperation(String resourcePath, String httpMethod, Operation
if (securities != null && securities.isEmpty()) {
continue;
}

Map<String, SecurityScheme> authMethods = getAuthMethods(securities, securitySchemes);
if (authMethods == null || authMethods.isEmpty()) {
authMethods = getAuthMethods(globalSecurities, securitySchemes);
}

if (authMethods != null && !authMethods.isEmpty()) {
codegenOperation.authMethods = config.fromSecurity(authMethods);
List<Map<String, Object>> scopes = new ArrayList<Map<String, Object>>();
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<String, Object> scope = new HashMap<String, Object>();
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;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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}}
Expand All @@ -24,7 +25,9 @@ namespace {{packageName}}.Controllers
/// <param name="{{paramName}}">{{description}}</param>{{/allParams}}{{#responses}}
/// <response code="{{code}}">{{message}}</response>{{/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}}
Expand Down
Original file line number Diff line number Diff line change
@@ -1 +1 @@
4.0.0-SNAPSHOT
4.0.0-SNAPSHOT
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
using System.ComponentModel.DataAnnotations;
using Org.OpenAPITools.Attributes;
using Org.OpenAPITools.Models;
using Microsoft.AspNetCore.Authorization;

namespace Org.OpenAPITools.Controllers
{
Expand All @@ -32,6 +33,7 @@ public class PetApiController : ControllerBase
/// <response code="405">Invalid input</response>
[HttpPost]
[Route("/v2/pet")]

[ValidateModelState]
[SwaggerOperation("AddPet")]
public virtual IActionResult AddPet([FromBody]Pet body)
Expand All @@ -51,6 +53,7 @@ public virtual IActionResult AddPet([FromBody]Pet body)
/// <response code="400">Invalid pet value</response>
[HttpDelete]
[Route("/v2/pet/{petId}")]

[ValidateModelState]
[SwaggerOperation("DeletePet")]
public virtual IActionResult DeletePet([FromRoute][Required]long? petId, [FromHeader]string apiKey)
Expand All @@ -71,6 +74,7 @@ public virtual IActionResult DeletePet([FromRoute][Required]long? petId, [FromHe
/// <response code="400">Invalid status value</response>
[HttpGet]
[Route("/v2/pet/findByStatus")]

[ValidateModelState]
[SwaggerOperation("FindPetsByStatus")]
[SwaggerResponse(statusCode: 200, type: typeof(List<Pet>), description: "successful operation")]
Expand Down Expand Up @@ -102,6 +106,7 @@ public virtual IActionResult FindPetsByStatus([FromQuery][Required()]List<string
/// <response code="400">Invalid tag value</response>
[HttpGet]
[Route("/v2/pet/findByTags")]

[ValidateModelState]
[SwaggerOperation("FindPetsByTags")]
[SwaggerResponse(statusCode: 200, type: typeof(List<Pet>), description: "successful operation")]
Expand Down Expand Up @@ -134,6 +139,7 @@ public virtual IActionResult FindPetsByTags([FromQuery][Required()]List<string>
/// <response code="404">Pet not found</response>
[HttpGet]
[Route("/v2/pet/{petId}")]

[ValidateModelState]
[SwaggerOperation("GetPetById")]
[SwaggerResponse(statusCode: 200, type: typeof(Pet), description: "successful operation")]
Expand Down Expand Up @@ -168,6 +174,7 @@ public virtual IActionResult GetPetById([FromRoute][Required]long? petId)
/// <response code="405">Validation exception</response>
[HttpPut]
[Route("/v2/pet")]

[ValidateModelState]
[SwaggerOperation("UpdatePet")]
public virtual IActionResult UpdatePet([FromBody]Pet body)
Expand All @@ -194,6 +201,7 @@ public virtual IActionResult UpdatePet([FromBody]Pet body)
/// <response code="405">Invalid input</response>
[HttpPost]
[Route("/v2/pet/{petId}")]

[ValidateModelState]
[SwaggerOperation("UpdatePetWithForm")]
public virtual IActionResult UpdatePetWithForm([FromRoute][Required]long? petId, [FromForm]string name, [FromForm]string status)
Expand All @@ -214,6 +222,7 @@ public virtual IActionResult UpdatePetWithForm([FromRoute][Required]long? petId,
/// <response code="200">successful operation</response>
[HttpPost]
[Route("/v2/pet/{petId}/uploadImage")]

[ValidateModelState]
[SwaggerOperation("UploadFile")]
[SwaggerResponse(statusCode: 200, type: typeof(ApiResponse), description: "successful operation")]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
using System.ComponentModel.DataAnnotations;
using Org.OpenAPITools.Attributes;
using Org.OpenAPITools.Models;
using Microsoft.AspNetCore.Authorization;

namespace Org.OpenAPITools.Controllers
{
Expand All @@ -33,8 +34,7 @@ public class StoreApiController : ControllerBase
/// <response code="400">Invalid ID supplied</response>
/// <response code="404">Order not found</response>
[HttpDelete]
[Route("/v2/store/order/{orderId}")]
[ValidateModelState]
[Route("/v2/store/order/{orderId}")] [ValidateModelState]
[SwaggerOperation("DeleteOrder")]
public virtual IActionResult DeleteOrder([FromRoute][Required]string orderId)
{
Expand All @@ -55,6 +55,7 @@ public virtual IActionResult DeleteOrder([FromRoute][Required]string orderId)
/// <response code="200">successful operation</response>
[HttpGet]
[Route("/v2/store/inventory")]

[ValidateModelState]
[SwaggerOperation("GetInventory")]
[SwaggerResponse(statusCode: 200, type: typeof(Dictionary<string, int?>), description: "successful operation")]
Expand All @@ -81,8 +82,7 @@ public virtual IActionResult GetInventory()
/// <response code="400">Invalid ID supplied</response>
/// <response code="404">Order not found</response>
[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)
Expand Down Expand Up @@ -114,8 +114,7 @@ public virtual IActionResult GetOrderById([FromRoute][Required][Range(1, 5)]long
/// <response code="200">successful operation</response>
/// <response code="400">Invalid Order</response>
[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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
using System.ComponentModel.DataAnnotations;
using Org.OpenAPITools.Attributes;
using Org.OpenAPITools.Models;
using Microsoft.AspNetCore.Authorization;

namespace Org.OpenAPITools.Controllers
{
Expand All @@ -32,8 +33,7 @@ public class UserApiController : ControllerBase
/// <param name="body">Created user object</param>
/// <response code="0">successful operation</response>
[HttpPost]
[Route("/v2/user")]
[ValidateModelState]
[Route("/v2/user")] [ValidateModelState]
[SwaggerOperation("CreateUser")]
public virtual IActionResult CreateUser([FromBody]User body)
{
Expand All @@ -50,8 +50,7 @@ public virtual IActionResult CreateUser([FromBody]User body)
/// <param name="body">List of user object</param>
/// <response code="0">successful operation</response>
[HttpPost]
[Route("/v2/user/createWithArray")]
[ValidateModelState]
[Route("/v2/user/createWithArray")] [ValidateModelState]
[SwaggerOperation("CreateUsersWithArrayInput")]
public virtual IActionResult CreateUsersWithArrayInput([FromBody]List<User> body)
{
Expand All @@ -68,8 +67,7 @@ public virtual IActionResult CreateUsersWithArrayInput([FromBody]List<User> body
/// <param name="body">List of user object</param>
/// <response code="0">successful operation</response>
[HttpPost]
[Route("/v2/user/createWithList")]
[ValidateModelState]
[Route("/v2/user/createWithList")] [ValidateModelState]
[SwaggerOperation("CreateUsersWithListInput")]
public virtual IActionResult CreateUsersWithListInput([FromBody]List<User> body)
{
Expand All @@ -88,8 +86,7 @@ public virtual IActionResult CreateUsersWithListInput([FromBody]List<User> body)
/// <response code="400">Invalid username supplied</response>
/// <response code="404">User not found</response>
[HttpDelete]
[Route("/v2/user/{username}")]
[ValidateModelState]
[Route("/v2/user/{username}")] [ValidateModelState]
[SwaggerOperation("DeleteUser")]
public virtual IActionResult DeleteUser([FromRoute][Required]string username)
{
Expand All @@ -111,8 +108,7 @@ public virtual IActionResult DeleteUser([FromRoute][Required]string username)
/// <response code="400">Invalid username supplied</response>
/// <response code="404">User not found</response>
[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)
Expand Down Expand Up @@ -145,8 +141,7 @@ public virtual IActionResult GetUserByName([FromRoute][Required]string username)
/// <response code="200">successful operation</response>
/// <response code="400">Invalid username/password supplied</response>
[HttpGet]
[Route("/v2/user/#")]
[ValidateModelState]
[Route("/v2/user/#")] [ValidateModelState]
[SwaggerOperation("LoginUser")]
[SwaggerResponse(statusCode: 200, type: typeof(string), description: "successful operation")]
public virtual IActionResult LoginUser([FromQuery][Required()]string username, [FromQuery][Required()]string password)
Expand All @@ -171,8 +166,7 @@ public virtual IActionResult LoginUser([FromQuery][Required()]string username, [
/// </summary>
/// <response code="0">successful operation</response>
[HttpGet]
[Route("/v2/user/logout")]
[ValidateModelState]
[Route("/v2/user/logout")] [ValidateModelState]
[SwaggerOperation("LogoutUser")]
public virtual IActionResult LogoutUser()
{
Expand All @@ -192,8 +186,7 @@ public virtual IActionResult LogoutUser()
/// <response code="400">Invalid user supplied</response>
/// <response code="404">User not found</response>
[HttpPut]
[Route("/v2/user/{username}")]
[ValidateModelState]
[Route("/v2/user/{username}")] [ValidateModelState]
[SwaggerOperation("UpdateUser")]
public virtual IActionResult UpdateUser([FromRoute][Required]string username, [FromBody]User body)
{
Expand Down