diff --git a/Azaion.Api/Program.cs b/Azaion.Api/Program.cs index 7b883c3..de73f8c 100644 --- a/Azaion.Api/Program.cs +++ b/Azaion.Api/Program.cs @@ -186,7 +186,7 @@ app.MapPost("/resources/get/{dataFolder?}", //Need to have POST method for secur if (user == null) throw new UnauthorizedAccessException(); - var hwHash = await userService.CheckHardwareHash(user, request); + var hwHash = await userService.CheckHardwareHash(user, request.Hardware); var key = Security.GetApiEncryptionKey(user.Email, request.Password, hwHash); var stream = await resourcesService.GetEncryptedResource(dataFolder, request.FileName, key, ct); @@ -208,6 +208,16 @@ app.MapGet("/resources/get-installer/{dataFolder?}", }).RequireAuthorization() .WithOpenApi(op => new OpenApiOperation(op){ Summary = "Gets latest installer"}); +app.MapPost("/resources/check", + async (CheckResourceRequest request, IAuthService authService, IUserService userService) => + { + var user = await authService.GetCurrentUser(); + if (user == null) + throw new UnauthorizedAccessException(); + await userService.CheckHardwareHash(user, request.Hardware); + return true; + }); + app.UseExceptionHandler(_ => {}); app.Run(); diff --git a/Azaion.Common/Requests/GetResourceRequest.cs b/Azaion.Common/Requests/GetResourceRequest.cs index 4e434cd..621b627 100644 --- a/Azaion.Common/Requests/GetResourceRequest.cs +++ b/Azaion.Common/Requests/GetResourceRequest.cs @@ -2,6 +2,11 @@ using FluentValidation; namespace Azaion.Common.Requests; +public class CheckResourceRequest +{ + public string Hardware { get; set; } = null!; +} + public class GetResourceRequest { public string Password { get; set; } = null!; diff --git a/Azaion.Services/UserService.cs b/Azaion.Services/UserService.cs index d0ac339..b3b445b 100644 --- a/Azaion.Services/UserService.cs +++ b/Azaion.Services/UserService.cs @@ -16,7 +16,7 @@ public interface IUserService Task UpdateHardware(string email, string? hardware = null, CancellationToken ct = default); Task UpdateQueueOffsets(string email, UserQueueOffsets queueOffsets, CancellationToken ct = default); Task> GetUsers(string? searchEmail, RoleEnum? searchRole, CancellationToken ct = default); - Task CheckHardwareHash(User user, GetResourceRequest request, CancellationToken ct = default); + Task CheckHardwareHash(User user, string hardware, CancellationToken ct = default); } public class UserService(IDbFactory dbFactory, ICache cache) : IUserService @@ -99,14 +99,14 @@ public class UserService(IDbFactory dbFactory, ICache cache) : IUserService u => u.Role == searchRole) .ToListAsync(token: ct)); - public async Task CheckHardwareHash(User user, GetResourceRequest request, CancellationToken ct = default) + public async Task CheckHardwareHash(User user, string hardware, CancellationToken ct = default) { - var requestHWHash = Security.GetHWHash(request.Hardware); + var requestHWHash = Security.GetHWHash(hardware); //For the new users Hardware would be empty, fill it with actual hardware on the very first request if (string.IsNullOrEmpty(user.Hardware)) { - await UpdateHardware(user.Email, request.Hardware, ct); + await UpdateHardware(user.Email, hardware, ct); cache.Invalidate(User.GetCacheKey(user.Email)); return requestHWHash; }