42 lines
985 B
C#
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);
|
|
}
|
|
}
|
|
}
|