mirror of
https://github.com/azaion/admin.git
synced 2026-04-22 09:26:34 +00:00
Add LastLogin and CreatedAt to User
This commit is contained in:
@@ -8,6 +8,8 @@ public class User
|
||||
public string? Hardware { get; set; }
|
||||
public RoleEnum Role { get; set; }
|
||||
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public DateTime? LastLogin { get; set; }
|
||||
public UserConfig? UserConfig { get; set; } = null!;
|
||||
|
||||
public static string GetCacheKey(string email) =>
|
||||
|
||||
@@ -11,7 +11,7 @@ namespace Azaion.Services;
|
||||
|
||||
public interface IAuthService
|
||||
{
|
||||
Task<User?> GetCurrentUser();
|
||||
Task<User?> GetCurrentUser();
|
||||
string CreateToken(User user);
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,8 @@ public class UserService(IDbFactory dbFactory, ICache cache) : IUserService
|
||||
Id = Guid.NewGuid(),
|
||||
Email = request.Email,
|
||||
PasswordHash = request.Password.ToHash(),
|
||||
Role = request.Role
|
||||
Role = request.Role,
|
||||
CreatedAt = DateTime.UtcNow
|
||||
}, token: ct);
|
||||
});
|
||||
}
|
||||
@@ -108,12 +109,23 @@ public class UserService(IDbFactory dbFactory, ICache cache) : IUserService
|
||||
{
|
||||
await UpdateHardware(user.Email, hardware, ct);
|
||||
cache.Invalidate(User.GetCacheKey(user.Email));
|
||||
await UpdateLastLoginDate(user, ct);
|
||||
return requestHWHash;
|
||||
}
|
||||
|
||||
var userHWHash = Security.GetHWHash(user.Hardware);
|
||||
if (userHWHash != requestHWHash)
|
||||
throw new BusinessException(ExceptionEnum.HardwareIdMismatch);
|
||||
await UpdateLastLoginDate(user, ct);
|
||||
return userHWHash;
|
||||
}
|
||||
|
||||
private async Task UpdateLastLoginDate(User user, CancellationToken ct = default)
|
||||
{
|
||||
await dbFactory.Run(async db =>
|
||||
await db.Users.UpdateAsync(x => x.Email == user.Email, u => new User
|
||||
{
|
||||
LastLogin = DateTime.UtcNow
|
||||
}, ct));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
using Azaion.Common.Configs;
|
||||
using Azaion.Common.Database;
|
||||
using Azaion.Services;
|
||||
using Microsoft.Extensions.Options;
|
||||
using Xunit;
|
||||
|
||||
namespace Azaion.Test;
|
||||
|
||||
public class UserServiceTest
|
||||
{
|
||||
[Fact]
|
||||
public async Task CheckHardwareHashTest()
|
||||
{
|
||||
var dbFactory = new DbFactory(new OptionsWrapper<ConnectionStrings>(new ConnectionStrings
|
||||
{
|
||||
AzaionDb = "Host=188.245.120.247;Port=4312;Database=azaion;Username=azaion_reader;Password=A@1n_zxre@d!only@$Az",
|
||||
AzaionDbAdmin = "Host=188.245.120.247;Port=4312;Database=azaion;Username=azaion_admin;Password=Az@1on_Oddmin$$@r"
|
||||
}));
|
||||
var userService = new UserService(dbFactory, new MemoryCache());
|
||||
var user = await userService.GetByEmail("spielberg@azaion.com");
|
||||
|
||||
var res = await userService.CheckHardwareHash(user,
|
||||
"CPU: AMD Ryzen 9 3900XT 12-Core Processor. GPU: Microsoft Remote Display Adapter. Memory: 67037080. DriveSerial: PHMB746301G6480DGN _00000001.");
|
||||
}
|
||||
}
|
||||
Vendored
+2
@@ -20,6 +20,7 @@ tee -a docker.azaion.com << END
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name docker.azaion.com;
|
||||
client_max_body_size 900M;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/docker.azaion.com/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/docker.azaion.com/privkey.pem;
|
||||
@@ -39,6 +40,7 @@ server {
|
||||
server {
|
||||
listen 80;
|
||||
server_name docker.azaion.com;
|
||||
client_max_body_size 900M;
|
||||
|
||||
location / {
|
||||
auth_basic "Registry";
|
||||
|
||||
Vendored
+3
-1
@@ -8,7 +8,9 @@ create table users
|
||||
hardware text null,
|
||||
hardware_hash varchar(120) null,
|
||||
role varchar(20) not null,
|
||||
user_config varchar(512) null
|
||||
user_config varchar(512) null,
|
||||
created_at timestamp not null default now(),
|
||||
last_login timestamp null
|
||||
);
|
||||
grant select, insert, update, delete on public.users to azaion_admin;
|
||||
grant select on table public.users to azaion_reader;
|
||||
|
||||
Vendored
+3
@@ -0,0 +1,3 @@
|
||||
ALTER TABLE public.users
|
||||
ADD COLUMN IF NOT EXISTS created_at timestamp not null default now(),
|
||||
ADD COLUMN IF NOT EXISTS last_login timestamp null;
|
||||
Reference in New Issue
Block a user