switch to hardware string from object

This commit is contained in:
Alex Bezdieniezhnykh
2025-05-02 10:14:40 +03:00
parent 2b6a8d1252
commit eb043e94a8
5 changed files with 16 additions and 27 deletions
+2 -2
View File
@@ -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.")]
-9
View File
@@ -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!;
}
+1 -2
View File
@@ -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!;
}
+2 -2
View File
@@ -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();
+11 -12
View File
@@ -13,7 +13,7 @@ public interface IUserService
Task RegisterUser(RegisterUserRequest request, CancellationToken cancellationToken = default);
Task<User> ValidateUser(LoginRequest request, CancellationToken cancellationToken = default);
Task<User?> 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<IEnumerable<User>> GetUsers(string? searchEmail, RoleEnum? searchRole, CancellationToken cancellationToken);
Task<string> CheckHardwareHash(User user, GetResourceRequest request);
@@ -39,10 +39,15 @@ public class UserService(IDbFactory dbFactory, ICache cache) : IUserService
});
}
public async Task<User?> GetByEmail(string? email, CancellationToken cancellationToken = default) =>
await cache.GetFromCacheAsync(User.GetCacheKey(email),
public async Task<User?> 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<User> 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<HardwareInfo>(user.Hardware);
var userHWHash = Security.GetHWHash(userHW!);
var userHWHash = Security.GetHWHash(user.Hardware);
if (userHWHash != requestHWHash)
throw new BusinessException(ExceptionEnum.HardwareIdMismatch);
return userHWHash;