public class ApiKeyMiddleware()

in src/Saas.Identity/Saas.Permissions/Saas.Permissions.Service_v1.1/Middleware/ApiKeyMiddleware.cs [7:35]


public class ApiKeyMiddleware(IOptions<PermissionsApiOptions> permissionOptions, RequestDelegate next)
{    
    private readonly RequestDelegate _next = next;
    private const string API_KEY = "x-api-key";
    private readonly PermissionsApiOptions _permissionOptions = permissionOptions.Value;

    public async Task InvokeAsync(HttpContext context) {

        if (!context.Request.Headers.TryGetValue(API_KEY, out var extractedApiKey)) {
            context.Response.StatusCode = 401;
            await context.Response.WriteAsJsonAsync(new UnauthorizedResponse($"API Key must be provided on the {API_KEY} header"));
            return;
        }
        
        var appSettings = context.RequestServices.GetRequiredService<IConfiguration>();
        
        var apiKey = _permissionOptions.ApiKey
                ?? throw new NullReferenceException("API Key cannot be null.");

        if (!apiKey.Equals(extractedApiKey, StringComparison.Ordinal))
        {
            context.Response.StatusCode = 401;
            await context.Response.WriteAsJsonAsync(new UnauthorizedResponse("API Key provided was invalid."));
            return;
        }
        
        await _next(context);
    }
}