Files
.github
.idx
DysonNetwork.Sphere
Account
Activity
Auth
Auth.cs
AuthController.cs
AuthService.cs
CheckpointModel.cs
Session.cs
UserInfoMiddleware.cs
Chat
Connection
Developer
Localization
Migrations
Pages
Permission
Post
Properties
Publisher
Realm
Resources
Sticker
Storage
Wallet
wwwroot
.DS_Store
.gitignore
AppDatabase.cs
Dockerfile
DysonNetwork.Sphere.csproj
DysonNetwork.Sphere.csproj.DotSettings.user
DysonNetwork.Sphere.http
Program.cs
appsettings.json
package.json
postcss.config.js
tailwind.config.js
.dockerignore
.gitignore
DysonNetwork.sln
DysonNetwork.sln.DotSettings.user
compose.yaml
Swarm/DysonNetwork.Sphere/Auth/UserInfoMiddleware.cs

37 lines
1.2 KiB
C#

using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Caching.Memory;
namespace DysonNetwork.Sphere.Auth;
public class UserInfoMiddleware(RequestDelegate next, IMemoryCache cache)
{
public async Task InvokeAsync(HttpContext context, AppDatabase db)
{
var sessionIdClaim = context.User.FindFirst("session_id")?.Value;
if (sessionIdClaim is not null && Guid.TryParse(sessionIdClaim, out var sessionId))
{
if (!cache.TryGetValue($"Auth_{sessionId}", out Session? session))
{
session = await db.AuthSessions
.Include(e => e.Challenge)
.Include(e => e.Account)
.Include(e => e.Account.Profile)
.Where(e => e.Id == sessionId)
.FirstOrDefaultAsync();
if (session is not null)
{
cache.Set($"Auth_{sessionId}", session, TimeSpan.FromHours(1));
}
}
if (session is not null)
{
context.Items["CurrentUser"] = session.Account;
context.Items["CurrentSession"] = session;
}
}
await next(context);
}
}