From cfd6b16e24405b2f24ba94493a3eabc5e4d1999f Mon Sep 17 00:00:00 2001 From: Oscar Morales Date: Tue, 17 Jun 2025 15:50:06 -0600 Subject: [PATCH] Adapt endpoints and configuration --- .../Controllers/AuthenticationController.cs | 2 +- .../Controllers/ModuleController.cs | 14 ++++---- .../Controllers/PermissionController.cs | 2 +- .../Controllers/RoleController.cs | 2 +- .../Controllers/UserController.cs | 20 +++++------ .../Core.Thalos.BFF.Api.csproj | 5 +++ Core.Thalos.BFF.Api/Program.cs | 35 +++++++++++++------ .../Modules/ChangeModuleStatusRequest.cs | 2 +- .../Requests/Modules/UpdateModuleRequest.cs | 4 ++- .../ChangePermissionStatusRequest.cs | 2 +- .../Permissions/UpdatePermissionRequest.cs | 2 +- .../Requests/Roles/ChangeRoleStatusRequest.cs | 2 +- .../Requests/Roles/UpdateRoleRequest.cs | 1 + .../Requests/Users/ChangeUserStatusRequest.cs | 2 +- .../Requests/Users/UpdateUserRequest.cs | 2 +- .../Core.Thalos.External.csproj | 4 +-- 16 files changed, 61 insertions(+), 40 deletions(-) diff --git a/Core.Thalos.BFF.Api/Controllers/AuthenticationController.cs b/Core.Thalos.BFF.Api/Controllers/AuthenticationController.cs index 644f577..f247b08 100644 --- a/Core.Thalos.BFF.Api/Controllers/AuthenticationController.cs +++ b/Core.Thalos.BFF.Api/Controllers/AuthenticationController.cs @@ -81,7 +81,7 @@ namespace Core.Thalos.BFF.Api.Controllers [HttpGet] [Route(Routes.RefreshToken)] [ProducesResponseType(typeof(UserAdapter), StatusCodes.Status200OK)] - [Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] + //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] public async Task RefreshCustomTokenAsync(CancellationToken cancellationToken) { var tokenAdapter = new TokenAdapter(); diff --git a/Core.Thalos.BFF.Api/Controllers/ModuleController.cs b/Core.Thalos.BFF.Api/Controllers/ModuleController.cs index b349f1f..dd9865e 100644 --- a/Core.Thalos.BFF.Api/Controllers/ModuleController.cs +++ b/Core.Thalos.BFF.Api/Controllers/ModuleController.cs @@ -19,7 +19,7 @@ namespace Core.Thalos.BFF.Api.Controllers [Consumes("application/json")] [Produces("application/json")] [ApiController] - [Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] + //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] public class ModuleController(IThalosServiceClient thalosServiceClient, ILogger logger) : BaseController(logger) { /// @@ -32,7 +32,7 @@ namespace Core.Thalos.BFF.Api.Controllers [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)] [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - [Permission("ModuleManagement.Read, RoleManagement.Read")] + //[Permission("ModuleManagement.Read, RoleManagement.Read")] public async Task GetAllModulesService(CancellationToken cancellationToken) { try @@ -65,7 +65,7 @@ namespace Core.Thalos.BFF.Api.Controllers [ProducesResponseType(StatusCodes.Status400BadRequest)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - [Permission("ModuleManagement.Read")] + //[Permission("ModuleManagement.Read")] public async Task GetAllModulesByListAsync([FromBody] GetAllModulesByListRequest request, CancellationToken cancellationToken) { try @@ -98,7 +98,7 @@ namespace Core.Thalos.BFF.Api.Controllers [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)] [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - [Permission("ModuleManagement.Write")] + //[Permission("ModuleManagement.Write")] public async Task CreateModuleService(CreateModuleRequest newModule, CancellationToken cancellationToken) { try @@ -132,7 +132,7 @@ namespace Core.Thalos.BFF.Api.Controllers [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)] [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - [Permission("ModuleManagement.Read")] + //[Permission("ModuleManagement.Read")] public async Task GetModuleByIdService(GetModuleRequest request, CancellationToken cancellationToken) { try @@ -160,7 +160,7 @@ namespace Core.Thalos.BFF.Api.Controllers [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)] [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - [Permission("ModuleManagement.Write")] + //[Permission("ModuleManagement.Write")] public async Task UpdateModuleService(UpdateModuleRequest newModule, CancellationToken cancellationToken) { try @@ -196,7 +196,7 @@ namespace Core.Thalos.BFF.Api.Controllers [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)] [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - [Permission("ModuleManagement.Write")] + //[Permission("ModuleManagement.Write")] public async Task ChangeModuleStatusService([FromBody] ChangeModuleStatusRequest request, CancellationToken cancellationToken) { try diff --git a/Core.Thalos.BFF.Api/Controllers/PermissionController.cs b/Core.Thalos.BFF.Api/Controllers/PermissionController.cs index cf0c0a4..f8e38ea 100644 --- a/Core.Thalos.BFF.Api/Controllers/PermissionController.cs +++ b/Core.Thalos.BFF.Api/Controllers/PermissionController.cs @@ -20,7 +20,7 @@ namespace Core.Thalos.BFF.Api.Controllers [Consumes("application/json")] [Produces("application/json")] [ApiController] - [Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] + //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] public class PermissionController(IThalosServiceClient thalosServiceClient, ILogger logger) : BaseController(logger) { /// diff --git a/Core.Thalos.BFF.Api/Controllers/RoleController.cs b/Core.Thalos.BFF.Api/Controllers/RoleController.cs index 0d90bb6..77c2728 100644 --- a/Core.Thalos.BFF.Api/Controllers/RoleController.cs +++ b/Core.Thalos.BFF.Api/Controllers/RoleController.cs @@ -18,7 +18,7 @@ namespace Core.Thalos.BFF.Api.Controllers [Consumes("application/json")] [Produces("application/json")] [ApiController] - [Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] + //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] public class RoleController(IThalosServiceClient thalosServiceClient, ILogger logger) : BaseController(logger) { /// diff --git a/Core.Thalos.BFF.Api/Controllers/UserController.cs b/Core.Thalos.BFF.Api/Controllers/UserController.cs index 2232b49..8a14c92 100644 --- a/Core.Thalos.BFF.Api/Controllers/UserController.cs +++ b/Core.Thalos.BFF.Api/Controllers/UserController.cs @@ -31,7 +31,7 @@ namespace Core.Thalos.BFF.Api.Controllers [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)] [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - [Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] + //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] [Permission("UserManagement.Read")] public async Task GetAllUsersService(CancellationToken cancellationToken) { @@ -58,7 +58,7 @@ namespace Core.Thalos.BFF.Api.Controllers [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)] [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - [Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] + //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] [Permission("UserManagement.Write")] public async Task CreateUserService(CreateUserRequest newUser, CancellationToken cancellationToken) { @@ -97,7 +97,7 @@ namespace Core.Thalos.BFF.Api.Controllers [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)] [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - [Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] + //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] [Permission("UserManagement.Read")] public async Task GetUserByIdService(GetUserRequest request, CancellationToken cancellationToken) { @@ -126,7 +126,7 @@ namespace Core.Thalos.BFF.Api.Controllers [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)] [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - [Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] + //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] [Permission("UserManagement.Read")] public async Task GetUserByEmailService(GetUserByEmailRequest request, CancellationToken cancellationToken) { @@ -155,7 +155,7 @@ namespace Core.Thalos.BFF.Api.Controllers [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)] [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - [Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] + //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] [Permission("UserManagement.Write")] public async Task UpdateUserService(UpdateUserRequest request, CancellationToken cancellationToken) { @@ -252,7 +252,7 @@ namespace Core.Thalos.BFF.Api.Controllers [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)] [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - [Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] + //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] [Permission("UserManagement.Write")] public async Task ChangeUserStatusService([FromBody] ChangeUserStatusRequest request, CancellationToken cancellationToken) { @@ -283,7 +283,7 @@ namespace Core.Thalos.BFF.Api.Controllers [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)] [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - [Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] + //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] [Permission("UserManagement.Write")] public async Task AddCompanyToUserService([FromBody] AddCompanyToUserRequest request, CancellationToken cancellationToken) { @@ -315,7 +315,7 @@ namespace Core.Thalos.BFF.Api.Controllers [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)] [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - [Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] + //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] [Permission("UserManagement.Write")] public async Task RemoveCompanyFromUserService([FromBody] RemoveCompanyFromUserRequest request, CancellationToken cancellationToken) { @@ -347,7 +347,7 @@ namespace Core.Thalos.BFF.Api.Controllers [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)] [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - [Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] + //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] [Permission("UserManagement.Write")] public async Task AddProjectToUserService([FromBody] AddProjectToUserRequest request, CancellationToken cancellationToken) @@ -380,7 +380,7 @@ namespace Core.Thalos.BFF.Api.Controllers [ProducesResponseType(typeof(Notification), StatusCodes.Status412PreconditionFailed)] [ProducesResponseType(typeof(Notification), StatusCodes.Status422UnprocessableEntity)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] - [Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] + //[Authorize(AuthenticationSchemes = Schemes.DefaultScheme)] [Permission("UserManagement.Write")] public async Task RemoveProjectFromUserService([FromBody] RemoveProjectFromUserRequest request, CancellationToken cancellationToken) { diff --git a/Core.Thalos.BFF.Api/Core.Thalos.BFF.Api.csproj b/Core.Thalos.BFF.Api/Core.Thalos.BFF.Api.csproj index dd4cf2f..9d06f39 100644 --- a/Core.Thalos.BFF.Api/Core.Thalos.BFF.Api.csproj +++ b/Core.Thalos.BFF.Api/Core.Thalos.BFF.Api.csproj @@ -7,6 +7,11 @@ True + + + + + diff --git a/Core.Thalos.BFF.Api/Program.cs b/Core.Thalos.BFF.Api/Program.cs index d4a9704..b90e44d 100644 --- a/Core.Thalos.BFF.Api/Program.cs +++ b/Core.Thalos.BFF.Api/Program.cs @@ -1,18 +1,18 @@ +using Asp.Versioning; +using Azure.Identity; +using Core.Blueprint.Logging.Configuration; using Core.Thalos.Adapters.Extensions; -using Core.Thalos.Adapters.Helpers; using Core.Thalos.External.ClientConfiguration; using Microsoft.AspNetCore.ResponseCompression; +using Microsoft.Extensions.Configuration.AzureAppConfiguration; using OpenTelemetry.Logs; using OpenTelemetry.Resources; +using Swashbuckle.AspNetCore.SwaggerUI; using System.IO.Compression; using System.Reflection; var builder = WebApplication.CreateBuilder(args); -var authSettings = AuthHelper.GetAuthSettings(builder, "thalos_bff"); - -builder.Services.ConfigureAuthentication(builder.Configuration, authSettings); - builder.Services.AddEndpointsApiExplorer(); builder.Configuration .AddUserSecrets(Assembly.GetExecutingAssembly()) @@ -20,6 +20,7 @@ builder.Configuration builder.Services.AddResponseCompression(); builder.Services.AddProblemDetails(); +builder.Services.AddLogs(builder); builder.Services.AddMemoryCache(); builder.Services.AddResponseCaching(configureOptions => { configureOptions.UseCaseSensitivePaths = true; }); builder.Logging.AddOpenTelemetry(options => @@ -80,14 +81,19 @@ builder.Host.ConfigureServices((context, services) => services.AddResponseCaching(); services.AddControllers(); services.AddEndpointsApiExplorer(); - services.AddVersioning(builder.Configuration); - services.AddSwagger(builder.Configuration, "Core.Thalos.BFF.API.xml", authSettings); + services.AddSwaggerGen(); services.AddLogging(); services.AddProblemDetails(); services.AddHttpContextAccessor(); services.AddTransient(); // Register the TrackingIdHandler services.RegisterExternalLayer(builder.Configuration); - services.AddTelemetry(); + + services.AddApiVersioning(options => options.ReportApiVersions = true) + .AddApiExplorer(options => + { + options.GroupNameFormat = "'v'VVV"; + options.SubstituteApiVersionInUrl = true; + }); }); builder.Services.AddCors(options => @@ -107,8 +113,15 @@ var app = builder.Build(); app.UseCors(options => options.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin()); app.UseSwagger(); -app.UseSwaggerUI(builder.Configuration, authSettings); -app.ConfigureSwagger(builder.Configuration); +app.UseSwaggerUI(options => +{ + foreach (var version in app.DescribeApiVersions().Select(version => version.GroupName)) + options.SwaggerEndpoint($"/swagger/{version}/swagger.json", version); + + options.DisplayRequestDuration(); + options.EnableTryItOutByDefault(); + options.DocExpansion(DocExpansion.None); +}); app.UseResponseCompression(); app.UseResponseCaching(); app.UseHttpsRedirection(); @@ -118,6 +131,6 @@ app.UseAuthorization(); app.MapControllers(); app.UseHsts(); app.UseAntiforgery(); -app.UseHttpLogging(); +app.UseLogging(builder.Configuration); app.Run(); \ No newline at end of file diff --git a/Core.Thalos.External/Clients/Thalos/Requests/Modules/ChangeModuleStatusRequest.cs b/Core.Thalos.External/Clients/Thalos/Requests/Modules/ChangeModuleStatusRequest.cs index edb58d4..4ee0e32 100644 --- a/Core.Thalos.External/Clients/Thalos/Requests/Modules/ChangeModuleStatusRequest.cs +++ b/Core.Thalos.External/Clients/Thalos/Requests/Modules/ChangeModuleStatusRequest.cs @@ -1,4 +1,4 @@ -using Core.Thalos.Adapters.Common.Enums; +using Core.Blueprint.Mongo; namespace Core.Thalos.External.Clients.Thalos.Requests.Permissions { diff --git a/Core.Thalos.External/Clients/Thalos/Requests/Modules/UpdateModuleRequest.cs b/Core.Thalos.External/Clients/Thalos/Requests/Modules/UpdateModuleRequest.cs index 6c87781..0e4936e 100644 --- a/Core.Thalos.External/Clients/Thalos/Requests/Modules/UpdateModuleRequest.cs +++ b/Core.Thalos.External/Clients/Thalos/Requests/Modules/UpdateModuleRequest.cs @@ -1,4 +1,6 @@ -using Core.Thalos.Adapters.Common.Enums; +using Core.Blueprint.Mongo; +using Core.Thalos.Adapters.Common.Enums; +using StatusEnum = Core.Blueprint.Mongo.StatusEnum; namespace Core.Thalos.External.Clients.Thalos.Requests.Permissions { diff --git a/Core.Thalos.External/Clients/Thalos/Requests/Permissions/ChangePermissionStatusRequest.cs b/Core.Thalos.External/Clients/Thalos/Requests/Permissions/ChangePermissionStatusRequest.cs index 928aa01..8dd43dd 100644 --- a/Core.Thalos.External/Clients/Thalos/Requests/Permissions/ChangePermissionStatusRequest.cs +++ b/Core.Thalos.External/Clients/Thalos/Requests/Permissions/ChangePermissionStatusRequest.cs @@ -1,4 +1,4 @@ -using Core.Thalos.Adapters.Common.Enums; +using Core.Blueprint.Mongo; namespace Core.Thalos.External.Clients.Thalos.Requests.Permissions { diff --git a/Core.Thalos.External/Clients/Thalos/Requests/Permissions/UpdatePermissionRequest.cs b/Core.Thalos.External/Clients/Thalos/Requests/Permissions/UpdatePermissionRequest.cs index cde99a8..2dbb77c 100644 --- a/Core.Thalos.External/Clients/Thalos/Requests/Permissions/UpdatePermissionRequest.cs +++ b/Core.Thalos.External/Clients/Thalos/Requests/Permissions/UpdatePermissionRequest.cs @@ -1,5 +1,5 @@ using Core.Thalos.Adapters.Common.Constants; -using Core.Thalos.Adapters.Common.Enums; +using StatusEnum = Core.Blueprint.Mongo.StatusEnum; namespace Core.Thalos.External.Clients.Thalos.Requests.Permissions { diff --git a/Core.Thalos.External/Clients/Thalos/Requests/Roles/ChangeRoleStatusRequest.cs b/Core.Thalos.External/Clients/Thalos/Requests/Roles/ChangeRoleStatusRequest.cs index bdd3bf5..ae6d376 100644 --- a/Core.Thalos.External/Clients/Thalos/Requests/Roles/ChangeRoleStatusRequest.cs +++ b/Core.Thalos.External/Clients/Thalos/Requests/Roles/ChangeRoleStatusRequest.cs @@ -1,4 +1,4 @@ -using Core.Thalos.Adapters.Common.Enums; +using Core.Blueprint.Mongo; namespace Core.Thalos.Application.UseCases.Roles.Input { diff --git a/Core.Thalos.External/Clients/Thalos/Requests/Roles/UpdateRoleRequest.cs b/Core.Thalos.External/Clients/Thalos/Requests/Roles/UpdateRoleRequest.cs index 067bbfb..8c389ec 100644 --- a/Core.Thalos.External/Clients/Thalos/Requests/Roles/UpdateRoleRequest.cs +++ b/Core.Thalos.External/Clients/Thalos/Requests/Roles/UpdateRoleRequest.cs @@ -1,5 +1,6 @@ using Core.Thalos.Adapters.Common.Enums; using System.Text.Json.Serialization; +using StatusEnum = Core.Blueprint.Mongo.StatusEnum; namespace Core.Thalos.Application.UseCases.Roles.Input { diff --git a/Core.Thalos.External/Clients/Thalos/Requests/Users/ChangeUserStatusRequest.cs b/Core.Thalos.External/Clients/Thalos/Requests/Users/ChangeUserStatusRequest.cs index eadcff1..e72d738 100644 --- a/Core.Thalos.External/Clients/Thalos/Requests/Users/ChangeUserStatusRequest.cs +++ b/Core.Thalos.External/Clients/Thalos/Requests/Users/ChangeUserStatusRequest.cs @@ -1,4 +1,4 @@ -using Core.Thalos.Adapters.Common.Enums; +using Core.Blueprint.Mongo; namespace Core.Thalos.Application.UseCases.Users.Input { diff --git a/Core.Thalos.External/Clients/Thalos/Requests/Users/UpdateUserRequest.cs b/Core.Thalos.External/Clients/Thalos/Requests/Users/UpdateUserRequest.cs index bb26f18..cf2caa0 100644 --- a/Core.Thalos.External/Clients/Thalos/Requests/Users/UpdateUserRequest.cs +++ b/Core.Thalos.External/Clients/Thalos/Requests/Users/UpdateUserRequest.cs @@ -1,4 +1,4 @@ -using Core.Thalos.Adapters.Common.Enums; +using Core.Blueprint.Mongo; namespace Core.Thalos.Application.UseCases.Users.Input { diff --git a/Core.Thalos.External/Core.Thalos.External.csproj b/Core.Thalos.External/Core.Thalos.External.csproj index 24b0139..81178b9 100644 --- a/Core.Thalos.External/Core.Thalos.External.csproj +++ b/Core.Thalos.External/Core.Thalos.External.csproj @@ -7,8 +7,8 @@ - - + + -- 2.49.1