summary refs log tree commit diff
path: root/extra/admin-api/Spacebar.AdminAPI/Middleware/AuthenticationMiddleware.cs
diff options
context:
space:
mode:
authorEmma [it/its]@Rory& <root@rory.gay>2025-04-08 18:55:55 +0200
committerEmma [it/its]@Rory& <root@rory.gay>2025-10-05 21:34:40 +0200
commitabb1b570a4343d5e4fde34f55c1a2bf403f62981 (patch)
tree1986363f5bf369a03ee1f18ed3170da73d859c38 /extra/admin-api/Spacebar.AdminAPI/Middleware/AuthenticationMiddleware.cs
parentRewrite access tokens, initial admin api (diff)
downloadserver-ts-abb1b570a4343d5e4fde34f55c1a2bf403f62981.tar.xz
Local changes
Diffstat (limited to 'extra/admin-api/Spacebar.AdminAPI/Middleware/AuthenticationMiddleware.cs')
-rw-r--r--extra/admin-api/Spacebar.AdminAPI/Middleware/AuthenticationMiddleware.cs41
1 files changed, 33 insertions, 8 deletions
diff --git a/extra/admin-api/Spacebar.AdminAPI/Middleware/AuthenticationMiddleware.cs b/extra/admin-api/Spacebar.AdminAPI/Middleware/AuthenticationMiddleware.cs

index 400928e51..c87d568fe 100644 --- a/extra/admin-api/Spacebar.AdminAPI/Middleware/AuthenticationMiddleware.cs +++ b/extra/admin-api/Spacebar.AdminAPI/Middleware/AuthenticationMiddleware.cs
@@ -1,22 +1,22 @@ -using System.Buffers.Text; using System.IdentityModel.Tokens.Jwt; using System.Security.Cryptography; -using System.Text; using ArcaneLibs.Extensions; -using Microsoft.EntityFrameworkCore.Internal; using Microsoft.IdentityModel.Tokens; -using Spacebar.AdminAPI.Extensions; using Spacebar.Db.Contexts; +using Spacebar.Db.Models; namespace Spacebar.AdminAPI.Middleware; public class AuthenticationMiddleware(RequestDelegate next) { - public async Task Invoke(HttpContext context) { - if(Environment.GetEnvironmentVariable("SB_ADMIN_API_DISABLE_AUTH") == "true") { + private static Dictionary<string, User> _userCache = new(); + private static Dictionary<string, DateTime> _userCacheExpiry = new(); + + public async Task InvokeAsync(HttpContext context, IServiceProvider sp) { + if (context.Request.Path.StartsWithSegments("/ping")) { await next(context); return; } - + if (!context.Request.Headers.ContainsKey("Authorization")) { context.Response.StatusCode = 401; await context.Response.WriteAsync("Authorization header is missing"); @@ -46,8 +46,33 @@ public class AuthenticationMiddleware(RequestDelegate next) { return; } - Console.WriteLine(res.ClaimsIdentity.Claims.Select(x => $"{x.Type} : {x.Value}").ToJson()); + User user; + if (_userCacheExpiry.ContainsKey(token) && _userCacheExpiry[token] < DateTime.Now) { + _userCache.Remove(token); + _userCacheExpiry.Remove(token); + } + + if (!_userCache.ContainsKey(token)) { + var db = sp.GetRequiredService<SpacebarDbContext>(); + user = await db.Users.FindAsync(res.ClaimsIdentity.Claims.First(x => x.Type == "id").Value) + ?? throw new InvalidOperationException(); + _userCache[token] = user; + _userCacheExpiry[token] = DateTime.Now.AddMinutes(5); + } + user = _userCache[token]; + if (user.Disabled) { + context.Response.StatusCode = 403; + await context.Response.WriteAsync("User is disabled"); + return; + } + + if (user.Deleted) { + context.Response.StatusCode = 403; + await context.Response.WriteAsync("User is deleted"); + return; + } + await next(context); } } \ No newline at end of file