Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
namespace LearningHub.Nhs.OpenApi.Services.Services
{
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
Expand All @@ -11,6 +12,7 @@
using LearningHub.Nhs.Models.Email.Models;
using LearningHub.Nhs.Models.Entities;
using LearningHub.Nhs.Models.Enums;
using LearningHub.Nhs.Models.GovNotifyMessaging;
using LearningHub.Nhs.OpenApi.Models.Configuration;
using LearningHub.Nhs.OpenApi.Repositories.Interface.Repositories;
using LearningHub.Nhs.OpenApi.Services.Interface.Services;
Expand All @@ -28,21 +30,33 @@ public class SecurityService : ISecurityService
private readonly IEmailChangeValidationTokenRepository emailChangeValidationTokenRepository;
private readonly IEmailSenderService emailSenderService;
private readonly LearningHubConfig learningHubConfig;
private readonly IGovMessageService govMessageService;
private readonly IEmailTemplateService emailTemplateService;
private readonly IUserProfileRepository userProfileRepository;

/// <summary>
/// Initializes a new instance of the <see cref="SecurityService"/> class.
/// </summary>
/// <param name="emailChangeValidationTokenRepository">emailChangeValidationTokenRepository.</param>
/// <param name="emailSenderService">emailSenderService.</param>
/// <param name="settings">settings.</param>
/// <param name="govMessageService">govMessageService.</param>
/// <param name="emailTemplateService">emailTemplateService.</param>
/// <param name="userProfileRepository">userProfileRepository.</param>
public SecurityService(
IEmailChangeValidationTokenRepository emailChangeValidationTokenRepository,
IEmailSenderService emailSenderService,
IOptions<LearningHubConfig> learningHubConfig)
IOptions<LearningHubConfig> learningHubConfig,
IGovMessageService govMessageService,
IEmailTemplateService emailTemplateService,
IUserProfileRepository userProfileRepository)
{
this.emailChangeValidationTokenRepository = emailChangeValidationTokenRepository;
this.emailSenderService = emailSenderService;
this.learningHubConfig = learningHubConfig.Value;
this.govMessageService = govMessageService;
this.emailTemplateService = emailTemplateService;
this.userProfileRepository = userProfileRepository;
}

/// <summary>
Expand Down Expand Up @@ -74,7 +88,24 @@ public async Task GenerateEmailChangeValidationTokenAndSendEmail(int userId, str
};

var validateTokenUrl = $"{this.learningHubConfig.BaseUrl}confirm-email?token={HttpUtility.UrlEncode(userToken)}&loctoken={HttpUtility.UrlEncode(lookupToken)}";
await SendEmailChangeConfirmationEmail(userId, email, validateTokenUrl, isUserRoleUpgrade);
var user = await this.userProfileRepository.GetByIdAsync(userId);
var emailTemplate = this.emailTemplateService.GetEmailTemplateById((int)EmailTemplates.EmailChangeConfirmationEmail);
var personalisation = new Dictionary<string, dynamic>();
personalisation["user name"] = user.UserName;
personalisation["confirm_email_link"] = validateTokenUrl;
personalisation["date"] = emailChangeValidationToken.Expiry.ToString("dd-MM-yyyy");
personalisation["time"] = emailChangeValidationToken.Expiry.ToString("HH:mm");

var emailRequest = new EmailRequest
{
Recipient = email,
TemplateId = emailTemplate.TemplateId,
Personalisation = personalisation,
};

await this.govMessageService.SendEmailAsync(emailRequest);

////await SendEmailChangeConfirmationEmail(userId, email, validateTokenUrl, isUserRoleUpgrade);
await emailChangeValidationTokenRepository.CreateAsync(userId, emailChangeValidationToken);
}

Expand Down Expand Up @@ -127,7 +158,21 @@ public async Task<EmailChangeValidationTokenResult> ValidateEmailChangeTokenAsyn
tokenResult.Email = emailChangeValidationToken.Email;
tokenResult.UserId = emailChangeValidationToken.UserId;
tokenResult.Valid = true;
await this.SendEmailAfterEmailVerification(emailChangeValidationToken.UserId, emailChangeValidationToken.Email, isUserRoleUpgrade);

var emailTemplate = this.emailTemplateService.GetEmailTemplateById((int)EmailTemplates.EmailVerified);
var personalisation = new Dictionary<string, dynamic>();
personalisation["user name"] = emailChangeValidationToken.User.UserName;

var emailRequest = new EmailRequest
{
Recipient = emailChangeValidationToken.Email,
TemplateId = emailTemplate.TemplateId,
Personalisation = personalisation,
};

await this.govMessageService.SendEmailAsync(emailRequest);

////await this.SendEmailAfterEmailVerification(emailChangeValidationToken.UserId, emailChangeValidationToken.Email, isUserRoleUpgrade);
}
}

Expand Down
Loading