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; }
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); }