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" }); }
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" } ); }
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); }
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); }
public JwtUserEntity <TKey> UpdateRequestToUser(UpdateRequest request) { var user = new JwtUserEntity <TKey> { Email = request.Email, LanguageCode = request.LanguageCode }; return(user); }
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)); }
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); }
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); }
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); }