public void CreateUser(UserWriteDbo login) { using (var connection = GetConnection()) { connection.Insert("User", login); } }
public void CreateUser(UserWriteDbo login) { _pk++; _dbo.Add(new UserReadDbo { CreatedAt = login.CreatedAt, Id = _pk, Nonce = login.Nonce, UserName = login.UserName, Password = login.Password }); }
public IActionResult Post(LoginRequest request) { if (string.IsNullOrEmpty(request.UserName)) { return(Error.BadRequest("User name is required")); } if (request.UserName.Length > Max.UserName) { return(Error.BadRequest("User name is too long")); } if (string.IsNullOrEmpty(request.Password)) { return(Error.BadRequest("Password is required")); } if (request.Password.Length > Max.Password) { return(Error.BadRequest("Password is too long")); } if (request.Password.Length < Min.Password) { return(Error.BadRequest("Password is too short")); } if (request.UserName == request.Password) { return(Error.BadRequest("User name and password cannot be the same")); } if (_userRepo.HasUser(request.UserName)) { return(BadRequest(new ErrorResponse { Message = "User name is already in use" })); } if (!request.Password.Any(c => char.IsNumber(c))) { return(Error.BadRequest("Password must contain a number")); } if (!request.Password.Any(c => !char.IsNumber(c) & !char.IsLetter(c))) { return(Error.BadRequest("Password must contain a symbol")); } if (!request.Password.Any(c => char.IsUpper(c))) { return(Error.BadRequest("Password must contain an upper-case letter")); } if (!request.Password.Any(c => char.IsLower(c))) { return(Error.BadRequest("Password must contain a lower-case letter")); } DateTime now = DateTime.UtcNow; long nonce = Hash.RandomLong(); UserWriteDbo dbo = new UserWriteDbo { UserName = request.UserName, Nonce = nonce, Password = Hash.Get(request.Password, nonce), CreatedAt = now }; _userRepo.CreateUser(dbo); UserReadDbo user = _userRepo.GetUserByUserName(request.UserName); Guid id = Guid.NewGuid(); LoginDbo loginDbo = new LoginDbo { Id = id.ToByteArray(), UserId = user.Id, CreatedAt = now }; _loginRepo.CreateLogin(loginDbo); LoginResponse response = new LoginResponse { LoginId = id.ToString() }; return(Ok(response)); }