using System.Security.Claims; using ImageBoardServerApp.Data; using Microsoft.AspNetCore.Components.Authorization; using Microsoft.AspNetCore.Components.Server.ProtectedBrowserStorage; namespace ImageBoardServerApp.Auth; public class CustomAuthenticationStateProvider : AuthenticationStateProvider { private readonly ProtectedLocalStorage _sessionStorage; private ClaimsPrincipal _anonymous = new ClaimsPrincipal(new ClaimsIdentity()); public CustomAuthenticationStateProvider(ProtectedLocalStorage sessionStorage) { _sessionStorage = sessionStorage; } public override async Task GetAuthenticationStateAsync() { try { var userSessionStorageResult = await _sessionStorage.GetAsync("UserSession"); var userSession = userSessionStorageResult.Success ? userSessionStorageResult.Value : null; if (userSession == null) return await Task.FromResult(new AuthenticationState(_anonymous)); var claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity(new List { //new Claim(ClaimTypes.Email, userSession.Email), new Claim(ClaimTypes.Name, userSession.UserID.ToString()), new Claim(ClaimTypes.Role, userSession.Role) }, "CustomAuth")); return await Task.FromResult(new AuthenticationState(claimsPrincipal)); } catch { return await Task.FromResult(new AuthenticationState(_anonymous)); } } public async Task UpdateAuthenticationStateAsync(UserData session) { ClaimsPrincipal claimsPrincipal; if (session != null) { await _sessionStorage.SetAsync("UserSession", session); claimsPrincipal = new ClaimsPrincipal(new ClaimsIdentity(new List { new Claim(ClaimTypes.Email, session.UserID.ToString()), new Claim(ClaimTypes.Email, session.Role) })); } else { await _sessionStorage.DeleteAsync("UserSession"); claimsPrincipal = _anonymous; } NotifyAuthenticationStateChanged(Task.FromResult(new AuthenticationState(claimsPrincipal))); } }