public void CreateLogin(LoginDbo login)
 {
     using (var connection = GetConnection())
     {
         connection.Insert("Login", login);
     }
 }
        public UserReadDbo ValidateUser(string authHeader)
        {
            string auth = _GetAuth(authHeader);

            if (auth == null)
            {
                return(null);
            }

            Guid guid;

            if (!Guid.TryParse(auth, out guid))
            {
                return(null);
            }

            LoginDbo login = _loginRepository.GetLogin(guid);

            if (login == null)
            {
                return(null);
            }

            return(_userRepository.GetUserById(login.UserId));
        }
        public IActionResult Post(LoginRequest request)
        {
            UserReadDbo user = _userRepo.GetUserByUserName(request.UserName);

            if (user == null)
            {
                return(GetInvalidLogin());
            }

            byte[] hash = Hash.Get(request.Password, user.Nonce);

            if (!hash.SequenceEqual(user.Password))
            {
                return(GetInvalidLogin());
            }

            DateTime now = DateTime.UtcNow;

            Guid id = Guid.NewGuid();

            LoginDbo dbo = new LoginDbo
            {
                Id        = id.ToByteArray(),
                UserId    = user.Id,
                CreatedAt = now
            };

            _loginRepo.CreateLogin(dbo);

            LoginResponse ret = new LoginResponse
            {
                LoginId = id.ToString()
            };

            return(Ok(ret));
        }
Example #4
0
 public void CreateLogin(LoginDbo login)
 {
     _dbo.Add(new LoginDbo {
         Id = login.Id, CreatedAt = login.CreatedAt, UserId = login.UserId
     });
 }
Example #5
0
        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));
        }