diff options
| author | ivarlovlie <git@ivarlovlie.no> | 2022-06-01 22:10:32 +0200 |
|---|---|---|
| committer | ivarlovlie <git@ivarlovlie.no> | 2022-06-01 22:10:32 +0200 |
| commit | a640703f2da8815dc26ad1600a6f206be1624379 (patch) | |
| tree | dbda195fb5783d16487e557e06471cf848b75427 /server/src/Services/UserService.cs | |
| download | greatoffice-a640703f2da8815dc26ad1600a6f206be1624379.tar.xz greatoffice-a640703f2da8815dc26ad1600a6f206be1624379.zip | |
feat: Initial after clean slate
Diffstat (limited to 'server/src/Services/UserService.cs')
| -rw-r--r-- | server/src/Services/UserService.cs | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/server/src/Services/UserService.cs b/server/src/Services/UserService.cs new file mode 100644 index 0000000..9b531de --- /dev/null +++ b/server/src/Services/UserService.cs @@ -0,0 +1,50 @@ +namespace IOL.GreatOffice.Api.Services; + +public class UserService +{ + private readonly ForgotPasswordService _forgotPasswordService; + + /// <summary> + /// Provides methods to perform common operations on user data. + /// </summary> + /// <param name="forgotPasswordService"></param> + public UserService(ForgotPasswordService forgotPasswordService) { + _forgotPasswordService = forgotPasswordService; + } + + /// <summary> + /// Log in a user. + /// </summary> + /// <param name="httpContext"></param> + /// <param name="user"></param> + /// <param name="persist"></param> + public async Task LogInUser(HttpContext httpContext, User user, bool persist = false) { + var claims = new List<Claim> { + new(AppClaims.USER_ID, user.Id.ToString()), + new(AppClaims.NAME, user.Username), + }; + + var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); + var principal = new ClaimsPrincipal(identity); + var authenticationProperties = new AuthenticationProperties { + AllowRefresh = true, + IssuedUtc = DateTimeOffset.UtcNow, + }; + + if (persist) { + authenticationProperties.ExpiresUtc = DateTimeOffset.UtcNow.AddMonths(6); + authenticationProperties.IsPersistent = true; + } + + await httpContext.SignInAsync(principal, authenticationProperties); + await _forgotPasswordService.DeleteRequestsForUserAsync(user.Id); + } + + /// <summary> + /// Log out a user. + /// </summary> + /// <param name="httpContext"></param> + public async Task LogOutUser(HttpContext httpContext) { + await httpContext.SignOutAsync(); + } +} |
