public async Task <User> Register(string username, string email, string password) { if (await EmailExists(email)) { Alertify.Push("Email address already exists", AlertType.Error); return(null); } if (await UsernameExists(username)) { Alertify.Push("Username already exists", AlertType.Error); return(null); } var passwordSalt = Utils.CreateSalt(); var saltedPasswordHash = Utils.GenerateHash(password, passwordSalt); var user = new UserBuilder() .SetUserData(username, email) .SetPassword(saltedPasswordHash, passwordSalt) .Build(); database.UserRepository.Add(user); if (await database.Complete()) { var registerToken = Token.Create(TokenType.Register); user.Tokens.Add(registerToken); if (await database.Complete()) { string encryptedToken = cryptoService.Encrypt(registerToken.Code); string callbackUrl = $"{Configuration.GetValue<string>(AppSettingsKeys.ServerAddress)}Auth/ConfirmAccount?email={user.Email}&token={encryptedToken}"; return(await emailSender.Send(Constants.ActivationAccountEmail(email, username, callbackUrl)) ? user : null); } return(null); } else { Alertify.Push("Creating account failed", AlertType.Error); return(null); } }
public async Task <IActionResult> OnPostAsync() { if (!ModelState.IsValid) { return(Page()); } if (await authValidationService.EmailExists(UserRegister.Email)) { ModelState.TryAddModelError(ErrorCodes.EmailExists, "Email address already exists"); return(Page()); } if (await authValidationService.UsernameExists(UserRegister.Username)) { ModelState.TryAddModelError(ErrorCodes.UsernameExists, "Username already exists"); return(Page()); } var authResult = await authService.SignUp(UserRegister.Email, UserRegister.Password, UserRegister.Username); if (authResult != null) { var emailSent = await emailSender.Send(Constants.ActivationAccountEmail(UserRegister.Email, $"{Configuration.GetValue<string>(AppSettingsKeys.ServerAddress)}Auth/ConfirmAccount?userId={authResult.User.Id}&code={authResult.Token}")); if (emailSent) { Alertify.Push($"Activation email was sent to: {UserRegister.Email}", AlertType.Info); return(Page()); } Alertify.Push("There was a problem during sending activation email", AlertType.Error); } return(Page()); }