using System.Security.Claims; using Microsoft.AspNetCore.Authentication; using Mizuki.Database.Models; namespace Mizuki.Services; /// /// The login service for Mizuki. /// public class LoginService( IHttpContextAccessor httpContextAccessor, UserService userService) { /// /// Logs in as a given user. /// /// The user. public async Task LoginAsUser( User user) { var claims = new List { new(ClaimTypes.NameIdentifier, user.Id.ToString()), new(ClaimTypes.Name, user.Username) }; var claimsIdentity = new ClaimsIdentity(claims, "MizukiAuth"); await httpContextAccessor.HttpContext! .SignInAsync( "MizukiAuth", new ClaimsPrincipal(claimsIdentity), new AuthenticationProperties()); } /// /// Logs out. /// public async Task Logout() { await httpContextAccessor.HttpContext! .SignOutAsync("MizukiAuth"); } /// /// Gets the active user. /// /// The active user. public async Task GetActiveUser() { var username = httpContextAccessor.HttpContext! .User .FindFirst(ClaimTypes.Name)! .Value; return await userService.GetUserForUsername(username); } }