Skip to content

Commit a9fedc7

Browse files
refactor(*): use application security entities
1 parent e7b9578 commit a9fedc7

File tree

109 files changed

+596
-562
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+596
-562
lines changed

src/starterProject/Application/Application.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
<ProjectReference Include="..\Domain\Domain.csproj" />
99
</ItemGroup>
1010
<ItemGroup>
11-
<PackageReference Include="AutoMapper" Version="12.0.1" />
12-
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
11+
<PackageReference Include="AutoMapper" Version="13.0.1" />
1312
<PackageReference Include="MediatR" Version="12.2.0" />
1413
<PackageReference Include="NArchitecture.Core.Application" Version="1.0.0" />
1514
<PackageReference Include="NArchitecture.Core.Mailing" Version="1.0.0" />
@@ -19,6 +18,7 @@
1918
<PackageReference Include="NArchitecture.Core.Localization.Abstraction" Version="1.0.0" />
2019
<PackageReference Include="NArchitecture.Core.Localization.Resource.Yaml.DependencyInjection" Version="1.0.0" />
2120
<PackageReference Include="NArchitecture.Core.ElasticSearch" Version="1.0.0" />
21+
<PackageReference Include="NArchitecture.Core.Security.DependencyInjection" Version="1.0.0" />
2222
</ItemGroup>
2323
<ItemGroup>
2424
<Folder Include="Services\" />

src/starterProject/Application/ApplicationServiceRegistration.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
using NArchitecture.Core.Localization.Resource.Yaml.DependencyInjection;
1919
using NArchitecture.Core.Mailing;
2020
using NArchitecture.Core.Mailing.MailKit;
21+
using NArchitecture.Core.Security.DependencyInjection;
2122

2223
namespace Application;
2324

@@ -56,6 +57,8 @@ ElasticSearchConfig elasticSearchConfig
5657

5758
services.AddYamlResourceLocalization();
5859

60+
services.AddSecurityServices<Guid, int>();
61+
5962
return services;
6063
}
6164

src/starterProject/Application/Features/Auth/Commands/EnableEmailAuthenticator/EnableEmailAuthenticatorCommand.cs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,18 @@
33
using Application.Services.AuthenticatorService;
44
using Application.Services.Repositories;
55
using Application.Services.UsersService;
6+
using Domain.Entities;
67
using MediatR;
78
using MimeKit;
89
using NArchitecture.Core.Application.Pipelines.Authorization;
910
using NArchitecture.Core.Mailing;
10-
using NArchitecture.Core.Security.Entities;
1111
using NArchitecture.Core.Security.Enums;
1212

1313
namespace Application.Features.Auth.Commands.EnableEmailAuthenticator;
1414

1515
public class EnableEmailAuthenticatorCommand : IRequest, ISecuredRequest
1616
{
17-
public int UserId { get; set; }
17+
public Guid UserId { get; set; }
1818
public string VerifyEmailUrlPrefix { get; set; }
1919

2020
public string[] Roles => [];
@@ -24,7 +24,7 @@ public EnableEmailAuthenticatorCommand()
2424
VerifyEmailUrlPrefix = string.Empty;
2525
}
2626

