using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Mirea.Api.Security.Common.Interfaces; using Mirea.Api.Security.Services; using System; namespace Mirea.Api.Security; public static class DependencyInjection { public static IServiceCollection AddSecurityServices(this IServiceCollection services, IConfiguration configuration) { var saltSize = int.Parse(configuration["SECURITY_SALT_SIZE"]!); var hashSize = int.Parse(configuration["SECURITY_HASH_SIZE"]!); var iteration = int.Parse(configuration["SECURITY_HASH_ITERATION"]!); var memory = int.Parse(configuration["SECURITY_HASH_MEMORY"]!); var parallelism = int.Parse(configuration["SECURITY_HASH_PARALLELISM"]!); services.AddSingleton(new PasswordHashService { SaltSize = saltSize, HashSize = hashSize, Iterations = iteration, Memory = memory, Parallelism = parallelism, Secret = configuration["SECURITY_HASH_TOKEN"] }); var lifeTimeLogin = TimeSpan.FromMinutes(int.Parse(configuration["SECURITY_LIFE_TIME_1_FA"]!)); services.AddSingleton(provider => { var cache = provider.GetRequiredService(); return new PreAuthService(cache) { Lifetime = lifeTimeLogin }; }); return services; } }