From 39c720607f61e59c89bf531c426a43313b774905 Mon Sep 17 00:00:00 2001 From: Alexander Konietzko Date: Sat, 1 Jul 2023 20:54:51 +0200 Subject: [PATCH] Seal classes --- .../Controllers/UserController.cs | 2 +- CleanArchitecture.Domain/ApiUser.cs | 2 +- .../Users/LoginUser/LoginUserCommandHandler.cs | 15 +++++++-------- .../Extensions/Validation/CustomValidator.cs | 7 +++++-- .../EventSourcing/EventStore.cs | 2 +- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/CleanArchitecture.Api/Controllers/UserController.cs b/CleanArchitecture.Api/Controllers/UserController.cs index d3986dd..b6f7904 100644 --- a/CleanArchitecture.Api/Controllers/UserController.cs +++ b/CleanArchitecture.Api/Controllers/UserController.cs @@ -14,7 +14,7 @@ namespace CleanArchitecture.Api.Controllers; [ApiController] [Route("/api/v1/[controller]")] -public class UserController : ApiController +public sealed class UserController : ApiController { private readonly IUserService _userService; diff --git a/CleanArchitecture.Domain/ApiUser.cs b/CleanArchitecture.Domain/ApiUser.cs index b6ac828..c8b81fa 100644 --- a/CleanArchitecture.Domain/ApiUser.cs +++ b/CleanArchitecture.Domain/ApiUser.cs @@ -71,7 +71,7 @@ public sealed class ApiUser : IUser return identity.Name; } var claim = _httpContextAccessor.HttpContext!.User.Claims - .FirstOrDefault(c => string.Equals(c.Type, "name", StringComparison.OrdinalIgnoreCase))? + .FirstOrDefault(c => string.Equals(c.Type, ClaimTypes.Name, StringComparison.OrdinalIgnoreCase))? .Value; _name = claim ?? string.Empty; return _name; diff --git a/CleanArchitecture.Domain/Commands/Users/LoginUser/LoginUserCommandHandler.cs b/CleanArchitecture.Domain/Commands/Users/LoginUser/LoginUserCommandHandler.cs index 8f74849..dee2b53 100644 --- a/CleanArchitecture.Domain/Commands/Users/LoginUser/LoginUserCommandHandler.cs +++ b/CleanArchitecture.Domain/Commands/Users/LoginUser/LoginUserCommandHandler.cs @@ -4,7 +4,7 @@ using System.Security.Claims; using System.Text; using System.Threading; using System.Threading.Tasks; -using CleanArchitecture.Domain.Enums; +using CleanArchitecture.Domain.Entities; using CleanArchitecture.Domain.Errors; using CleanArchitecture.Domain.Interfaces; using CleanArchitecture.Domain.Interfaces.Repositories; @@ -70,19 +70,18 @@ public sealed class LoginUserCommandHandler : CommandHandlerBase, } return BuildToken( - user.Email, - user.Role, - user.Id, + user, _tokenSettings); } - private static string BuildToken(string email, UserRole role, Guid id, TokenSettings tokenSettings) + private static string BuildToken(User user, TokenSettings tokenSettings) { var claims = new[] { - new Claim(ClaimTypes.Email, email), - new Claim(ClaimTypes.Role, role.ToString()), - new Claim(ClaimTypes.NameIdentifier, id.ToString()) + new Claim(ClaimTypes.Email, user.Email), + new Claim(ClaimTypes.Role, user.Role.ToString()), + new Claim(ClaimTypes.NameIdentifier, user.Id.ToString()), + new Claim(ClaimTypes.Name, user.FullName) }; var securityKey = new SymmetricSecurityKey( diff --git a/CleanArchitecture.Domain/Extensions/Validation/CustomValidator.cs b/CleanArchitecture.Domain/Extensions/Validation/CustomValidator.cs index c94ff0d..5157f16 100644 --- a/CleanArchitecture.Domain/Extensions/Validation/CustomValidator.cs +++ b/CleanArchitecture.Domain/Extensions/Validation/CustomValidator.cs @@ -4,7 +4,7 @@ using FluentValidation; namespace CleanArchitecture.Domain.Extensions.Validation; -public static class CustomValidator +public static partial class CustomValidator { public static IRuleBuilderOptions StringMustBeBase64(this IRuleBuilder ruleBuilder) { @@ -14,7 +14,7 @@ public static class CustomValidator private static bool IsBase64String(string base64) { base64 = base64.Trim(); - return base64.Length % 4 == 0 && Regex.IsMatch(base64, @"^[a-zA-Z0-9\+/]*={0,3}$", RegexOptions.None); + return base64.Length % 4 == 0 && Base64Regex().IsMatch(base64); } public static IRuleBuilder Password( @@ -32,4 +32,7 @@ public static class CustomValidator .Matches("[^a-zA-Z0-9]").WithErrorCode(DomainErrorCodes.UserSpecialCharPassword); return options; } + + [GeneratedRegex("^[a-zA-Z0-9\\+/]*={0,3}$", RegexOptions.None)] + private static partial Regex Base64Regex(); } \ No newline at end of file diff --git a/CleanArchitecture.Infrastructure/EventSourcing/EventStore.cs b/CleanArchitecture.Infrastructure/EventSourcing/EventStore.cs index f0e6617..9231524 100644 --- a/CleanArchitecture.Infrastructure/EventSourcing/EventStore.cs +++ b/CleanArchitecture.Infrastructure/EventSourcing/EventStore.cs @@ -7,7 +7,7 @@ using Newtonsoft.Json; namespace CleanArchitecture.Infrastructure.EventSourcing; -public class DomainEventStore : IDomainEventStore +public sealed class DomainEventStore : IDomainEventStore { private readonly EventStoreDbContext _eventStoreDbContext; private readonly DomainNotificationStoreDbContext _domainNotificationStoreDbContext;