public async Task <User> Register(string email, string password) { var isPasswordValid = _hasNumber.IsMatch(password) && _hasUpperChar.IsMatch(password) && _hasMinimum8Chars.IsMatch(password); if (!isPasswordValid) { throw ExceptionFactory.SoftException(ExceptionEnum.PasswordNotValid, $"Password need to follow:\n\tMinimum 8 char\n\tHave at least one number\n\tHave upper char"); } if (!_emailRegex.IsMatch(email)) { throw ExceptionFactory.SoftException(ExceptionEnum.EmailFormatInvalid, $"Email {email} have wrong format"); } if (_publicContext.User.FirstOrDefault(x => x.Email == email) != null) { throw ExceptionFactory.SoftException(ExceptionEnum.UserAlreadyExist, $"User with email {email} already exist"); } var confirmToken = new UserConfirmationToken() { ConfirmEmail = email, ConfirmId = Guid.NewGuid(), IsActive = true, }; if (!await SendConfirmEmail(email, confirmToken.ConfirmId.ToString())) { throw ExceptionFactory.SoftException(ExceptionEnum.CantSendEmail, $"Can't send confirmation email. Try later"); } User userModel = new User() { Email = email, UserSecurity = new UserSecurity() { Password = _passwordHasherService.Hash(password), Role = await _publicContext.Role.FirstOrDefaultAsync(x => x.RoleName == "PreMember"), IsConfirmed = false, UserConfirmationTokens = new List <UserConfirmationToken>() { confirmToken, }, }, }; await _publicContext.User.AddAsync(userModel); await _publicContext.SaveChangesAsync(); return(userModel); }
public async Task <HttpResponseMessage> Post(CreateUser model) { if (!ModelState.IsValid) { return(Request.CreateErrorResponse( HttpStatusCode.BadRequest, ModelState)); } var email = model.Email.ToLower(CultureInfo.CurrentCulture); var requiresActivation = !IsDebuggingEnabled; try { var token = await membershipService.Signup( email, model.Password, UserRoles.User, requiresActivation); if (requiresActivation) { var userConfirmationToken = new UserConfirmationToken { Email = email, Token = token }; var securedToken = urlSafeSecureDataSerializer.Serialize( userConfirmationToken); await mailer.UserConfirmationAsync(email, securedToken); } else { await newUserConfirmedHandler.Handle(email); } return(Request.CreateResponse(HttpStatusCode.NoContent)); } catch (IdentityException e) { ModelState.AddModelError(string.Empty, e); return(Request.CreateErrorResponse( HttpStatusCode.BadRequest, ModelState)); } }
public async Task <string> AddUserConfirmationTokenAsync(Guid userId, DateTime expirationDate) { await using var context = ContextFactory.CreateDataContext(null); var items = context.UserConfirmationTokens; var entity = new UserConfirmationToken() { Id = Guid.NewGuid(), UserId = userId, ExpirationTimeStamp = expirationDate, Token = Guid.NewGuid().ToString(), IsUsed = false }; await items.AddAsync(entity).ConfigureAwait(false); await context.SaveChangesAsync().ConfigureAwait(false); return(entity.Token); }
public async Task <HttpResponseMessage> Post(CreateUser model) { if (!ModelState.IsValid) { return(Request.CreateErrorResponse( HttpStatusCode.BadRequest, ModelState)); } var statusCode = MembershipCreateStatus.Success; var userName = model.Email.ToLowerInvariant(); var token = string.Empty; var requireConfirmation = !IsDebuggingEnabled; try { token = signup(userName, model.Password, requireConfirmation); } catch (MembershipCreateUserException e) { statusCode = e.StatusCode; } if (statusCode == MembershipCreateStatus.Success) { if (requireConfirmation) { var userConfirmationToken = new UserConfirmationToken { Email = userName, Token = token }; var securedToken = urlSafeSecureDataSerializer.Serialize( userConfirmationToken); await mailer.UserConfirmationAsync(userName, securedToken); } else { seedDataLoader.Load(userName); } return(Request.CreateResponse(HttpStatusCode.NoContent)); } switch (statusCode) { case MembershipCreateStatus.DuplicateUserName: case MembershipCreateStatus.DuplicateEmail: case MembershipCreateStatus.DuplicateProviderUserKey: ModelState.AddModelError( "email", "User with same email already exits."); break; case MembershipCreateStatus.InvalidUserName: case MembershipCreateStatus.InvalidEmail: ModelState.AddModelError( "email", "Invalid email address."); break; case MembershipCreateStatus.InvalidPassword: ModelState.AddModelError("password", "Invalid password."); break; default: ModelState.AddModelError( string.Empty, "Unexpected error."); break; } return(Request.CreateErrorResponse( HttpStatusCode.BadRequest, ModelState)); }
public async Task<HttpResponseMessage> Post(CreateUser model) { if (!ModelState.IsValid) { return Request.CreateErrorResponse( HttpStatusCode.BadRequest, ModelState); } var email = model.Email.ToLower(CultureInfo.CurrentCulture); var requiresActivation = !IsDebuggingEnabled; try { var token = await membershipService.Signup( email, model.Password, UserRoles.User, requiresActivation); if (requiresActivation) { var userConfirmationToken = new UserConfirmationToken { Email = email, Token = token }; var securedToken = urlSafeSecureDataSerializer.Serialize( userConfirmationToken); await mailer.UserConfirmationAsync(email, securedToken); } else { await newUserConfirmedHandler.Handle(email); } return Request.CreateResponse(HttpStatusCode.NoContent); } catch (IdentityException e) { ModelState.AddModelError(string.Empty, e); return Request.CreateErrorResponse( HttpStatusCode.BadRequest, ModelState); } }
public async Task<HttpResponseMessage> Post(CreateUser model) { if (!ModelState.IsValid) { return Request.CreateErrorResponse( HttpStatusCode.BadRequest, ModelState); } var statusCode = MembershipCreateStatus.Success; var userName = model.Email.ToLowerInvariant(); var token = string.Empty; var requireConfirmation = !IsDebuggingEnabled; try { token = signup(userName, model.Password, requireConfirmation); } catch (MembershipCreateUserException e) { statusCode = e.StatusCode; } if (statusCode == MembershipCreateStatus.Success) { if (requireConfirmation) { var userConfirmationToken = new UserConfirmationToken { Email = userName, Token = token }; var securedToken = urlSafeSecureDataSerializer.Serialize( userConfirmationToken); await mailer.UserConfirmationAsync(userName, securedToken); } else { seedDataLoader.Load(userName); } return Request.CreateResponse(HttpStatusCode.NoContent); } switch (statusCode) { case MembershipCreateStatus.DuplicateUserName: case MembershipCreateStatus.DuplicateEmail: case MembershipCreateStatus.DuplicateProviderUserKey: ModelState.AddModelError( "email", "User with same email already exits."); break; case MembershipCreateStatus.InvalidUserName: case MembershipCreateStatus.InvalidEmail: ModelState.AddModelError( "email", "Invalid email address."); break; case MembershipCreateStatus.InvalidPassword: ModelState.AddModelError("password", "Invalid password."); break; default: ModelState.AddModelError( string.Empty, "Unexpected error."); break; } return Request.CreateErrorResponse( HttpStatusCode.BadRequest, ModelState); }