diff --git a/src/Pandatech.CleanArchitecture.Api/Extensions/CorsExtension.cs b/src/Pandatech.CleanArchitecture.Api/Extensions/CorsExtension.cs index da8b4d3..f9a5cd9 100644 --- a/src/Pandatech.CleanArchitecture.Api/Extensions/CorsExtension.cs +++ b/src/Pandatech.CleanArchitecture.Api/Extensions/CorsExtension.cs @@ -4,54 +4,56 @@ namespace Pandatech.CleanArchitecture.Api.Extensions; public static class CorsExtension { - public static WebApplicationBuilder AddCors(this WebApplicationBuilder builder) - { - var configuration = builder.Configuration; - if (builder.Environment.IsProduction()) - { - var allowedOrigins = configuration["CorsSettings:AllowedOrigins"]; - - ValidateCorsOrigins(allowedOrigins!); - - builder.Services.AddCors(options => options.AddPolicy("AllowSpecific", p => p - .WithOrigins(allowedOrigins!) - .AllowAnyMethod() - .AllowAnyHeader())); - } - else - { - builder.Services.AddCors(options => options.AddPolicy("AllowAll", p => p - .AllowAnyOrigin() - .AllowAnyMethod() - .AllowAnyHeader())); - } - - return builder; - } - - public static WebApplication UseCors(this WebApplication app) - { - app.UseCors(app.Environment.IsProduction() ? "AllowSpecific" : "AllowAll"); - return app; - } - - private static void ValidateCorsOrigins(string allowedOrigins) - { - var originsArray = allowedOrigins.Split(',', StringSplitOptions.RemoveEmptyEntries); - - if (originsArray.Length == 0) - { + public static WebApplicationBuilder AddCors(this WebApplicationBuilder builder) + { + var configuration = builder.Configuration; + if (builder.Environment.IsProduction()) + { + var allowedOrigins = configuration["CorsSettings:AllowedOrigins"]; + + ValidateCorsOrigins(allowedOrigins!); + + builder.Services.AddCors(options => options.AddPolicy("AllowSpecific", p => p + .WithOrigins(allowedOrigins!) + .AllowCredentials() + .AllowAnyMethod() + .AllowAnyHeader())); + } + else + { + builder.Services.AddCors(options => options.AddPolicy("AllowAll", p => p + .SetIsOriginAllowed(_ => true) + .AllowCredentials() + .AllowAnyMethod() + .AllowAnyHeader())); + } + + return builder; + } + + public static WebApplication UseCors(this WebApplication app) + { + app.UseCors(app.Environment.IsProduction() ? "AllowSpecific" : "AllowAll"); + return app; + } + + private static void ValidateCorsOrigins(string allowedOrigins) + { + var originsArray = allowedOrigins.Split(',', StringSplitOptions.RemoveEmptyEntries); + + if (originsArray.Length == 0) + { + throw new InvalidOperationException( + "The Cors origins are empty or incorrectly formatted."); + } + + foreach (var origin in originsArray) + { + if (!PandaValidator.IsUri(origin, true, false)) + { throw new InvalidOperationException( - "The ORIGINS environment variable is empty or incorrectly formatted."); - } - - foreach (var origin in originsArray) - { - if (!PandaValidator.IsUri(origin, true, false)) - { - throw new InvalidOperationException( - $"The origin {origin} in the ORIGINS environment variable is not valid."); - } - } - } + $"The origin {origin} is not valid URI."); + } + } + } } diff --git a/src/Pandatech.CleanArchitecture.Application/Features/User/Create/CreateUserV1CommandHandler.cs b/src/Pandatech.CleanArchitecture.Application/Features/User/Create/CreateUserV1CommandHandler.cs index 01e89ca..4c02d99 100644 --- a/src/Pandatech.CleanArchitecture.Application/Features/User/Create/CreateUserV1CommandHandler.cs +++ b/src/Pandatech.CleanArchitecture.Application/Features/User/Create/CreateUserV1CommandHandler.cs @@ -19,6 +19,7 @@ public async Task Handle(CreateUserV1Command request, CancellationToken cancella } var passwordHash = argon.HashPassword(request.Password); + var user = new UserEntity { Username = request.Username.ToLower(), diff --git a/src/Pandatech.CleanArchitecture.Core/Entities/UserEntity.cs b/src/Pandatech.CleanArchitecture.Core/Entities/UserEntity.cs index 57759e5..4296a9a 100644 --- a/src/Pandatech.CleanArchitecture.Core/Entities/UserEntity.cs +++ b/src/Pandatech.CleanArchitecture.Core/Entities/UserEntity.cs @@ -1,3 +1,4 @@ +using Microsoft.EntityFrameworkCore; using Pandatech.CleanArchitecture.Core.EntityFilters; using Pandatech.CleanArchitecture.Core.Enums; using PandaTech.IEnumerableFilters.Attributes;