Skip to content

Commit

Permalink
hotfix
Browse files Browse the repository at this point in the history
  • Loading branch information
Brunobento1990 committed Jan 27, 2025
1 parent d9682a6 commit 91482f9
Show file tree
Hide file tree
Showing 4 changed files with 97 additions and 0 deletions.
5 changes: 5 additions & 0 deletions OpenAdm.Api/Attributes/TryAutenticaAttribute.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
namespace OpenAdm.Api.Attributes;

public class TryAutenticaAttribute : Attribute
{
}
2 changes: 2 additions & 0 deletions OpenAdm.Api/Controllers/ProdutoController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public ProdutoController(IProdutoService produtoService)
}

[HttpGet("list")]
[TryAutentica]
public async Task<IActionResult> ListProdutos([FromQuery] PaginacaoProdutoEcommerceDto paginacaoProdutoEcommerceDto)
{
var result = await _produtoService.GetProdutosAsync(paginacaoProdutoEcommerceDto);
Expand All @@ -35,6 +36,7 @@ public async Task<IActionResult> ListAllProdutos()

[ResponseCache(CacheProfileName = "Default300")]
[HttpGet("list-by-categorias")]
[TryAutentica]
public async Task<IActionResult> ListProdutosByCategorias([FromQuery] Guid categoriaId)
{
var result = await _produtoService.GetProdutosByCategoriaIdAsync(categoriaId);
Expand Down
1 change: 1 addition & 0 deletions OpenAdm.Api/Middlewares/InjectMiddleware.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,6 @@ public static void AddMiddlewaresApi(this WebApplication app)
app.UseMiddleware<ParceiroMiddleware>();
app.UseMiddleware<AuthorizeMiddleware>();
app.UseMiddleware<AutenticaMercadoPagoMiddleware>();
app.UseMiddleware<TryAutenticaMiddleware>();
}
}
89 changes: 89 additions & 0 deletions OpenAdm.Api/Middlewares/TryAutenticaMiddleware.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
using System.IdentityModel.Tokens.Jwt;
using System.Text;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.IdentityModel.Tokens;
using OpenAdm.Api.Attributes;
using OpenAdm.Application.Models.Tokens;
using OpenAdm.Domain.Exceptions;
using OpenAdm.Domain.Interfaces;

namespace OpenAdm.Api.Middlewares;

public class TryAutenticaMiddleware
{
private readonly RequestDelegate _next;
public TryAutenticaMiddleware(RequestDelegate next)
{
_next = next;
}

public async Task Invoke(
HttpContext httpContext,
IUsuarioAutenticado usuarioAutenticado)
{
if (usuarioAutenticado.Id != Guid.Empty)
{
await _next(httpContext);
return;
}

var autenticar = httpContext.Features.Get<IEndpointFeature>()?.Endpoint?.Metadata
.FirstOrDefault(m => m is TryAutenticaAttribute) is TryAutenticaAttribute atributoAutorizacao;

if (!autenticar)
{
await _next(httpContext);
return;
}

var token = httpContext.Request.Headers.Authorization.ToString().Split(" ").Last().Replace("Bearer", "")?.Trim();

if (string.IsNullOrWhiteSpace(token))
{
await _next(httpContext);
return;
}

var keyJwt = VariaveisDeAmbiente.GetVariavel("JWT_KEY");

try
{
var tokenHandler = new JwtSecurityTokenHandler();
tokenHandler.ValidateToken(token, new TokenValidationParameters
{
ValidateIssuer = true,
ValidateAudience = true,
ValidateLifetime = false,
ValidateIssuerSigningKey = true,
ValidIssuer = ConfiguracaoDeToken.Issue,
ValidAudience = ConfiguracaoDeToken.Audience,
IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(ConfiguracaoDeToken.Key))
}, out SecurityToken validatedToken);

var jwtToken = (JwtSecurityToken)validatedToken;

var id = jwtToken.Claims.FirstOrDefault(c => c.Type == "Id")?.Value
?? throw new ExceptionUnauthorize("Token inválido");
var isFuncionario = jwtToken.Claims.FirstOrDefault(c => c.Type == "IsFuncionario")?.Value;

if (!Guid.TryParse(id, out Guid idParse))
{
throw new ExceptionUnauthorize("Por favor, efetue o login novamente");
}

usuarioAutenticado.Id = idParse;
usuarioAutenticado.IsFuncionario = !string.IsNullOrWhiteSpace(isFuncionario) && isFuncionario == "TRUE";

}
catch (SecurityTokenExpiredException)
{
throw new ExceptionUnauthorize("Sessão expirada, efetue o login novamente!");
}
catch (Exception)
{
throw new ExceptionUnauthorize("Efetue o login novamente!");
}

await _next(httpContext);
}
}

0 comments on commit 91482f9

Please sign in to comment.