Skip to content

Commit

Permalink
feat: use authentication and authorization
Browse files Browse the repository at this point in the history
  • Loading branch information
CarlosPavajeau committed Jun 9, 2021
1 parent 4607f59 commit aee7ec3
Show file tree
Hide file tree
Showing 4 changed files with 61 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@
using Armory.Users.Application.GeneratePasswordResetToken;
using Armory.Users.Application.ResetPassword;
using Armory.Users.Domain;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;

namespace Armory.Api.Controllers.ArmoryUsers
{
[ApiController]
[Authorize]
[Route("[controller]")]
public class ArmoryUsersController : ControllerBase
{
Expand All @@ -40,6 +42,7 @@ private IActionResult IdentityErrors(IEnumerable<IdentityError> errors)
}

[HttpPost]
[AllowAnonymous]
public async Task<IActionResult> RegisterUser([FromBody] CreateArmoryUserRequest request)
{
try
Expand All @@ -63,6 +66,7 @@ private IActionResult ArmoryUserNotFound(string usernameOrEmail)
}

[HttpPost("[action]/{userNameOrEmail}")]
[AllowAnonymous]
public async Task<IActionResult> ForgottenPassword(string userNameOrEmail)
{
var response = await _queryBus.Ask<PasswordResetTokenResponse>(
Expand All @@ -73,6 +77,7 @@ public async Task<IActionResult> ForgottenPassword(string userNameOrEmail)
}

[HttpPost("[action]/{usernameOrEmail}")]
[AllowAnonymous]
public async Task<IActionResult> ResetPassword(string usernameOrEmail, [FromBody] ResetPasswordRequest request)
{
try
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
using Armory.Users.Application.GenerateJwt;
using Armory.Users.Application.Logout;
using Armory.Users.Domain;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

namespace Armory.Api.Controllers.ArmoryUsers.Authentication
{
[ApiController]
[Authorize]
[Route("[controller]")]
public class AuthenticationController : ControllerBase
{
Expand All @@ -23,6 +25,7 @@ public AuthenticationController(ICommandBus commandBus, IQueryBus queryBus)
}

[HttpPost]
[AllowAnonymous]
public async Task<ActionResult<string>> Authenticate([FromBody] AuthenticationRequest request)
{
try
Expand Down
48 changes: 48 additions & 0 deletions src/Armory.Api/Extensions/Infrastructure.cs
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
using System;
using Armory.Shared.Domain.Bus.Command;
using Armory.Shared.Domain.Bus.Event;
using Armory.Shared.Domain.Bus.Query;
Expand All @@ -8,10 +9,12 @@
using Armory.Users.Infrastructure.Identity;
using Armory.Users.Infrastructure.Persistence;
using Armory.Users.Infrastructure.Persistence.EntityFramework;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.OpenApi.Models;

namespace Armory.Api.Extensions
{
Expand Down Expand Up @@ -41,5 +44,50 @@ public static IServiceCollection AddInfrastructure(this IServiceCollection servi

return services;
}

public static IServiceCollection AddSwagger(this IServiceCollection services)
{
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo {Title = "Armory.Api", Version = "v1"});
c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
Description =
"JWT Authorization header using the Bearer scheme. Example 'Authorization: Bearer {token}'",
Name = "Authorization",
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey
});
c.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type = ReferenceType.SecurityScheme,
Id = "Bearer"
},
Scheme = "oauth2",
Name = "Bearer",
In = ParameterLocation.Header
},
ArraySegment<string>.Empty
}
});
});

return services;
}

public static IApplicationBuilder UseSwaggerDocumentation(this IApplicationBuilder app)
{
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Armory.Api v1"));

return app;
}
}
}
14 changes: 5 additions & 9 deletions src/Armory.Api/Startup.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi.Models;

namespace Armory.Api
{
Expand All @@ -21,12 +20,9 @@ public Startup(IConfiguration configuration)
public void ConfigureServices(IServiceCollection services)
{
services.AddControllers();
services.AddApplication();
services.AddInfrastructure(Configuration);
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo {Title = "Armory.Api", Version = "v1"});
});
services.AddApplication()
.AddInfrastructure(Configuration)
.AddSwagger();
}

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
Expand All @@ -35,14 +31,14 @@ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Armory.Api v1"));
app.UseSwaggerDocumentation();
}

app.UseHttpsRedirection();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints => { endpoints.MapControllers(); });
Expand Down

0 comments on commit aee7ec3

Please sign in to comment.