diff --git a/Azaion.Api/Azaion.Api.csproj b/Azaion.Api/Azaion.Api.csproj
index 60050f0..adde894 100644
--- a/Azaion.Api/Azaion.Api.csproj
+++ b/Azaion.Api/Azaion.Api.csproj
@@ -11,6 +11,11 @@
+
+
+
+
+
diff --git a/Azaion.Api/Program.cs b/Azaion.Api/Program.cs
index 66c109f..048378f 100644
--- a/Azaion.Api/Program.cs
+++ b/Azaion.Api/Program.cs
@@ -11,6 +11,16 @@ using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Tokens;
using Microsoft.OpenApi.Models;
+using Serilog;
+
+Log.Logger = new LoggerConfiguration()
+ .Enrich.FromLogContext()
+ .MinimumLevel.Information()
+ .WriteTo.Console()
+ .WriteTo.File(
+ path: "logs/log.txt",
+ rollingInterval: RollingInterval.Day)
+ .CreateLogger();
var builder = WebApplication.CreateBuilder(args);
builder.WebHost.ConfigureKestrel(o => o.Limits.MaxRequestBodySize = 209715200); //increase upload limit up to 200mb
@@ -20,6 +30,7 @@ if (jwtConfig == null || string.IsNullOrEmpty(jwtConfig.Secret))
throw new Exception("Missing configuration section: JwtConfig");
var signingKey = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(jwtConfig.Secret));
+builder.Services.AddSerilog();
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(o =>
{
diff --git a/Azaion.Common/Entities/RoleEnum.cs b/Azaion.Common/Entities/RoleEnum.cs
index 6573da8..4bd7a36 100644
--- a/Azaion.Common/Entities/RoleEnum.cs
+++ b/Azaion.Common/Entities/RoleEnum.cs
@@ -3,10 +3,10 @@
public enum RoleEnum
{
None = 0,
- Operator = 10,
- Validator = 20,
+ Operator = 10, //only annotator is available. Could send annotations to queue.
+ Validator = 20, //annotator + dataset explorer. This role allows to receive annotations from the queue.
CompanionPC = 30,
- Admin = 40,
- ResourceUploader = 50,
- ApiAdmin = 1000
+ Admin = 40, //
+ ResourceUploader = 50, //Uploading dll and ai models
+ ApiAdmin = 1000 //everything
}
diff --git a/Azaion.Services/ResourcesService.cs b/Azaion.Services/ResourcesService.cs
index b4dcdb4..a687d8d 100644
--- a/Azaion.Services/ResourcesService.cs
+++ b/Azaion.Services/ResourcesService.cs
@@ -4,6 +4,7 @@ using Azaion.Common.Database;
using Azaion.Common.Entities;
using LinqToDB;
using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Options;
namespace Azaion.Services;
@@ -14,7 +15,7 @@ public interface IResourcesService
Task SaveResource(IFormFile data, CancellationToken cancellationToken = default);
}
-public class ResourcesService(IOptions resourcesConfig) : IResourcesService
+public class ResourcesService(IOptions resourcesConfig, ILogger logger) : IResourcesService
{
public async Task GetEncryptedResource(string fileName, string key, CancellationToken cancellationToken = default)
{
@@ -37,5 +38,6 @@ public class ResourcesService(IOptions resourcesConfig) : IReso
var resourcePath = Path.Combine(resourcesConfig.Value.ResourcesFolder, data.FileName);
await using var fileStream = new FileStream(resourcePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
await data.CopyToAsync(fileStream, cancellationToken);
+ logger.LogInformation($"Resource {data.FileName} Saved Successfully");
}
}
\ No newline at end of file
diff --git a/Azaion.Services/UserService.cs b/Azaion.Services/UserService.cs
index 520dbe5..36b3f64 100644
--- a/Azaion.Services/UserService.cs
+++ b/Azaion.Services/UserService.cs
@@ -11,7 +11,7 @@ namespace Azaion.Services;
public interface IUserService
{
Task RegisterUser(RegisterUserRequest request, CancellationToken cancellationToken = default);
- Task ValidateUser(LoginRequest request, string? hardwareId = null, CancellationToken cancellationToken = default);
+ Task ValidateUser(LoginRequest request, CancellationToken cancellationToken = default);
Task UpdateHardware(string email, HardwareInfo hardwareInfo, CancellationToken cancellationToken = default);
Task> GetUsers(string? searchEmail, RoleEnum? searchRole, CancellationToken cancellationToken);
Task CheckHardware(User user, GetResourceRequest request);
@@ -37,7 +37,7 @@ public class UserService(IDbFactory dbFactory) : IUserService
});
}
- public async Task ValidateUser(LoginRequest request, string? hardwareId = null, CancellationToken cancellationToken = default) =>
+ public async Task ValidateUser(LoginRequest request, CancellationToken cancellationToken = default) =>
await dbFactory.Run(async db =>
{
var user = await db.Users.FirstOrDefaultAsync(x => x.Email == request.Email, token: cancellationToken);
@@ -47,12 +47,6 @@ public class UserService(IDbFactory dbFactory) : IUserService
if (request.Password.ToHash() != user.PasswordHash)
throw new BusinessException(ExceptionEnum.WrongPassword);
- if (user.Role == RoleEnum.ApiAdmin)
- return user;
-
- // For Non-API admins hardwareId should match if it was already set
- if (user.HardwareHash != null && user.HardwareHash != hardwareId)
- throw new BusinessException(ExceptionEnum.HardwareIdMismatch);
return user;
});
diff --git a/env/01 sh-install/04-nginx-docker-registry.sh b/env/01 sh-install/04-nginx-docker-registry.sh
index 03529d9..9fc16d3 100644
--- a/env/01 sh-install/04-nginx-docker-registry.sh
+++ b/env/01 sh-install/04-nginx-docker-registry.sh
@@ -12,8 +12,8 @@ chmod 640 .htpasswd
chown root:www-data .htpasswd
# create certs
-certbot --nginx -d api.mywebsite.com
-certbot --nginx -d docker.mywebsite.com
+certbot --nginx -d api.azaion.com
+certbot --nginx -d docker.azaion.com
cd /etc/nginx/sites-available
tee -a docker.azaion.com << END
@@ -23,7 +23,6 @@ server {
ssl_certificate /etc/letsencrypt/live/docker.azaion.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/docker.azaion.com/privkey.pem;
- client_max_body_size 200M;
location / {
auth_basic "Registry";
@@ -40,7 +39,6 @@ server {
server {
listen 80;
server_name docker.azaion.com;
- client_max_body_size 200M;
location / {
auth_basic "Registry";
@@ -60,6 +58,7 @@ tee -a api.azaion.com << END
server {
listen 443 ssl;
server_name api.azaion.com;
+ client_max_body_size 200M;
ssl_certificate /etc/letsencrypt/live/api.azaion.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.azaion.com/privkey.pem;
@@ -77,6 +76,7 @@ server {
server {
listen 80;
server_name api.azaion.com;
+ client_max_body_size 200M;
# Redirect all HTTP requests to HTTPS
return 301 https://\$host\$request_uri;
diff --git a/env/01 sh-install/05 start scripts/restart-api.sh b/env/01 sh-install/05 start scripts/restart-api.sh
new file mode 100644
index 0000000..63e496f
--- /dev/null
+++ b/env/01 sh-install/05 start scripts/restart-api.sh
@@ -0,0 +1,2 @@
+docker rm azaion.api
+sh start-container.sh
diff --git a/env/01 sh-install/05 start scripts/start-container.sh b/env/01 sh-install/05 start scripts/start-container.sh
new file mode 100644
index 0000000..f969c6e
--- /dev/null
+++ b/env/01 sh-install/05 start scripts/start-container.sh
@@ -0,0 +1,5 @@
+docker run \
+ --env-file .env \
+ -p 4000:8080 \
+ -v /root/content:/app/Content \
+ --name azaion.api docker.azaion.com/api
\ No newline at end of file
diff --git a/env/01 sh-install/05 start scripts/update-api.sh b/env/01 sh-install/05 start scripts/update-api.sh
new file mode 100644
index 0000000..837e808
--- /dev/null
+++ b/env/01 sh-install/05 start scripts/update-api.sh
@@ -0,0 +1,6 @@
+docker stop azaion.api
+docker rm azaion.api
+docker login docker.azaion.com
+docker pull docker.azaion.com/api:latest
+sh start-container.sh
+