diff --git a/Azaion.Api/Program.cs b/Azaion.Api/Program.cs index 79e52d6..25a7aea 100644 --- a/Azaion.Api/Program.cs +++ b/Azaion.Api/Program.cs @@ -210,18 +210,32 @@ app.MapPost("/resources/get/{dataFolder?}", //Need to have POST method for secur }).RequireAuthorization() .WithOpenApi(op => new OpenApiOperation(op){ Summary = "Gets encrypted by users Password and HardwareHash resources. POST method for secure password"}); -app.MapGet("/resources/get-installer/{dataFolder?}", - async ([FromRoute]string? dataFolder, IAuthService authService, IResourcesService resourcesService, CancellationToken ct) => +app.MapGet("/resources/get-installer", + async (IAuthService authService, IResourcesService resourcesService, CancellationToken ct) => { var user = await authService.GetCurrentUser(); if (user == null) throw new UnauthorizedAccessException(); - var (name, stream) = resourcesService.GetInstaller(dataFolder); + var (name, stream) = resourcesService.GetInstaller(isStage: false); if (stream == null) throw new FileNotFoundException("Installer file was not found!"); return Results.File(stream, "application/octet-stream", name); }).RequireAuthorization() - .WithOpenApi(op => new OpenApiOperation(op){ Summary = "Gets latest installer"}); + .WithOpenApi(op => new OpenApiOperation(op) { Summary = "Gets latest installer" }); + +app.MapGet("/resources/get-installer/stage", + async (IAuthService authService, IResourcesService resourcesService, CancellationToken ct) => + { + var user = await authService.GetCurrentUser(); + if (user == null) + throw new UnauthorizedAccessException(); + var (name, stream) = resourcesService.GetInstaller(isStage: true); + if (stream == null) + throw new FileNotFoundException("Installer file was not found!"); + return Results.File(stream, "application/octet-stream", name); + }).RequireAuthorization() + .WithOpenApi(op => new OpenApiOperation(op) { Summary = "Gets latest installer" }); + app.MapPost("/resources/check", async (CheckResourceRequest request, IAuthService authService, IUserService userService) => diff --git a/Azaion.Api/appsettings.json b/Azaion.Api/appsettings.json index bf2f878..95d9ed7 100644 --- a/Azaion.Api/appsettings.json +++ b/Azaion.Api/appsettings.json @@ -8,7 +8,8 @@ "AllowedHosts": "*", "ResourcesConfig": { "ResourcesFolder": "Content", - "SuiteInstallerFolder": "suite" + "SuiteInstallerFolder": "suite", + "SuiteStageInstallerFolder": "suite-stage" }, "JwtConfig": { "Issuer": "AzaionApi", diff --git a/Azaion.Common/Configs/ResourcesConfig.cs b/Azaion.Common/Configs/ResourcesConfig.cs index 5b6b17f..ecad0f2 100644 --- a/Azaion.Common/Configs/ResourcesConfig.cs +++ b/Azaion.Common/Configs/ResourcesConfig.cs @@ -4,4 +4,5 @@ public class ResourcesConfig { public string ResourcesFolder { get; set; } = null!; public string SuiteInstallerFolder { get; set; } = null!; + public string SuiteStageInstallerFolder { get; set; } = null!; } \ No newline at end of file diff --git a/Azaion.Common/Requests/GetResourceRequest.cs b/Azaion.Common/Requests/GetResourceRequest.cs index 621b627..40b4596 100644 --- a/Azaion.Common/Requests/GetResourceRequest.cs +++ b/Azaion.Common/Requests/GetResourceRequest.cs @@ -20,7 +20,7 @@ public class GetResourceRequestValidator : AbstractValidator { RuleFor(r => r.Password) .MinimumLength(8) - .WithErrorCode(ExceptionEnum.PasswordLengthIncorrect.ToString()) + .WithErrorCode(nameof(ExceptionEnum.PasswordLengthIncorrect)) .WithMessage(_ => BusinessException.GetMessage(ExceptionEnum.PasswordLengthIncorrect)); RuleFor(r => r.Hardware) @@ -29,7 +29,7 @@ public class GetResourceRequestValidator : AbstractValidator RuleFor(r => r.FileName) .NotEmpty() - .WithErrorCode(ExceptionEnum.WrongResourceName.ToString()) + .WithErrorCode(nameof(ExceptionEnum.WrongResourceName)) .WithMessage(_ => BusinessException.GetMessage(ExceptionEnum.WrongResourceName)); } } \ No newline at end of file diff --git a/Azaion.Services/ResourcesService.cs b/Azaion.Services/ResourcesService.cs index b3a3c57..f971392 100644 --- a/Azaion.Services/ResourcesService.cs +++ b/Azaion.Services/ResourcesService.cs @@ -8,7 +8,7 @@ namespace Azaion.Services; public interface IResourcesService { - (string?, Stream?) GetInstaller(string? dataFolder); + (string?, Stream?) GetInstaller(bool isStage); Task GetEncryptedResource(string? dataFolder, string fileName, string key, CancellationToken cancellationToken = default); Task SaveResource(string? dataFolder, IFormFile data, CancellationToken cancellationToken = default); Task> ListResources(string? dataFolder, string? search, CancellationToken cancellationToken = default); @@ -24,9 +24,9 @@ public class ResourcesService(IOptions resourcesConfig, ILogger : Path.Combine(resourcesConfig.Value.ResourcesFolder, dataFolder); } - public (string?, Stream?) GetInstaller(string? dataFolder) + public (string?, Stream?) GetInstaller(bool isStage) { - var suiteFolder = Path.Combine(resourcesConfig.Value.ResourcesFolder, dataFolder ?? resourcesConfig.Value.SuiteInstallerFolder); + var suiteFolder = Path.Combine(isStage ? resourcesConfig.Value.SuiteStageInstallerFolder : resourcesConfig.Value.SuiteInstallerFolder); var installer = new DirectoryInfo(suiteFolder).GetFiles("AzaionSuite.Iterative*").FirstOrDefault(); if (installer == null) return (null, null);