public Player GetPlayerByLogin(string name, string password) { var connection = _databaseService.GetConnection(); var data = connection.QueryFirstOrDefault <UserAuthentication>( "SELECT id, hash FROM players WHERE name = @name", new { name }); connection.Close(); if (data == null) { return(null); } var playerId = data.Id; var playerHash = data.Hash; if (!Pbkdf2.ValidatePassword(password, playerHash)) { return(null); } var iterations = Pbkdf2.GetHashIterations(playerHash); if (iterations != Pbkdf2.Pbkdf2Iterations) { var hash = Pbkdf2.HashPassword(password); UpdateHash(playerId, hash); } return(GetPlayerById(playerId)); }
private void ProcessSignupRequest(UnauthorizedMessage signupMessage) { var signupData = GetData <SignupRequest>(signupMessage); if (signupData == null) { return; } var reason = 0; if (string.IsNullOrEmpty(signupData.Username) || string.IsNullOrEmpty(signupData.Password)) { reason = 1001; } if (signupData.Username.Length <= 3) { reason = 1002; } if (_userRepository.GetPlayerByName(signupData.Username) != null) { reason = 1003; } if (reason > 0) { _loginSender.SignupFail(signupMessage.Connection, reason); return; } var name = signupData.Username; var hash = Pbkdf2.HashPassword(signupData.Password); var token = _tokenService.GenerateUniqueToken(); _userRepository.CreateNewPlayer(name, hash, token); var player = _userRepository.GetPlayerByToken(token); SendPlayerInformation(player, signupMessage.Connection, token); }