using HopFrame.Core.Services; using Microsoft.EntityFrameworkCore; namespace SpotiParty.Web.Services; public class DashboardAuthHandler(ClientSideStorage storage, IDbContextFactory contextFactory) : IHopFrameAuthHandler { public const string AdminPolicy = "ADMIN"; public async Task IsAuthenticatedAsync(string? policy) { var token = storage.GetUserToken(); if (string.IsNullOrWhiteSpace(token)) return false; await using var context = await contextFactory.CreateDbContextAsync(); var user = await context.Users.AsNoTracking().FirstOrDefaultAsync(u => u.RefreshToken == token); if (user is null) return false; if (policy == AdminPolicy) { return user.IsAdmin; } return true; } public async Task GetCurrentUserDisplayNameAsync() { var token = storage.GetUserToken(); if (string.IsNullOrWhiteSpace(token)) return string.Empty; await using var context = await contextFactory.CreateDbContextAsync(); var user = await context.Users.AsNoTracking().FirstOrDefaultAsync(u => u.RefreshToken == token); if (user is null) return string.Empty; return user.DisplayName; } }