add check resource endpoint

This commit is contained in:
Alex Bezdieniezhnykh
2025-06-15 09:18:39 +03:00
parent 3be7062993
commit 1fcaba383e
3 changed files with 20 additions and 5 deletions
+11 -1
View File
@@ -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();
@@ -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!;
+4 -4
View File
@@ -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<IEnumerable<User>> GetUsers(string? searchEmail, RoleEnum? searchRole, CancellationToken ct = default);
Task<string> CheckHardwareHash(User user, GetResourceRequest request, CancellationToken ct = default);
Task<string> 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<string> CheckHardwareHash(User user, GetResourceRequest request, CancellationToken ct = default)
public async Task<string> 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;
}