コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }