From 82ade3c31fb17b662feec59e9e654ceb66edbb7a Mon Sep 17 00:00:00 2001 From: ivarlovlie Date: Wed, 21 Dec 2022 23:37:23 +0100 Subject: feat: Add initial schema and start login --- code/api/Services/Admin/UserService.cs | 53 ++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 code/api/Services/Admin/UserService.cs (limited to 'code/api/Services/Admin/UserService.cs') diff --git a/code/api/Services/Admin/UserService.cs b/code/api/Services/Admin/UserService.cs new file mode 100644 index 0000000..94a64ef --- /dev/null +++ b/code/api/Services/Admin/UserService.cs @@ -0,0 +1,53 @@ +using System.Security.Claims; +using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Authentication.Cookies; + +namespace I2R.Storage.Api.Services.Admin; + +public class UserService +{ + private readonly AppDatabase _database; + private readonly ILogger _logger; + + public UserService(AppDatabase database, ILogger logger) { + _database = database; + _logger = logger; + } + + public bool CanCreateAccount(string username) { + if (username.IsNullOrWhiteSpace()) { + return false; + } + + var normalisedUsername = username.Trim(); + return _database.Users.All(c => c.Username != normalisedUsername); + } + + public async Task LogInUserAsync(HttpContext httpContext, IEnumerable claims) { + var identity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme); + var principal = new ClaimsPrincipal(identity); + var authenticationProperties = new AuthenticationProperties { + AllowRefresh = true, + IssuedUtc = DateTimeOffset.UtcNow, + }; + + await httpContext.SignInAsync(principal, authenticationProperties); + _logger.LogInformation("Logged in user {userId}", principal.FindFirstValue(AppClaims.USER_ID)); + } + + public async Task LogOutUserAsync(HttpContext httpContext, CancellationToken cancellationToken = default) { + await httpContext.SignOutAsync(); + _logger.LogInformation("Logged out user {userId}", httpContext.User.FindFirstValue(AppClaims.USER_ID)); + } + + public async Task MarkUserAsDeleted(Guid userId, Guid actorId) { + var user = _database.Users.FirstOrDefault(c => c.Id == userId); + if (user == default) { + _logger.LogInformation("Tried to delete unknown user {userId}", userId); + return; + } + + user.SetDeleted(actorId); + await _database.SaveChangesAsync(); + } +} \ No newline at end of file -- cgit v1.3