/// <inheritdoc /> public async Task <ConfirmVerificationCodeResultModel> ConfirmCodeAsync(string verificationCode) { if (string.IsNullOrEmpty(verificationCode)) { throw new ArgumentNullException(nameof(verificationCode)); } string verificationCodeValue; try { verificationCodeValue = verificationCode.Base64ToString(); } catch (FormatException) { _log.Warning($"Verification code {verificationCode} format error (must be base64 string)"); return(new ConfirmVerificationCodeResultModel { IsVerified = false, Error = VerificationCodeError.VerificationCodeDoesNotExist }); } var existingEntity = await _emailVerificationCodeRepository.GetByValueAsync(verificationCodeValue); if (existingEntity == null) { _log.Warning($"Verification code {verificationCodeValue} not found in the system"); return(new ConfirmVerificationCodeResultModel { Error = VerificationCodeError.VerificationCodeDoesNotExist }); } if (existingEntity.IsVerified) { _log.Info($"Verification code {verificationCodeValue} already verified when trying to confirm"); return(new ConfirmVerificationCodeResultModel { Error = VerificationCodeError.AlreadyVerified, IsVerified = true }); } if (verificationCodeValue != existingEntity.VerificationCode) { _log.Warning($"VerificationCode {verificationCodeValue} does not match the stored verification code"); return(new ConfirmVerificationCodeResultModel { Error = VerificationCodeError.VerificationCodeMismatch }); } if (existingEntity.ExpireDate < DateTime.UtcNow) { _log.Warning($"VerificationCode {verificationCodeValue} has expired"); return(new ConfirmVerificationCodeResultModel { Error = VerificationCodeError.VerificationCodeExpired }); } await Task.WhenAll(_emailVerificationCodeRepository.SetAsVerifiedAsync(verificationCodeValue)) .ContinueWith(_ => _codeVerifiedEventPublisher.PublishAsync(new AdminEmailVerifiedEvent { AdminId = existingEntity.AdminId, TimeStamp = DateTime.UtcNow })); var admin = await _adminUserService.GetByIdAsync(existingEntity.AdminId); var partnersPermissions = admin.Profile.Permissions.FirstOrDefault(x => x.Type == PartnerPermissionsName); //check if it is program partner if (partnersPermissions != null && partnersPermissions.Level == PermissionLevel.PartnerEdit) { await _notificationsService.NotifyPartnerAdminWelcomeAsync(admin.Profile.AdminUserId, admin.Profile.Email); } return(new ConfirmVerificationCodeResultModel { IsVerified = true }); }
/// <inheritdoc /> public async Task <ConfirmVerificationCodeResultModel> ConfirmCodeAsync(string verificationCode) { if (string.IsNullOrEmpty(verificationCode)) { throw new ArgumentNullException(nameof(verificationCode)); } string verificationCodeValue; try { verificationCodeValue = verificationCode.Base64ToString(); } catch (FormatException) { _log.Warning($"Verification code {verificationCode} format error (must be base64 string)"); return(new ConfirmVerificationCodeResultModel { IsVerified = false, Error = VerificationCodeError.VerificationCodeDoesNotExist }); } var existingEntity = await _emailVerificationCodeRepository.GetByValueAsync(verificationCodeValue); if (existingEntity == null) { _log.Warning($"Verification code {verificationCodeValue} not found in the system"); return(new ConfirmVerificationCodeResultModel { Error = VerificationCodeError.VerificationCodeDoesNotExist }); } if (existingEntity.IsVerified) { _log.Info($"Verification code {verificationCodeValue} already verified when trying to confirm"); return(new ConfirmVerificationCodeResultModel { Error = VerificationCodeError.AlreadyVerified, IsVerified = true }); } if (verificationCodeValue != existingEntity.VerificationCode) { _log.Warning($"VerificationCode {verificationCodeValue} does not match the stored verification code"); return(new ConfirmVerificationCodeResultModel { Error = VerificationCodeError.VerificationCodeMismatch }); } if (existingEntity.ExpireDate < DateTime.UtcNow) { _log.Warning($"VerificationCode {verificationCodeValue} has expired"); return(new ConfirmVerificationCodeResultModel { Error = VerificationCodeError.VerificationCodeExpired }); } await Task.WhenAll(_emailVerificationCodeRepository.SetAsVerifiedAsync(verificationCodeValue)) .ContinueWith(_ => _codeVerifiedEventPublisher.PublishAsync(new AdminEmailVerifiedEvent { AdminId = existingEntity.AdminId, TimeStamp = DateTime.UtcNow })); return(new ConfirmVerificationCodeResultModel { IsVerified = true }); }
/// <inheritdoc /> public async Task <ConfirmVerificationCodeResultModel> ConfirmCodeAsync(string verificationCode) { if (string.IsNullOrEmpty(verificationCode)) { throw new ArgumentNullException(nameof(verificationCode)); } string verificationCodeValue; try { verificationCodeValue = verificationCode.Base64ToString(); } catch (FormatException) { _log.Warning($"Verification code {verificationCode} format error (must be base64 string)"); return(new ConfirmVerificationCodeResultModel { IsVerified = false, Error = VerificationCodeError.VerificationCodeDoesNotExist }); } var existingEntity = await _emailVerificationCodeRepository.GetByValueAsync(verificationCodeValue); if (existingEntity == null) { _log.Warning($"Verification code {verificationCodeValue} not found in the system"); return(new ConfirmVerificationCodeResultModel { Error = VerificationCodeError.VerificationCodeDoesNotExist }); } if (existingEntity.IsVerified) { _log.Info($"Verification code {verificationCodeValue} already verified when trying to confirm"); return(new ConfirmVerificationCodeResultModel { Error = VerificationCodeError.AlreadyVerified, IsVerified = true }); } if (verificationCodeValue != existingEntity.VerificationCode) { _log.Warning($"VerificationCode {verificationCodeValue} does not match the stored verification code"); return(new ConfirmVerificationCodeResultModel { Error = VerificationCodeError.VerificationCodeMismatch }); } if (existingEntity.ExpireDate < DateTime.UtcNow) { _log.Warning($"VerificationCode {verificationCodeValue} has expired"); return(new ConfirmVerificationCodeResultModel { Error = VerificationCodeError.VerificationCodeExpired }); } await Task.WhenAll( _emailVerificationCodeRepository.SetAsVerifiedAsync(verificationCodeValue), _callRateLimiterService.ClearAllCallRecordsForEmailVerificationAsync(existingEntity.CustomerId)) .ContinueWith(_ => _codeVerifiedEventPublisher.PublishAsync(new EmailCodeVerifiedEvent { CustomerId = existingEntity.CustomerId, TimeStamp = DateTime.UtcNow })); await _emailEventPublisher.PublishAsync(new EmailMessageEvent { CustomerId = existingEntity.CustomerId, MessageTemplateId = _verificationThankYouEmailTemplateId, SubjectTemplateId = _verificationThankYouEmailSubjectTemplateId, TemplateParameters = new Dictionary <string, string>(), Source = $"{AppEnvironment.Name} - {AppEnvironment.Version}" }); _log.Info(message: "Successfully generated Verification Thank You Email for customer", context: existingEntity.CustomerId); return(new ConfirmVerificationCodeResultModel { IsVerified = true }); }