Пример #1
0
        public void SendVerificationEmail(JwtUserEntity <TKey> account, string origin)
        {
            string message;

            if (!string.IsNullOrEmpty(origin))
            {
                var verifyUrl = $"{origin}/account/verify-email?token={account.VerificationToken}";
                message = $@"<p>Please click the below link to verify your email address:</p>
                             <p><a href=""{verifyUrl}"">{verifyUrl}</a></p>";
            }
            else
            {
                message = $@"<p>Please use the below token to verify your email address with the <code>/accounts/verify-email</code> API route:</p>
                             <p><code>{account.VerificationToken}</code></p>";
            }

            emailService.SendAsync(
                new SendModel
            {
                ToAddress   = account.Email,
                HtmlContent = $@"<h4>Verify Email</h4>
                         <p>Thanks for registering!</p>
                         {message}",
                Subject     = "Sign-up Verification API - Verify Email"
            });
        }
Пример #2
0
        public void SendPasswordResetEmail(JwtUserEntity <TKey> account, string origin)
        {
            string message;

            if (!string.IsNullOrEmpty(origin))
            {
                var resetUrl = $"{origin}/account/reset-password?token={account.ResetToken}";
                message = $@"<p>Please click the below link to reset your password, the link will be valid for 1 day:</p>
                             <p><a href=""{resetUrl}"">{resetUrl}</a></p>";
            }
            else
            {
                message = $@"<p>Please use the below token to reset your password with the <code>/accounts/reset-password</code> API route:</p>
                             <p><code>{account.ResetToken}</code></p>";
            }

            emailService.SendAsync(
                new SendModel
            {
                ToAddress   = account.Email,
                HtmlContent = $@"<h4>Reset Password Email</h4>
                         {message}",
                Subject     = "Sign-up Verification API - Reset Password"
            }
                );
        }
Пример #3
0
        public async Task <AccountResponse> CreateAsync(CreateRequest model)
        {
            // validate
            var jwtUserEntity = await jwtUserService.GetByEmailAsync(model.Email);

            if (jwtUserEntity != null)
            {
                throw new JwtAppException($"Email '{model.Email}' is already registered");
            }

            // map model to new account object
            JwtUserEntity <TKey> account = convertService.CreateRequestToUser(model);

            account.Created  = DateTime.UtcNow;
            account.Verified = DateTime.UtcNow;

            // hash password
            account.PasswordHash = passwordService.HashPassword(model.Password);

            // save account
            await jwtUserService.AddAsync(account);

            AccountResponse accountResponse = convertService.UserToAccountResponse(account);

            return(accountResponse);
        }
Пример #4
0
        public async Task RegisterAsync(RegisterRequest model, string origin)
        {
            // validate
            var user = await jwtUserService.GetByEmailAsync(model.Email);

            if (user != null)
            {
                // send already registered error in email to prevent account enumeration
                emailSenderService.SendAlreadyRegisteredEmail(model.Email, origin);
                return;
            }

            // map model to new account object
            JwtUserEntity <TKey> account = convertService.RegisterRequestToUser(model);

            account.Role              = Role.User;
            account.Created           = DateTime.UtcNow;
            account.VerificationToken = tokenService.RandomTokenString();

            // hash password
            account.PasswordHash = passwordService.HashPassword(model.Password);

            // save account
            await jwtUserService.AddAsync(account);

            // send email
            emailSenderService.SendVerificationEmail(account, origin);
        }
Пример #5
0
        public JwtUserEntity <TKey> UpdateRequestToUser(UpdateRequest request)
        {
            var user = new JwtUserEntity <TKey>
            {
                Email        = request.Email,
                LanguageCode = request.LanguageCode
            };

            return(user);
        }
Пример #6
0
        public string GenerateJwtToken(JwtUserEntity <TKey> account)
        {
            var tokenHandler    = new JwtSecurityTokenHandler();
            var key             = Encoding.ASCII.GetBytes(appSettings.Secret);
            var tokenDescriptor = new SecurityTokenDescriptor
            {
                Subject            = new ClaimsIdentity(new[] { new Claim("id", account.Id.ToString()) }),
                Expires            = DateTime.UtcNow.AddMinutes(15),
                SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
            };
            var token = tokenHandler.CreateToken(tokenDescriptor);

            return(tokenHandler.WriteToken(token));
        }
Пример #7
0
        public AccountResponse UserToAccountResponse(JwtUserEntity <TKey> user)
        {
            var response = new AccountResponse
            {
                Id           = keyService.GetKeyString(user.Id),
                Email        = user.Email,
                LanguageCode = user.LanguageCode,
                Created      = user.Created,
                IsVerified   = user.IsVerified,
                Updated      = user.Updated,
                Role         = Enum.GetName(typeof(Role), user.Role)
            };

            return(response);
        }
Пример #8
0
        public AuthenticateResponse UserToAuthenticateResponse(JwtUserEntity <TKey> user)
        {
            var response = new AuthenticateResponse
            {
                Id           = keyService.GetKeyString(user.Id),
                Email        = user.Email,
                LanguageCode = user.LanguageCode,
                Created      = user.Created,
                IsVerified   = user.IsVerified,
                Updated      = user.Updated,
                Role         = Enum.GetName(typeof(Role), user.Role),
                RefreshToken = user.RefreshTokens.OrderByDescending(d => d.Created).FirstOrDefault(b => b.IsActive).Token
            };

            return(response);
        }
Пример #9
0
        public override async Task AddAsync(JwtUserEntity <TKey> value)
        {
            if (value == null)
            {
                throw new AqnklaNullException();
            }

            await aqnklaUserService.AddAsync(new Domain.User.Entity.AqnklaUserEntity <TKey>
            {
                UserUniqueName = value.Email
            }).ConfigureAwait(false);

            var domainUser = await aqnklaUserService.GetUserAsync(value.Email).ConfigureAwait(false);

            value.AqnklaUserId = domainUser.Id;
            await base.AddAsync(value).ConfigureAwait(false);
        }