2024-05-29 04:09:10 +03:00
|
|
|
|
using Microsoft.Extensions.Configuration;
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
2024-05-29 04:34:00 +03:00
|
|
|
|
using Mirea.Api.Security.Common.Interfaces;
|
2024-05-29 04:11:04 +03:00
|
|
|
|
using Mirea.Api.Security.Services;
|
2024-05-29 04:34:00 +03:00
|
|
|
|
using System;
|
2024-05-29 04:09:10 +03:00
|
|
|
|
|
|
|
|
|
namespace Mirea.Api.Security;
|
|
|
|
|
|
|
|
|
|
public static class DependencyInjection
|
|
|
|
|
{
|
2024-05-29 04:11:04 +03:00
|
|
|
|
public static IServiceCollection AddSecurityServices(this IServiceCollection services, IConfiguration configuration)
|
2024-05-29 04:09:10 +03:00
|
|
|
|
{
|
|
|
|
|
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"]
|
|
|
|
|
});
|
|
|
|
|
|
2024-05-29 04:34:00 +03:00
|
|
|
|
var lifeTimeLogin = TimeSpan.FromMinutes(int.Parse(configuration["SECURITY_LIFE_TIME_1_FA"]!));
|
|
|
|
|
|
|
|
|
|
services.AddSingleton(provider =>
|
|
|
|
|
{
|
|
|
|
|
var cache = provider.GetRequiredService<ICacheService>();
|
|
|
|
|
|
|
|
|
|
return new PreAuthService(cache)
|
|
|
|
|
{
|
|
|
|
|
Lifetime = lifeTimeLogin
|
|
|
|
|
};
|
|
|
|
|
});
|
|
|
|
|
|
2024-05-29 04:09:10 +03:00
|
|
|
|
return services;
|
|
|
|
|
}
|
|
|
|
|
}
|