mirror of
https://github.com/azaion/admin.git
synced 2026-04-22 08:56:33 +00:00
add Cache.cs
fix hardware hash stack in the jwt token claims
This commit is contained in:
@@ -12,12 +12,14 @@ public interface IUserService
|
||||
{
|
||||
Task RegisterUser(RegisterUserRequest request, CancellationToken cancellationToken = default);
|
||||
Task<User> ValidateUser(LoginRequest request, CancellationToken cancellationToken = default);
|
||||
Task<User?> GetById(Guid? id, CancellationToken cancellationToken = default);
|
||||
Task<User?> GetByEmail(string email, CancellationToken cancellationToken = default);
|
||||
Task UpdateHardware(string email, HardwareInfo hardwareInfo, CancellationToken cancellationToken = default);
|
||||
Task<IEnumerable<User>> GetUsers(string? searchEmail, RoleEnum? searchRole, CancellationToken cancellationToken);
|
||||
Task CheckHardware(User user, GetResourceRequest request);
|
||||
}
|
||||
|
||||
public class UserService(IDbFactory dbFactory) : IUserService
|
||||
public class UserService(IDbFactory dbFactory, ICache cache) : IUserService
|
||||
{
|
||||
public async Task RegisterUser(RegisterUserRequest request, CancellationToken cancellationToken = default)
|
||||
{
|
||||
@@ -37,6 +39,15 @@ public class UserService(IDbFactory dbFactory) : IUserService
|
||||
});
|
||||
}
|
||||
|
||||
public async Task<User?> GetById(Guid? id, CancellationToken cancellationToken = default) =>
|
||||
await cache.GetFromCacheAsync($"{nameof(User)}.{id}",
|
||||
async () => await dbFactory.Run(async db =>
|
||||
await db.Users.FirstOrDefaultAsync(x => x.Id == id, cancellationToken)), TimeSpan.FromHours(2));
|
||||
|
||||
public async Task<User?> GetByEmail(string email, CancellationToken cancellationToken = default) =>
|
||||
await dbFactory.Run(async db =>
|
||||
await db.Users.FirstOrDefaultAsync(x => x.Email == email, cancellationToken));
|
||||
|
||||
public async Task<User> ValidateUser(LoginRequest request, CancellationToken cancellationToken = default) =>
|
||||
await dbFactory.Run(async db =>
|
||||
{
|
||||
@@ -82,6 +93,14 @@ public class UserService(IDbFactory dbFactory) : IUserService
|
||||
user.HardwareHash = request.Hardware.Hash;
|
||||
}
|
||||
|
||||
var hwHash = await dbFactory.Run(async db =>
|
||||
await db.Users
|
||||
.Where(x => x.Email == user.Email)
|
||||
.Select(x => x.HardwareHash)
|
||||
.FirstOrDefaultAsync());
|
||||
if (hwHash != user.HardwareHash)
|
||||
user.HardwareHash = hwHash;
|
||||
|
||||
if (user.HardwareHash != request.Hardware.Hash)
|
||||
throw new BusinessException(ExceptionEnum.HardwareIdMismatch);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user