feat: CodeGenerator-Service mit Konfigurationsunterstützung implementiert
- CodeGenerator-Service erstellt, der zufällige Codes basierend auf einem konfigurierbaren Zeichensatz generiert. - IOptions<CodeGeneratorConfig> für DI-Injektion der Konfigurationseinstellungen integriert. - Lazy-Initialisierung für statische Instanz des CodeGenerators hinzugefügt. - Validierung hinzugefügt, um sicherzustellen, dass die Code-Länge größer als null ist. - Geplante zukünftige Verbesserung: Random als Singleton injizieren, um die Multithreading-Performance zu verbessern.
This commit is contained in:
parent
b8d9963fac
commit
b11f32bd3c
@ -0,0 +1,7 @@
|
|||||||
|
namespace EnvelopeGenerator.Application.Configurations
|
||||||
|
{
|
||||||
|
public class CodeGeneratorConfig
|
||||||
|
{
|
||||||
|
public string CharPool { get; init; } = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
namespace EnvelopeGenerator.Application.Contracts
|
||||||
|
{
|
||||||
|
public interface ICodeGenerator
|
||||||
|
{
|
||||||
|
string GenerateCode(int length);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -15,7 +15,7 @@ namespace EnvelopeGenerator.Application
|
|||||||
{
|
{
|
||||||
public static class DIExtensions
|
public static class DIExtensions
|
||||||
{
|
{
|
||||||
public static IServiceCollection AddEnvelopeGenerator(this IServiceCollection services, IConfigurationSection dispatcherConfigSection, IConfigurationSection mailConfigSection, IConfigurationSection smsConfigSection)
|
public static IServiceCollection AddEnvelopeGenerator(this IServiceCollection services, IConfigurationSection dispatcherConfigSection, IConfigurationSection mailConfigSection, IConfigurationSection smsConfigSection, IConfigurationSection codeGeneratorConfigSection)
|
||||||
{
|
{
|
||||||
//Inject CRUD Service and repositoriesad
|
//Inject CRUD Service and repositoriesad
|
||||||
services.TryAddScoped<IConfigRepository, ConfigRepository>();
|
services.TryAddScoped<IConfigRepository, ConfigRepository>();
|
||||||
@ -48,6 +48,7 @@ namespace EnvelopeGenerator.Application
|
|||||||
services.TryAddScoped<IReceiverService, ReceiverService>();
|
services.TryAddScoped<IReceiverService, ReceiverService>();
|
||||||
services.TryAddScoped<IUserReceiverService, UserReceiverService>();
|
services.TryAddScoped<IUserReceiverService, UserReceiverService>();
|
||||||
services.TryAddScoped<IEnvelopeReceiverReadOnlyService, EnvelopeReceiverReadOnlyService>();
|
services.TryAddScoped<IEnvelopeReceiverReadOnlyService, EnvelopeReceiverReadOnlyService>();
|
||||||
|
services.TryAddScoped<ICodeGenerator, CodeGenerator>();
|
||||||
|
|
||||||
//Auto mapping profiles
|
//Auto mapping profiles
|
||||||
services.AddAutoMapper(typeof(BasicDtoMappingProfile).Assembly);
|
services.AddAutoMapper(typeof(BasicDtoMappingProfile).Assembly);
|
||||||
@ -55,6 +56,7 @@ namespace EnvelopeGenerator.Application
|
|||||||
|
|
||||||
services.Configure<DispatcherConfig>(dispatcherConfigSection);
|
services.Configure<DispatcherConfig>(dispatcherConfigSection);
|
||||||
services.Configure<MailConfig>(mailConfigSection);
|
services.Configure<MailConfig>(mailConfigSection);
|
||||||
|
services.Configure<CodeGeneratorConfig>(codeGeneratorConfigSection);
|
||||||
|
|
||||||
services.AddHttpClientService<SmsParams>(smsConfigSection);
|
services.AddHttpClientService<SmsParams>(smsConfigSection);
|
||||||
services.TryAddSingleton<IMessagingService, GtxMessagingService>();
|
services.TryAddSingleton<IMessagingService, GtxMessagingService>();
|
||||||
@ -65,6 +67,7 @@ namespace EnvelopeGenerator.Application
|
|||||||
public static IServiceCollection AddEnvelopeGenerator(this IServiceCollection services, IConfiguration config) => services.AddEnvelopeGenerator(
|
public static IServiceCollection AddEnvelopeGenerator(this IServiceCollection services, IConfiguration config) => services.AddEnvelopeGenerator(
|
||||||
dispatcherConfigSection: config.GetSection("DispatcherConfig"),
|
dispatcherConfigSection: config.GetSection("DispatcherConfig"),
|
||||||
mailConfigSection: config.GetSection("MailConfig"),
|
mailConfigSection: config.GetSection("MailConfig"),
|
||||||
smsConfigSection: config.GetSection("SmsConfig"));
|
smsConfigSection: config.GetSection("SmsConfig"),
|
||||||
|
codeGeneratorConfigSection: config.GetSection("CodeGeneratorConfig"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
37
EnvelopeGenerator.Application/Services/CodeGenerator.cs
Normal file
37
EnvelopeGenerator.Application/Services/CodeGenerator.cs
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
using EnvelopeGenerator.Application.Configurations;
|
||||||
|
using EnvelopeGenerator.Application.Contracts;
|
||||||
|
using Microsoft.Extensions.Options;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
|
namespace EnvelopeGenerator.Application.Services
|
||||||
|
{
|
||||||
|
public class CodeGenerator : ICodeGenerator
|
||||||
|
{
|
||||||
|
public static Lazy<CodeGenerator> LazyStatic => new(() => new CodeGenerator(Options.Create<CodeGeneratorConfig>(new())));
|
||||||
|
|
||||||
|
public static CodeGenerator Static => LazyStatic.Value;
|
||||||
|
|
||||||
|
private readonly string _charPool = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
||||||
|
|
||||||
|
public CodeGenerator(IOptions<CodeGeneratorConfig> options)
|
||||||
|
{
|
||||||
|
_charPool = options.Value.CharPool;
|
||||||
|
}
|
||||||
|
|
||||||
|
public string GenerateCode(int length)
|
||||||
|
{
|
||||||
|
//TODO: Inject Random as a singleton to support multithreading to improve performance.
|
||||||
|
Random random = new();
|
||||||
|
|
||||||
|
if (length <= 0)
|
||||||
|
throw new ArgumentException("Password length must be greater than 0.");
|
||||||
|
|
||||||
|
var passwordBuilder = new StringBuilder(length);
|
||||||
|
|
||||||
|
for (int i = 0; i < length; i++)
|
||||||
|
passwordBuilder.Append(_charPool[random.Next(_charPool.Length)]);
|
||||||
|
|
||||||
|
return passwordBuilder.ToString();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -192,6 +192,7 @@ namespace EnvelopeGenerator.Web.Controllers
|
|||||||
return View("EnvelopeLocked").WithData("ViaSms", true);
|
return View("EnvelopeLocked").WithData("ViaSms", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//continue the process without important data to minimize security errors.
|
||||||
var er = er_secret.WithoutSecrets;
|
var er = er_secret.WithoutSecrets;
|
||||||
|
|
||||||
ViewData["EnvelopeKey"] = envelopeReceiverId;
|
ViewData["EnvelopeKey"] = envelopeReceiverId;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user