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)!
.ToString();
return await userService.GetUserForUsername(username);
}
}