コード例 #1
0
        public static void HandleAuth(Packet packet)
        {
            if (packet.Sender.Character != null)
            {
                packet.Sender.Character.CharacterDb.Account.IsLoggedIn = 0;
                ServerMain.Instance.Database.Save();
                // Save data
            }
            // Read the packet into readable format
            UserAuthPacket authPkt = new UserAuthPacket(packet);

            // Login and Retrieve the User
            Controller.Database.Tables.Character character = ServerMain.Instance.Database.GetCharacter(authPkt.Username);
            if (character == null || Password.GenerateSaltedHash(authPkt.Password, character.Account.Salt) != character.Account.Password)
            {
                packet.SendBackError(5);
                return;
            }
            if (character.Account.IsLoggedIn == 1)
            {
                packet.SendBackError(6);
                return;
            }
            if (character.Account.Permission == 0 && packet.Sender.IsTeacherClient())
            {
                packet.SendBackError(4);
                return;
            }
            // Prepare the Acknowledgment packet indicating success and token
            character.Account.IsLoggedIn   = 1;
            character.Account.LastLoggedIn = DateTime.Now;
            ServerMain.Instance.Database.Save();
            Model.Character model = new Model.Character();
            model.FromEntity(character);
            packet.Sender.Character = model;
            var ack = new UserAuthAck()
            {
                Token = model.Token
            };

            packet.Sender.Send(ack.CreatePacket());
            if (ServerMain.Instance.Server.LoggedInClient.ContainsKey(model.Token))
            {
                ServerMain.Instance.Server.LoggedInClient.Remove(model.Token);
            }
            ServerMain.Instance.Server.LoggedInClient.Add(model.Token, packet.Sender);
            return;
        }
コード例 #2
0
ファイル: Auth.cs プロジェクト: yangmaoer/ServerGame
        public static void UserAuth(Packet packet)
        {
            int version  = packet.Reader.ReadInt32();
            var username = packet.Reader.ReadUnicodeStatic(40);
            var password = packet.Reader.ReadAscii();

            password = password.Substring(0, password.Length - 1);

            Log.Debug("Login (v{0}) request from {1}", version.ToString(), username);

            if (!AccountModel.AccountExists(AuthServer.Instance.Database.Connection, username))
            {
                Log.Debug("Account {0} not found!", username);
                packet.Sender.Error("Invalid Username or password!");
                return;
            }

            User user = AccountModel.Retrieve(AuthServer.Instance.Database.Connection, username);

            if (user == null)
            {
                Log.Debug("Account {0} not found!", username);
                packet.Sender.Error("Invalid Username or password!");
                return;
            }
            //  var passwordHashed = Password.GenerateSaltedHash(password, user.Salt);
            if (password != user.Password)
            {
                Log.Debug("Account {0} found but invalid password! ({1} ({2}) vs {3})", username, password, user.Salt, user.Password);
                packet.Sender.Error("Invalid Username or password!");
                return;
            }

            uint ticket = AccountModel.CreateSession(AuthServer.Instance.Database.Connection, username);

            // Wrong protocol -> 20070

            /*var ack = new Packet(Packets.UserAuthAck);
             * packet.Sender.Error("Invalid Username or password!");*/

            var ack = new Packet(Packets.UserAuthAck);

            UserAuthAck.Serialize(ticket, ack.Writer);

            packet.Sender.Send(ack);
        }