From 31e647d3e5fe78c17db6c2dd0306e197fbd0847c Mon Sep 17 00:00:00 2001 From: Developer 02 Date: Wed, 11 Dec 2024 12:53:45 +0100 Subject: [PATCH] =?UTF-8?q?feat(EnvelopeMailService):=20SendTFAQrCodeAsync?= =?UTF-8?q?=20als=20Schnittstellenimplementierung=20zum=20Senden=20von=20Q?= =?UTF-8?q?R-Code-E-Mails=20hinzugef=C3=BCgt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Contracts/IEnvelopeMailService.cs | 2 ++ .../Services/EnvelopeMailService.cs | 27 ++++++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/EnvelopeGenerator.Application/Contracts/IEnvelopeMailService.cs b/EnvelopeGenerator.Application/Contracts/IEnvelopeMailService.cs index 008bcdf8..14d94057 100644 --- a/EnvelopeGenerator.Application/Contracts/IEnvelopeMailService.cs +++ b/EnvelopeGenerator.Application/Contracts/IEnvelopeMailService.cs @@ -13,5 +13,7 @@ namespace EnvelopeGenerator.Application.Contracts Task> SendAsync(EnvelopeReceiverReadOnlyDto dto, Dictionary? optionalPlaceholders = null); Task> SendAccessCodeAsync(EnvelopeReceiverDto envelopeReceiverDto); + + Task> SendTFAQrCodeAsync(EnvelopeReceiverDto envelopeReceiverDto); } } \ No newline at end of file diff --git a/EnvelopeGenerator.Application/Services/EnvelopeMailService.cs b/EnvelopeGenerator.Application/Services/EnvelopeMailService.cs index e41fb12f..0763fb59 100644 --- a/EnvelopeGenerator.Application/Services/EnvelopeMailService.cs +++ b/EnvelopeGenerator.Application/Services/EnvelopeMailService.cs @@ -12,6 +12,8 @@ using static EnvelopeGenerator.Common.Constants; using EnvelopeGenerator.Extensions; using EnvelopeGenerator.Application.DTOs.EnvelopeReceiverReadOnly; using EnvelopeGenerator.Application.Configurations; +using EnvelopeGenerator.Application.Extensions; +using Newtonsoft.Json; namespace EnvelopeGenerator.Application.Services { @@ -22,14 +24,16 @@ namespace EnvelopeGenerator.Application.Services private readonly DispatcherConfig _dConfig; private readonly IConfigService _configService; private readonly Dictionary _placeholders; + private readonly ICodeGenerator _codeGenerator; - public EnvelopeMailService(IEmailOutRepository repository, IMapper mapper, IEmailTemplateService tempService, IEnvelopeReceiverService envelopeReceiverService, IOptions dispatcherConfigOptions, IConfigService configService, IOptions mailConfig) : base(repository, mapper) + public EnvelopeMailService(IEmailOutRepository repository, IMapper mapper, IEmailTemplateService tempService, IEnvelopeReceiverService envelopeReceiverService, IOptions dispatcherConfigOptions, IConfigService configService, IOptions mailConfig, ICodeGenerator codeGenerator) : base(repository, mapper) { _tempService = tempService; _envRcvService = envelopeReceiverService; _dConfig = dispatcherConfigOptions.Value; _configService = configService; _placeholders = mailConfig.Value.Placeholders; + _codeGenerator = codeGenerator; } private async Task> CreatePlaceholders(string? accessCode = null, EnvelopeReceiverDto? envelopeReceiverDto = null) @@ -63,9 +67,7 @@ namespace EnvelopeGenerator.Application.Services return _placeholders; } - - public async Task> SendAccessCodeAsync(EnvelopeReceiverDto dto) => await SendAsync(dto: dto, tempType: EmailTemplateType.DocumentAccessCodeReceived); - + public async Task> SendAsync(EnvelopeReceiverDto dto, EmailTemplateType tempType, Dictionary? optionalPlaceholders = null) { var tempSerResult = await _tempService.ReadByNameAsync(tempType); @@ -152,5 +154,22 @@ namespace EnvelopeGenerator.Application.Services return await CreateWithTemplateAsync(createDto: mail, placeholders: placeholders, dto.Envelope); } + + public async Task> SendAccessCodeAsync(EnvelopeReceiverDto dto) => await SendAsync(dto: dto, tempType: EmailTemplateType.DocumentAccessCodeReceived); + + public Task> SendTFAQrCodeAsync(EnvelopeReceiverDto dto) + { + // Check if receiver or secret key is null + if (dto.Receiver is null) + throw new ArgumentNullException(nameof(dto), $"TFA Qr Code cannot sent. Receiver information is missing. Envelope receiver dto is {JsonConvert.SerializeObject(dto)}"); + if (dto.Receiver.TotpSecretkey is null) + throw new ArgumentNullException(nameof(dto), $"TFA Qr Code cannot sent. Receiver.TotpSecretKey is null. Envelope receiver dto is {JsonConvert.SerializeObject(dto)}"); + + var totp_qr_64 = _codeGenerator.GenerateTotpQrCode(userEmail: dto.Receiver.EmailAddress, secretKey: dto.Receiver.TotpSecretkey).ToBase64String(); + return SendAsync(dto, EmailTemplateType.TotpSecret, new() + { + {"[TFA_QR_CODE]", totp_qr_64 } + }); + } } } \ No newline at end of file