mirror of
https://github.com/azaion/admin.git
synced 2026-04-22 11:06:33 +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 string? Hardware { get; set; }
|
||||||
public RoleEnum Role { get; set; }
|
public RoleEnum Role { get; set; }
|
||||||
|
|
||||||
|
public DateTime CreatedAt { get; set; }
|
||||||
|
public DateTime? LastLogin { get; set; }
|
||||||
public UserConfig? UserConfig { get; set; } = null!;
|
public UserConfig? UserConfig { get; set; } = null!;
|
||||||
|
|
||||||
public static string GetCacheKey(string email) =>
|
public static string GetCacheKey(string email) =>
|
||||||
|
|||||||
@@ -34,7 +34,8 @@ public class UserService(IDbFactory dbFactory, ICache cache) : IUserService
|
|||||||
Id = Guid.NewGuid(),
|
Id = Guid.NewGuid(),
|
||||||
Email = request.Email,
|
Email = request.Email,
|
||||||
PasswordHash = request.Password.ToHash(),
|
PasswordHash = request.Password.ToHash(),
|
||||||
Role = request.Role
|
Role = request.Role,
|
||||||
|
CreatedAt = DateTime.UtcNow
|
||||||
}, token: ct);
|
}, token: ct);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@@ -108,12 +109,23 @@ public class UserService(IDbFactory dbFactory, ICache cache) : IUserService
|
|||||||
{
|
{
|
||||||
await UpdateHardware(user.Email, hardware, ct);
|
await UpdateHardware(user.Email, hardware, ct);
|
||||||
cache.Invalidate(User.GetCacheKey(user.Email));
|
cache.Invalidate(User.GetCacheKey(user.Email));
|
||||||
|
await UpdateLastLoginDate(user, ct);
|
||||||
return requestHWHash;
|
return requestHWHash;
|
||||||
}
|
}
|
||||||
|
|
||||||
var userHWHash = Security.GetHWHash(user.Hardware);
|
var userHWHash = Security.GetHWHash(user.Hardware);
|
||||||
if (userHWHash != requestHWHash)
|
if (userHWHash != requestHWHash)
|
||||||
throw new BusinessException(ExceptionEnum.HardwareIdMismatch);
|
throw new BusinessException(ExceptionEnum.HardwareIdMismatch);
|
||||||
|
await UpdateLastLoginDate(user, ct);
|
||||||
return userHWHash;
|
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 {
|
server {
|
||||||
listen 443 ssl;
|
listen 443 ssl;
|
||||||
server_name docker.azaion.com;
|
server_name docker.azaion.com;
|
||||||
|
client_max_body_size 900M;
|
||||||
|
|
||||||
ssl_certificate /etc/letsencrypt/live/docker.azaion.com/fullchain.pem;
|
ssl_certificate /etc/letsencrypt/live/docker.azaion.com/fullchain.pem;
|
||||||
ssl_certificate_key /etc/letsencrypt/live/docker.azaion.com/privkey.pem;
|
ssl_certificate_key /etc/letsencrypt/live/docker.azaion.com/privkey.pem;
|
||||||
@@ -39,6 +40,7 @@ server {
|
|||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
server_name docker.azaion.com;
|
server_name docker.azaion.com;
|
||||||
|
client_max_body_size 900M;
|
||||||
|
|
||||||
location / {
|
location / {
|
||||||
auth_basic "Registry";
|
auth_basic "Registry";
|
||||||
|
|||||||
Vendored
+3
-1
@@ -8,7 +8,9 @@ create table users
|
|||||||
hardware text null,
|
hardware text null,
|
||||||
hardware_hash varchar(120) null,
|
hardware_hash varchar(120) null,
|
||||||
role varchar(20) not 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, insert, update, delete on public.users to azaion_admin;
|
||||||
grant select on table public.users to azaion_reader;
|
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