27-
public EnableEmailAuthenticatorCommand(int userId, string verifyEmailUrlPrefix)
27+
public EnableEmailAuthenticatorCommand(Guid userId, string verifyEmailUrlPrefix)
2828
{
2929
UserId = userId;
3030
VerifyEmailUrlPrefix = verifyEmailUrlPrefix;
@@ -55,18 +55,15 @@ IAuthenticatorService authenticatorService
5555

5656
public async Task Handle(EnableEmailAuthenticatorCommand request, CancellationToken cancellationToken)
5757
{
58-
User<int, int>? user = await _userService.GetAsync(
59-
predicate: u => u.Id == request.UserId,
60-
cancellationToken: cancellationToken
61-
);
58+
User? user = await _userService.GetAsync(predicate: u => u.Id == request.UserId, cancellationToken: cancellationToken);
6259
await _authBusinessRules.UserShouldBeExistsWhenSelected(user);
6360
await _authBusinessRules.UserShouldNotBeHaveAuthenticator(user!);
6461

6562
user!.AuthenticatorType = AuthenticatorType.Email;
6663
await _userService.UpdateAsync(user);
6764

68-
EmailAuthenticator<int, int> emailAuthenticator = await _authenticatorService.CreateEmailAuthenticator(user);
69-
EmailAuthenticator<int, int> addedEmailAuthenticator = await _emailAuthenticatorRepository.AddAsync(emailAuthenticator);
65+
EmailAuthenticator emailAuthenticator = await _authenticatorService.CreateEmailAuthenticator(user);
66+
EmailAuthenticator addedEmailAuthenticator = await _emailAuthenticatorRepository.AddAsync(emailAuthenticator);
7067

7168
var toEmailList = new List<MailboxAddress> { new(name: user.Email, user.Email) };
7269

src/starterProject/Application/Features/Auth/Commands/EnableOtpAuthenticator/EnableOtpAuthenticatorCommand.cs

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
using Application.Services.AuthenticatorService;
33
using Application.Services.Repositories;
44
using Application.Services.UsersService;
5+
using Domain.Entities;
56
using MediatR;
67
using NArchitecture.Core.Application.Pipelines.Authorization;
7-
using NArchitecture.Core.Security.Entities;
88

99
namespace Application.Features.Auth.Commands.EnableOtpAuthenticator;
1010

1111
public class EnableOtpAuthenticatorCommand : IRequest<EnabledOtpAuthenticatorResponse>, ISecuredRequest
1212
{
13-
public int UserId { get; set; }
13+
public Guid UserId { get; set; }
1414

1515
public string[] Roles => [];
1616

@@ -39,23 +39,20 @@ public async Task<EnabledOtpAuthenticatorResponse> Handle(
3939
CancellationToken cancellationToken
4040
)
4141
{
42-
User<int, int>? user = await _userService.GetAsync(
43-
predicate: u => u.Id == request.UserId,
44-
cancellationToken: cancellationToken
45-
);
42+
User? user = await _userService.GetAsync(predicate: u => u.Id == request.UserId, cancellationToken: cancellationToken);
4643
await _authBusinessRules.UserShouldBeExistsWhenSelected(user);
4744
await _authBusinessRules.UserShouldNotBeHaveAuthenticator(user!);
4845

49-
OtpAuthenticator<int, int>? doesExistOtpAuthenticator = await _otpAuthenticatorRepository.GetAsync(
46+
OtpAuthenticator? doesExistOtpAuthenticator = await _otpAuthenticatorRepository.GetAsync(
5047
predicate: o => o.UserId == request.UserId,
5148
cancellationToken: cancellationToken
5249
);
5350
await _authBusinessRules.OtpAuthenticatorThatVerifiedShouldNotBeExists(doesExistOtpAuthenticator);
5451
if (doesExistOtpAuthenticator is not null)
5552
await _otpAuthenticatorRepository.DeleteAsync(doesExistOtpAuthenticator);
5653

57-
OtpAuthenticator<int, int> newOtpAuthenticator = await _authenticatorService.CreateOtpAuthenticator(user!);
58-
OtpAuthenticator<int, int> addedOtpAuthenticator = await _otpAuthenticatorRepository.AddAsync(newOtpAuthenticator);
54+
OtpAuthenticator newOtpAuthenticator = await _authenticatorService.CreateOtpAuthenticator(user!);
55+
OtpAuthenticator addedOtpAuthenticator = await _otpAuthenticatorRepository.AddAsync(newOtpAuthenticator);
5956

6057
EnabledOtpAuthenticatorResponse enabledOtpAuthenticatorDto =
6158
new() { SecretKey = await _authenticatorService.ConvertSecretKeyToString(addedOtpAuthenticator.SecretKey) };

src/starterProject/Application/Features/Auth/Commands/Login/LoggedResponse.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ namespace Application.Features.Auth.Commands.Login;
77
public class LoggedResponse : IResponse
88
{
99
public AccessToken? AccessToken { get; set; }
10-
public NArchitecture.Core.Security.Entities.RefreshToken<int, int>? RefreshToken { get; set; }
10+
public Domain.Entities.RefreshToken? RefreshToken { get; set; }
1111
public AuthenticatorType? RequiredAuthenticatorType { get; set; }
1212

1313
public LoggedHttpResponse ToHttpResponse()

src/starterProject/Application/Features/Auth/Commands/Login/LoginCommand.cs

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
using Application.Services.AuthenticatorService;
33
using Application.Services.AuthService;
44
using Application.Services.UsersService;
5+
using Domain.Entities;
56
using MediatR;
67
using NArchitecture.Core.Application.Dtos;
7-
using NArchitecture.Core.Security.Entities;
88
using NArchitecture.Core.Security.Enums;
99
using NArchitecture.Core.Security.JWT;
1010

@@ -49,16 +49,16 @@ IAuthenticatorService authenticatorService
4949

5050
public async Task<LoggedResponse> Handle(LoginCommand request, CancellationToken cancellationToken)
5151
{
52-
User<int, int>? user = await _userService.GetAsync(
52+
User? user = await _userService.GetAsync(
5353
predicate: u => u.Email == request.UserForLoginDto.Email,
5454
cancellationToken: cancellationToken
5555
);
5656
await _authBusinessRules.UserShouldBeExistsWhenSelected(user);
57-
await _authBusinessRules.UserPasswordShouldBeMatch(user!.Id, request.UserForLoginDto.Password);
57+
await _authBusinessRules.UserPasswordShouldBeMatch(user!, request.UserForLoginDto.Password);
5858

5959
LoggedResponse loggedResponse = new();
6060

61-
if (user.AuthenticatorType is not AuthenticatorType.None)
61+
if (user!.AuthenticatorType is not AuthenticatorType.None)
6262
{
6363
if (request.UserForLoginDto.AuthenticatorCode is null)
6464
{
@@ -72,13 +72,8 @@ public async Task<LoggedResponse> Handle(LoginCommand request, CancellationToken
7272

7373
AccessToken createdAccessToken = await _authService.CreateAccessToken(user);
7474

75-
NArchitecture.Core.Security.Entities.RefreshToken<int, int> createdRefreshToken = await _authService.CreateRefreshToken(
76-
user,
77-
request.IpAddress
78-
);
79-
NArchitecture.Core.Security.Entities.RefreshToken<int, int> addedRefreshToken = await _authService.AddRefreshToken(
80-
createdRefreshToken
81-
);
75+
Domain.Entities.RefreshToken createdRefreshToken = await _authService.CreateRefreshToken(user, request.IpAddress);
76+
Domain.Entities.RefreshToken addedRefreshToken = await _authService.AddRefreshToken(createdRefreshToken);
8277
await _authService.DeleteOldRefreshTokens(user.Id);
8378

8479
loggedResponse.AccessToken = createdAccessToken;

src/starterProject/Application/Features/Auth/Commands/RefreshToken/RefreshTokenCommand.cs

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using Application.Features.Auth.Rules;
22
using Application.Services.AuthService;
33
using Application.Services.UsersService;
4+
using Domain.Entities;
45
using MediatR;
5-
using NArchitecture.Core.Security.Entities;
66
using NArchitecture.Core.Security.JWT;
77

88
namespace Application.Features.Auth.Commands.RefreshToken;
@@ -39,9 +39,7 @@ public RefreshTokenCommandHandler(IAuthService authService, IUserService userSer
3939

4040
public async Task<RefreshedTokensResponse> Handle(RefreshTokenCommand request, CancellationToken cancellationToken)
4141
{
42-
NArchitecture.Core.Security.Entities.RefreshToken<int, int>? refreshToken = await _authService.GetRefreshTokenByToken(
43-
request.RefreshToken
44-
);
42+
Domain.Entities.RefreshToken? refreshToken = await _authService.GetRefreshTokenByToken(request.RefreshToken);
4543
await _authBusinessRules.RefreshTokenShouldBeExists(refreshToken);
4644

4745
if (refreshToken!.RevokedDate != null)
@@ -52,20 +50,15 @@ await _authService.RevokeDescendantRefreshTokens(
5250
);
5351
await _authBusinessRules.RefreshTokenShouldBeActive(refreshToken);
5452

55-
User<int, int>? user = await _userService.GetAsync(
56-
predicate: u => u.Id == refreshToken.UserId,
57-
cancellationToken: cancellationToken
58-
);
53+
User? user = await _userService.GetAsync(predicate: u => u.Id == refreshToken.UserId, cancellationToken: cancellationToken);
5954
await _authBusinessRules.UserShouldBeExistsWhenSelected(user);
6055

61-
NArchitecture.Core.Security.Entities.RefreshToken<int, int> newRefreshToken = await _authService.RotateRefreshToken(
56+
Domain.Entities.RefreshToken newRefreshToken = await _authService.RotateRefreshToken(
6257
user: user!,
6358
refreshToken,
6459
request.IpAddress
6560
);
66-
NArchitecture.Core.Security.Entities.RefreshToken<int, int> addedRefreshToken = await _authService.AddRefreshToken(
67-
newRefreshToken
68-
);
61+
Domain.Entities.RefreshToken addedRefreshToken = await _authService.AddRefreshToken(newRefreshToken);
6962
await _authService.DeleteOldRefreshTokens(refreshToken.UserId);
7063

7164
AccessToken createdAccessToken = await _authService.CreateAccessToken(user!);

src/starterProject/Application/Features/Auth/Commands/RefreshToken/RefreshedTokensResponse.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ namespace Application.Features.Auth.Commands.RefreshToken;
66
public class RefreshedTokensResponse : IResponse
77
{
88
public AccessToken AccessToken { get; set; }
9-
public NArchitecture.Core.Security.Entities.RefreshToken<int, int> RefreshToken { get; set; }
9+
public Domain.Entities.RefreshToken RefreshToken { get; set; }
1010

1111
public RefreshedTokensResponse()
1212
{
1313
AccessToken = null!;
1414
RefreshToken = null!;
1515
}
1616

17-
public RefreshedTokensResponse(AccessToken accessToken, NArchitecture.Core.Security.Entities.RefreshToken<int, int> refreshToken)
17+
public RefreshedTokensResponse(AccessToken accessToken, Domain.Entities.RefreshToken refreshToken)
1818
{
1919
AccessToken = accessToken;
2020
RefreshToken = refreshToken;

src/starterProject/Application/Features/Auth/Commands/Register/RegisterCommand.cs

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
using Application.Features.Auth.Rules;
22
using Application.Services.AuthService;
33
using Application.Services.Repositories;
4+
using Domain.Entities;
45
using MediatR;
56
using NArchitecture.Core.Application.Dtos;
6-
using NArchitecture.Core.Security.Entities;
77
using NArchitecture.Core.Security.Hashing;
88
using NArchitecture.Core.Security.JWT;
99

@@ -48,24 +48,19 @@ public async Task<RegisteredResponse> Handle(RegisterCommand request, Cancellati
4848
passwordHash: out byte[] passwordHash,
4949
passwordSalt: out byte[] passwordSalt
5050
);
51-
User<int, int> newUser =
51+
User newUser =
5252
new()
5353
{
5454
Email = request.UserForRegisterDto.Email,
5555
PasswordHash = passwordHash,
5656
PasswordSalt = passwordSalt,
5757
};
58-
User<int, int> createdUser = await _userRepository.AddAsync(newUser);
58+
User createdUser = await _userRepository.AddAsync(newUser);
5959

6060
AccessToken createdAccessToken = await _authService.CreateAccessToken(createdUser);
6161

62-
NArchitecture.Core.Security.Entities.RefreshToken<int, int> createdRefreshToken = await _authService.CreateRefreshToken(
63-
createdUser,
64-
request.IpAddress
65-
);
66-
NArchitecture.Core.Security.Entities.RefreshToken<int, int> addedRefreshToken = await _authService.AddRefreshToken(
67-
createdRefreshToken
68-
);
62+
Domain.Entities.RefreshToken createdRefreshToken = await _authService.CreateRefreshToken(createdUser, request.IpAddress);
63+
Domain.Entities.RefreshToken addedRefreshToken = await _authService.AddRefreshToken(createdRefreshToken);
6964

7065
RegisteredResponse registeredResponse = new() { AccessToken = createdAccessToken, RefreshToken = addedRefreshToken };
7166
return registeredResponse;

src/starterProject/Application/Features/Auth/Commands/Register/RegisteredResponse.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@ namespace Application.Features.Auth.Commands.Register;
66
public class RegisteredResponse : IResponse
77
{
88
public AccessToken AccessToken { get; set; }
9-
public NArchitecture.Core.Security.Entities.RefreshToken<int, int> RefreshToken { get; set; }
9+
public Domain.Entities.RefreshToken RefreshToken { get; set; }
1010

1111
public RegisteredResponse()
1212
{
1313
AccessToken = null!;
1414
RefreshToken = null!;
1515
}
1616

17-
public RegisteredResponse(AccessToken accessToken, NArchitecture.Core.Security.Entities.RefreshToken<int, int> refreshToken)
17+
public RegisteredResponse(AccessToken accessToken, Domain.Entities.RefreshToken refreshToken)
1818
{
1919
AccessToken = accessToken;
2020
RefreshToken = refreshToken;

0 commit comments

Comments
 (0)