diff --git a/Azaion.Common/BusinessException.cs b/Azaion.Common/BusinessException.cs index a149aa1..5ec5268 100644 --- a/Azaion.Common/BusinessException.cs +++ b/Azaion.Common/BusinessException.cs @@ -35,10 +35,10 @@ public enum ExceptionEnum WrongEmail = 37, - [Description("HardwareInfo mismatch! You are not authorized to access this resource from this hardware.")] + [Description("Hardware mismatch! You are not authorized to access this resource from this hardware.")] HardwareIdMismatch = 40, - [Description("HardwareInfo should contain information about this hardware.")] + [Description("Hardware should be not empty.")] BadHardware = 45, [Description("Wrong resource file name.")] diff --git a/Azaion.Common/Entities/HardwareInfo.cs b/Azaion.Common/Entities/HardwareInfo.cs deleted file mode 100644 index c135e20..0000000 --- a/Azaion.Common/Entities/HardwareInfo.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Azaion.Common.Entities; - -public class HardwareInfo -{ - public string CPU { get; set; } = null!; - public string GPU { get; set; } = null!; - public string MacAddress { get; set; } = null!; - public string Memory { get; set; } = null!; -} \ No newline at end of file diff --git a/Azaion.Common/Requests/GetResourceRequest.cs b/Azaion.Common/Requests/GetResourceRequest.cs index a2cf14e..4e434cd 100644 --- a/Azaion.Common/Requests/GetResourceRequest.cs +++ b/Azaion.Common/Requests/GetResourceRequest.cs @@ -1,4 +1,3 @@ -using Azaion.Common.Entities; using FluentValidation; namespace Azaion.Common.Requests; @@ -6,7 +5,7 @@ namespace Azaion.Common.Requests; public class GetResourceRequest { public string Password { get; set; } = null!; - public HardwareInfo Hardware { get; set; } = null!; + public string Hardware { get; set; } = null!; public string FileName { get; set; } = null!; } diff --git a/Azaion.Services/Security.cs b/Azaion.Services/Security.cs index 294682d..033f89d 100644 --- a/Azaion.Services/Security.cs +++ b/Azaion.Services/Security.cs @@ -11,8 +11,8 @@ public static class Security public static string ToHash(this string str) => Convert.ToBase64String(SHA384.HashData(Encoding.UTF8.GetBytes(str))); - public static string GetHWHash(HardwareInfo hardware) => - $"Azaion_{hardware.MacAddress}_{hardware.CPU}_{hardware.GPU}".ToHash(); + public static string GetHWHash(string hardware) => + $"Azaion_{hardware}_%$$$)0_".ToHash(); public static string GetApiEncryptionKey(string email, string password, string? hardwareHash) => $"{email}-{password}-{hardwareHash}-#%@AzaionKey@%#---".ToHash(); diff --git a/Azaion.Services/UserService.cs b/Azaion.Services/UserService.cs index 0e16c20..950cc1d 100644 --- a/Azaion.Services/UserService.cs +++ b/Azaion.Services/UserService.cs @@ -13,7 +13,7 @@ public interface IUserService Task RegisterUser(RegisterUserRequest request, CancellationToken cancellationToken = default); Task ValidateUser(LoginRequest request, CancellationToken cancellationToken = default); Task GetByEmail(string? email, CancellationToken cancellationToken = default); - Task UpdateHardware(string email, HardwareInfo? hardwareInfo = null, CancellationToken cancellationToken = default); + Task UpdateHardware(string email, string? hardware = null, CancellationToken cancellationToken = default); Task UpdateQueueOffsets(string email, UserQueueOffsets queueOffsets, CancellationToken cancellationToken = default); Task> GetUsers(string? searchEmail, RoleEnum? searchRole, CancellationToken cancellationToken); Task CheckHardwareHash(User user, GetResourceRequest request); @@ -39,10 +39,15 @@ public class UserService(IDbFactory dbFactory, ICache cache) : IUserService }); } - public async Task GetByEmail(string? email, CancellationToken cancellationToken = default) => - await cache.GetFromCacheAsync(User.GetCacheKey(email), + public async Task GetByEmail(string? email, CancellationToken cancellationToken = default) + { + if (string.IsNullOrWhiteSpace(email)) throw new ArgumentNullException(nameof(email)); + + return await cache.GetFromCacheAsync(User.GetCacheKey(email), async () => await dbFactory.Run(async db => await db.Users.FirstOrDefaultAsync(x => x.Email == email, cancellationToken))); + } + public async Task ValidateUser(LoginRequest request, CancellationToken cancellationToken = default) => await dbFactory.Run(async db => @@ -58,17 +63,12 @@ public class UserService(IDbFactory dbFactory, ICache cache) : IUserService }); - public async Task UpdateHardware(string email, HardwareInfo? hardware = null, CancellationToken cancellationToken = default) + public async Task UpdateHardware(string email, string? hardware = null, CancellationToken cancellationToken = default) { await dbFactory.RunAdmin(async db => { - var hardwareStr = hardware == null ? "" : JsonConvert.SerializeObject(hardware); - await db.Users.UpdateAsync(x => x.Email == email, - u => new User - { - Hardware = hardwareStr - }, token: cancellationToken); + u => new User { Hardware = hardware }, token: cancellationToken); }); cache.Invalidate(User.GetCacheKey(email)); } @@ -111,8 +111,7 @@ public class UserService(IDbFactory dbFactory, ICache cache) : IUserService return requestHWHash; } - var userHW = JsonConvert.DeserializeObject(user.Hardware); - var userHWHash = Security.GetHWHash(userHW!); + var userHWHash = Security.GetHWHash(user.Hardware); if (userHWHash != requestHWHash) throw new BusinessException(ExceptionEnum.HardwareIdMismatch); return userHWHash;