Finished database management and user authentication

This commit is contained in:
2024-07-13 16:37:36 +02:00
parent fe5b5d28eb
commit c1ac7f9972
47 changed files with 1620 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
using System.Security.Claims;
namespace HopFrame.Security.Claims;
public static class HopFrameClaimTypes {
public const string AccessTokenId = "HopFrame.AccessTokenId";
public const string UserId = "HopFrame.UserId";
public const string Permission = "HopFrame.Permission";
public static string GetAccessTokenId(this ClaimsPrincipal principal) {
return principal.FindFirstValue(AccessTokenId);
}
public static string GetUserId(this ClaimsPrincipal principal) {
return principal.FindFirstValue(UserId);
}
public static string[] GetPermissions(this ClaimsPrincipal principal) {
return principal.FindAll(Permission).Select(claim => claim.Value).ToArray();
}
}

View File

@@ -0,0 +1,9 @@
using HopFrame.Database.Models;
namespace HopFrame.Security.Claims;
public interface ITokenContextBase {
bool IsAuthenticated { get; }
User User { get; }
Guid AccessToken { get; }
}

View File

@@ -0,0 +1,23 @@
using HopFrame.Database;
using HopFrame.Database.Models;
using Microsoft.AspNetCore.Http;
namespace HopFrame.Security.Claims;
public class TokenContextImplementor : ITokenContextBase {
private readonly IHttpContextAccessor _accessor;
private readonly HopDbContextBase _context;
public TokenContextImplementor(IHttpContextAccessor accessor, HopDbContextBase context) {
_accessor = accessor;
_context = context;
}
public bool IsAuthenticated => _accessor.HttpContext?.User.Identity?.IsAuthenticated == true;
public User User => _context.Users
.SingleOrDefault(user => user.Id == _accessor.HttpContext.User.GetUserId())?
.ToUserModel(_context);
public Guid AccessToken => Guid.Parse(_accessor.HttpContext?.User.GetAccessTokenId() ?? string.Empty);
}