コード例 #1
0
        public static async Task CreateNewResetPasswordAsync(
            string email,
            string requesterAddress,
            IRepositoryManager repositoryManager,
            SmtpSettings smtpSettings,
            EmailSettings emailSettings)
        {
            var(exists, user) = await CheckUserExistsWithEmailAsync(email, repositoryManager.UserRepository)
                                .ConfigureAwait(false);

            if (exists)
            {
                try
                {
                    var emailService               = new EmailService();
                    var resetIdentifier            = ModelHelpers.GenerateUniqueIdentifier(IdentifierConsts.UserIdentifierLength);
                    var hashedResetIdentifier      = HashingHelper.HashIdentifier(resetIdentifier);
                    var encryptedUserId            = EncryptionService.EncryptString(user.Id.ToString());
                    var encryptedIdentifier        = EncryptionService.EncryptString(resetIdentifier);
                    var encodedEncryptedIdentifier = System.Web.HttpUtility.UrlEncode(encryptedIdentifier);

                    var passwordReset = new PasswordReset
                    {
                        Identifier       = hashedResetIdentifier,
                        UserId           = encryptedUserId,
                        ExpiryDate       = DateTime.Now.AddHours(1),
                        RequesterAddress = requesterAddress
                    };
                    var verificationViewModel = new LinkEmailViewModel
                    {
                        FullName  = $"{user.FirstName} {user.LastName}",
                        UrlDomain = emailSettings.PrimaryRedirectDomain,
                        Link      = encodedEncryptedIdentifier
                    };

                    await repositoryManager.PasswordResetRepository.AddAsync(passwordReset);

                    var verificationMessage = emailService.CreateHtmlMessage(
                        smtpSettings,
                        $"{user.FirstName} {user.LastName}",
                        user.Email,
                        "Reset Your Password",
                        EmailCreationHelper.CreatePasswordResetEmailString(verificationViewModel));

                    await emailService.SendEmailAsync(smtpSettings, verificationMessage);
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }
コード例 #2
0
        private static string CreateLinkEmailString(string htmlFile, LinkEmailViewModel linkEmailViewModel)
        {
            var htmlString          = FetchEmailTemplateString(htmlFile);
            var formattedHtmlString = FormatHtmlString(
                htmlString,
                linkEmailViewModel.FullName,
                linkEmailViewModel.UrlDomain,
                linkEmailViewModel.Link);

            var templateBaseHtmlString = FetchEmailTemplateString("TemplateBase");
            var completeHtmlString     = FormatHtmlString(
                templateBaseHtmlString,
                formattedHtmlString);

            return(completeHtmlString);
        }
コード例 #3
0
        public static async Task CreateNewVerficationAsync(
            string email,
            string requesterAddress,
            IRepositoryManager repositoryManager,
            SmtpSettings smtpSettings,
            EmailSettings emailSettings,
            bool isFirstContact = false
            )
        {
            var(exists, user) = await CheckUserExistsWithEmailAsync(email, repositoryManager.UserRepository)
                                .ConfigureAwait(false);

            if (exists)
            {
                if (user.IsVerified)
                {
                    throw new UserAlreadyVerifiedException("User has already been verified", "User has already been verified");
                }

                try
                {
                    if (!isFirstContact)
                    {
                        await DeactivateExistingUserVerificationsAsync(user.Id, repositoryManager.UserVerificationRepository)
                        .ConfigureAwait(false);
                    }
                    var emailService                 = new EmailService();
                    var verificationIdentifier       = ModelHelpers.GenerateUniqueIdentifier(IdentifierConsts.UserIdentifierLength);
                    var hashedVerificationIdentifier = HashingHelper.HashIdentifier(verificationIdentifier);

                    var verification = new UserVerification
                    {
                        Identifier       = hashedVerificationIdentifier,
                        UserId           = user.Id,
                        ExpiryDate       = DateTime.Now.AddDays(7),
                        RequesterAddress = requesterAddress
                    };
                    var verificationViewModel = new LinkEmailViewModel
                    {
                        FullName  = $"{user.FirstName} {user.LastName}",
                        UrlDomain = emailSettings.PrimaryRedirectDomain,
                        Link      = verificationIdentifier
                    };

                    await repositoryManager.UserVerificationRepository.AddAsync(verification);

                    var verificationMessage = emailService.CreateHtmlMessage(
                        smtpSettings,
                        $"{user.FirstName} {user.LastName}",
                        user.Email,
                        isFirstContact ? "Welcome to Shufl" : "Verify Your Account",
                        isFirstContact ?
                        EmailCreationHelper.CreateWelcomeVerificationEmailString(verificationViewModel) :
                        EmailCreationHelper.CreateVerificationEmailString(verificationViewModel));

                    await emailService.SendEmailAsync(smtpSettings, verificationMessage);
                }
                catch (Exception)
                {
                    throw;
                }
            }
        }
コード例 #4
0
 public static string CreatePasswordResetEmailString(LinkEmailViewModel passwordResetViewModel)
 {
     return(CreateLinkEmailString("UserPasswordReset", passwordResetViewModel));
 }
コード例 #5
0
 public static string CreateVerificationEmailString(LinkEmailViewModel verificationViewModel)
 {
     return(CreateLinkEmailString("UserVerification", verificationViewModel));
 }
コード例 #6
0
 public static string CreateWelcomeVerificationEmailString(LinkEmailViewModel welcomeVerificationViewModel)
 {
     return(CreateLinkEmailString("UserWelcomeVerification", welcomeVerificationViewModel));
 }