line-gestao-api/Services/TenantMiddleware.cs

42 lines
985 B
C#

using System.Security.Claims;
namespace line_gestao_api.Services;
public class TenantMiddleware
{
private readonly RequestDelegate _next;
public TenantMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task InvokeAsync(HttpContext context, ITenantProvider tenantProvider)
{
Guid? tenantId = null;
var claim = context.User.FindFirst("tenantId")?.Value
?? context.User.FindFirst("tenant")?.Value;
var headerValue = context.Request.Headers["X-Tenant-Id"].FirstOrDefault();
if (Guid.TryParse(claim, out var parsed))
{
tenantId = parsed;
}
else if (Guid.TryParse(headerValue, out var headerTenant))
{
tenantId = headerTenant;
}
tenantProvider.SetTenantId(tenantId);
try
{
await _next(context);
}
finally
{
tenantProvider.SetTenantId(null);
}
}
}