Fixes
This commit is contained in:
@@ -5,21 +5,66 @@ namespace AipsCore.Infrastructure.DI.Configuration;
|
||||
public static class ConfigurationEnvExtensions
|
||||
{
|
||||
private const string DbConnStringKey = "DB_CONN_STRING";
|
||||
|
||||
private const string JwtIssuer = "JWT_ISSUER";
|
||||
private const string JwtAudience = "JWT_AUDIENCE";
|
||||
private const string JwtKey = "JWT_KEY";
|
||||
private const string JwtExpirationMinutes = "JWT_EXPIRATION_MINUTES";
|
||||
|
||||
public static string GetEnvConnectionString(this IConfiguration configuration)
|
||||
extension(IConfiguration configuration)
|
||||
{
|
||||
return configuration.GetEnvForSure(DbConnStringKey);
|
||||
}
|
||||
|
||||
private static string GetEnvForSure(this IConfiguration configuration, string key)
|
||||
{
|
||||
var value = configuration[key];
|
||||
|
||||
if (value is null)
|
||||
public string GetEnvConnectionString()
|
||||
{
|
||||
throw new ConfigurationException(key);
|
||||
return configuration.GetEnvForSure(DbConnStringKey);
|
||||
}
|
||||
|
||||
public string GetEnvJwtIssuer()
|
||||
{
|
||||
return configuration.GetEnvForSure(JwtIssuer);
|
||||
}
|
||||
|
||||
public string GetEnvJwtAudience()
|
||||
{
|
||||
return configuration.GetEnvForSure(JwtAudience);
|
||||
}
|
||||
|
||||
public string GetEnvJwtKey()
|
||||
{
|
||||
return configuration.GetEnvForSure(JwtKey);
|
||||
}
|
||||
|
||||
public int GetEnvJwtExpirationMinutes()
|
||||
{
|
||||
return configuration.GetEnvInt(configuration.GetEnvOrDefault(JwtExpirationMinutes, "60"));
|
||||
}
|
||||
|
||||
private string GetEnvForSure(string key)
|
||||
{
|
||||
var value = configuration[key];
|
||||
|
||||
if (value is null)
|
||||
{
|
||||
throw new ConfigurationException(key);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
|
||||
return value;
|
||||
private string GetEnvOrDefault(string key, string defaultValue)
|
||||
{
|
||||
return configuration.GetValue(key, defaultValue);
|
||||
}
|
||||
|
||||
private int GetEnvInt(string value)
|
||||
{
|
||||
if (int.TryParse(value, out var result))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
else
|
||||
{
|
||||
throw new ConfigurationException($"Value '{value}' is not a valid integer.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
16
dotnet/AipsCore/Infrastructure/DI/StartupExtensions.cs
Normal file
16
dotnet/AipsCore/Infrastructure/DI/StartupExtensions.cs
Normal file
@@ -0,0 +1,16 @@
|
||||
using AipsCore.Infrastructure.Persistence.Db;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
namespace AipsCore.Infrastructure.DI;
|
||||
|
||||
public static class StartupExtensions
|
||||
{
|
||||
public static async Task InitializeInfrastructureAsync(this IServiceProvider services)
|
||||
{
|
||||
using var scope = services.CreateScope();
|
||||
|
||||
var serviceProvider = scope.ServiceProvider;
|
||||
|
||||
await DbInitializer.SeedRolesAsync(serviceProvider);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,8 @@
|
||||
using System.Text;
|
||||
using AipsCore.Application.Abstract.UserContext;
|
||||
using AipsCore.Application.Common.Authentication;
|
||||
using AipsCore.Domain.Models.User.Options;
|
||||
using AipsCore.Infrastructure.DI.Configuration;
|
||||
using AipsCore.Infrastructure.Persistence.Authentication;
|
||||
using AipsCore.Infrastructure.Persistence.Db;
|
||||
using AipsCore.Infrastructure.Persistence.User;
|
||||
@@ -17,10 +20,10 @@ public static class UserContextRegistrationExtension
|
||||
{
|
||||
var jwtSettings = new JwtSettings
|
||||
{
|
||||
Issuer = configuration["JWT_ISSUER"]!,
|
||||
Audience = configuration["JWT_AUDIENCE"]!,
|
||||
Key = configuration["JWT_KEY"]!,
|
||||
ExpirationMinutes = int.Parse(configuration["JWT_EXPIRATION_MINUTES"] ?? "60")
|
||||
Issuer = configuration.GetEnvJwtIssuer(),
|
||||
Audience = configuration.GetEnvJwtAudience(),
|
||||
Key = configuration.GetEnvJwtKey(),
|
||||
ExpirationMinutes = configuration.GetEnvJwtExpirationMinutes()
|
||||
};
|
||||
|
||||
services.AddSingleton(jwtSettings);
|
||||
@@ -29,13 +32,13 @@ public static class UserContextRegistrationExtension
|
||||
|
||||
services.AddIdentityCore<User>(options =>
|
||||
{
|
||||
options.Password.RequiredLength = 8;
|
||||
options.Password.RequireDigit = true;
|
||||
options.Password.RequireLowercase = true;
|
||||
options.Password.RequireUppercase = true;
|
||||
options.Password.RequireNonAlphanumeric = true;
|
||||
options.Password.RequiredLength = UserOptionsDefaults.PasswordRequiredLength;
|
||||
options.Password.RequireDigit = UserOptionsDefaults.PasswordRequireDigit;
|
||||
options.Password.RequireLowercase = UserOptionsDefaults.PasswordRequireLowercase;
|
||||
options.Password.RequireUppercase = UserOptionsDefaults.PasswordRequireUppercase;
|
||||
options.Password.RequireNonAlphanumeric = UserOptionsDefaults.PasswordRequireNonAlphanumeric;
|
||||
|
||||
options.User.RequireUniqueEmail = true;
|
||||
options.User.RequireUniqueEmail = UserOptionsDefaults.UserRequireUniqueEmail;
|
||||
})
|
||||
.AddRoles<IdentityRole<Guid>>()
|
||||
.AddEntityFrameworkStores<AipsDbContext>()
|
||||
@@ -62,6 +65,7 @@ public static class UserContextRegistrationExtension
|
||||
|
||||
services.AddTransient<IUserContext, HttpUserContext>();
|
||||
services.AddTransient<ITokenProvider, JwtTokenProvider>();
|
||||
services.AddTransient<IAuthService, EfAuthService>();
|
||||
|
||||
return services;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user