Mizuki/Services/LoginService.cs
2025-01-12 20:17:43 +01:00

57 lines
No EOL
1.5 KiB
C#

using System.Security.Claims;
using Microsoft.AspNetCore.Authentication;
using Mizuki.Database.Models;
namespace Mizuki.Services;
/// <summary>
/// The login service for Mizuki.
/// </summary>
public class LoginService(
IHttpContextAccessor httpContextAccessor,
UserService userService)
{
/// <summary>
/// Logs in as a given user.
/// </summary>
/// <param name="user">The user.</param>
public async Task LoginAsUser(
User user)
{
var claims = new List<Claim>
{
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());
}
/// <summary>
/// Logs out.
/// </summary>
public async Task Logout()
{
await httpContextAccessor.HttpContext!
.SignOutAsync("MizukiAuth");
}
/// <summary>
/// Gets the active user.
/// </summary>
/// <returns>The active user.</returns>
public async Task<User> GetActiveUser()
{
var username = httpContextAccessor.HttpContext!
.User
.FindFirst(ClaimTypes.Name)!
.ToString();
return await userService.GetUserForUsername(username);
}
}