public static void SendSelectedServerDataMessage(LoginClient client, short serverId) { client.Account.Ticket = client.Ticket; client.Account.Update(); client.Send(new SelectedServerDataMessage(serverId, "127.0.0.1", 5555, true, client.Ticket)); client.Disconnect(); }
public void AuthRequest(LoginClient pServer, byte[] pBuffer) { var pMsg = new MsgLoginSvAuthRequest(pBuffer); if (pMsg.Message != ServerKernel.HelloReplyString) { pServer.Disconnect(); return; } pServer.ConnectionState = InterServerState.MEETING_OK; pServer.Send(new MsgLoginSvAuthentication(ServerKernel.Username, ServerKernel.Password, ServerKernel.ServerName, ServerKernel.MaxOnlinePlayer)); ServerKernel.Log.SaveLog("Connected to the Account Server, waiting for authentication...", true, LogType.MESSAGE); }
public static void Login(LoginClient pClient, Packet pPacket) { string hash; string username; if (!pPacket.TryReadString(out hash, 32) || !pPacket.TryReadString(out username, 32)) { Log.WriteLine(LogLevel.Warn, "Could not read user token."); SendFailedLogin(pClient, ServerError.EXCEPTION); return; } Log.WriteLine(LogLevel.Debug, "{0} tries to login.", username); User user; if (Program.Entity.Users.Count() > 0 && (user = Program.Entity.Users.First(u => u.Username == username)) != null) { if (user.Password.ToLower() == hash.ToLower()) { if (ClientManager.Instance.IsLoggedIn(user.Username)) { Log.WriteLine(LogLevel.Warn, "{0} is trying dual login. Disconnecting.", user.Username); pClient.Disconnect(); } else if (user.Banned) { SendFailedLogin(pClient, ServerError.BLOCKED); } else { pClient.IsAuthenticated = true; pClient.Username = user.Username; pClient.AccountID = user.ID; pClient.Admin = user.Admin; AllowFiles(pClient, true); WorldList(pClient, false); } } else { SendFailedLogin(pClient, ServerError.INVALID_CREDENTIALS); } } else { SendFailedLogin(pClient, ServerError.INVALID_CREDENTIALS); } }
public void CompleteAuthentication(LoginClient pClient, byte[] pBuffer) { var pMsg = new LoginSvResponsePacket(pBuffer); switch (pMsg.Response) { case LoginServerResponse.LOGIN_SUCCESSFUL: // send server information packet pClient.Send(new MsgServerInformation(ServerKernel.MaxOnlinePlayer, (ushort)ServerKernel.Players.Count, ServerKernel.ServerName, ServerKernel.GamePort)); ServerKernel.Log.SaveLog("Authentication completed! Server is ready to go...", true, LogType.MESSAGE); return; case LoginServerResponse.LOGIN_DENIED_DISCONNECTED: ServerKernel.Log.SaveLog("Disconnected of the account server...", true, LogType.WARNING); break; case LoginServerResponse.LOGIN_DENIED_SERVER_NOT_EXIST: ServerKernel.Log.SaveLog("Access denied to the account server due to invalid server name...", true, LogType.WARNING); break; case LoginServerResponse.LOGIN_DENIED_IPADDRESS: ServerKernel.Log.SaveLog("Access denied to the account server due to invalid ip address...", true, LogType.WARNING); break; case LoginServerResponse.LOGIN_DENIED_LOGIN: ServerKernel.Log.SaveLog( "Attempted to use an invalid username or password when connecting to the account server...", true, LogType.WARNING); break; default: ServerKernel.Log.SaveLog("Invalid LOGIN_COMPLETE_AUTHENTICATION response " + pMsg.Response, true, LogType.DEBUG); break; } try { pClient.Disconnect(); } catch (Exception ex) { } }
public static void VersionInfo(LoginClient pClient, Packet pPacket) { if (!pPacket.TryReadUShort(out var year) || !pPacket.TryReadUShort(out var version)) { Log.WriteLine(LogLevel.Warn, "Invalid client version."); pClient.Disconnect(); return; } Log.WriteLine(LogLevel.Debug, "Client version authenticated - Year: {0} Version: {1}.", year, version); using (var response = new Packet(SH3Type.VersionAllowed)) { response.WriteShort(1); pClient.SendPacket(response); } }
public static void VersionInfo(LoginClient pClient, Packet pPacket) { string year; ushort version; if (!pPacket.TryReadString(out year, 20) || !pPacket.TryReadUShort(out version)) { Log.WriteLine(LogLevel.Warn, "Invalid client version."); pClient.Disconnect(); return; } Log.WriteLine(LogLevel.Debug, "Client version {0}:{1}.", year, version); using (Packet response = new Packet(SH3Type.VersionAllowed)) { response.WriteShort(1); pClient.SendPacket(response); } }
public static void Login(LoginClient pClient, Packet pPacket) { // Initialize DB var dbClient = Program.DatabaseManager.GetClient(); // XX XX XX XX XX XX XX XX XX XX XX - login length // 00 00 00 00 00 00 00 - space // XX XX XX XX XX XX XX - password // 00 00 00 00 00 00 00 00 00 4F 72 69 67 69 6E 61 6C 00 00 00 00 00 00 00 00 00 00 00 // Define packet lengths, as these may change with client updates const int packetLength = 54, loginBlock = 11, spaceLength = 7, passwordBlock = 7; var md5 = pPacket.ReadStringForLogin(packetLength); var md5Char = md5.ToCharArray(); var clientUsername = ""; var clientPassword = ""; // TODO - Escape these before query processing // Read from 0 --> 11 for (var i = 0; i <= loginBlock; i++) { clientUsername += md5Char[i].ToString().Replace("\0", ""); } Log.WriteLine(LogLevel.Debug, "{0} tries to login.", clientUsername); // Read from 18 --> onwards for (var i = loginBlock + spaceLength; i <= loginBlock + spaceLength + passwordBlock; i++) { clientPassword += md5Char[i].ToString().Replace("\0", ""); } Log.WriteLine(LogLevel.Debug, "{0} tries to login.", clientPassword); DataTable loginData; using (dbClient) loginData = dbClient.ReadDataTable("SELECT * FROM accounts WHERE Username= '******'"); // Auto account creation if no username found if (loginData.Rows.Count == 0) { dbClient.ExecuteQuery("INSERT INTO accounts (username, password) VALUES ('" + clientUsername + "','" + clientPassword + "')"); using (dbClient) loginData = dbClient.ReadDataTable("SELECT * FROM accounts WHERE Username= '******'"); } if (loginData == null) { return; } if (loginData.Rows.Count <= 0) { return; } foreach (DataRow row in loginData.Rows) { var username = (string)row["username"]; var password = (string)row["password"]; var banned = ReadMethods.EnumToBool(row["banned"].ToString()); if (clientPassword == password) { if (banned) { SendFailedLogin(pClient, ServerError.Blocked); Log.WriteLine(LogLevel.Debug, "Banned user - {0} tries to login.", clientUsername); } else if (ClientManager.Instance.IsLoggedIn(username)) { Log.WriteLine(LogLevel.Warn, "{0} is trying dual login. Disconnecting.", username); pClient.Disconnect(); break; } else { pClient.Username = username; pClient.IsAuthenticated = true; pClient.Admin = 0; /*(byte)row["Admin"];*/ pClient.AccountID = int.Parse(row["id"].ToString()); WorldList(pClient, false); } } else { SendFailedLogin(pClient, ServerError.InvalidCredentials); } } }
public static void Login(LoginClient pClient, Packet pPacket) { // Initialize DB DatabaseClient dbClient = Program.DatabaseManager.GetClient(); // XX XX XX XX XX XX XX XX XX XX XX - login length // 00 00 00 00 00 00 00 - space // XX XX XX XX XX XX XX - password // 00 00 00 00 00 00 00 00 00 4F 72 69 67 69 6E 61 6C 00 00 00 00 00 00 00 00 00 00 00 // Define packet lengths, as these may change with client updates int packetLength = 54; int loginBlock = 11; int spaceLength = 7; int passwordBlock = 7; string md5 = pPacket.ReadStringForLogin(packetLength); char[] md5Char = md5.ToCharArray(); string username = ""; string clientPassword = ""; // TODO - Escape these before query processing // Read from 0 --> 11 for (int i = 0; i <= loginBlock; i++) username += md5Char[i].ToString().Replace("\0", ""); Log.WriteLine(LogLevel.Debug, "{0} tries to login.", username); // Read from 18 --> onwards for (int i = loginBlock + spaceLength; i <= loginBlock + spaceLength + passwordBlock; i++) clientPassword += md5Char[i].ToString().Replace("\0", ""); Log.WriteLine(LogLevel.Debug, "{0} tries to login.", clientPassword); DataTable loginData = null; using (dbClient) loginData = dbClient.ReadDataTable("SELECT * FROM accounts WHERE Username= '******'"); // Auto account creation if no username found if (loginData.Rows.Count == 0) { dbClient.ExecuteQuery("INSERT INTO accounts (username, password) VALUES ('" + username + "','" + clientPassword + "')"); using (dbClient) loginData = dbClient.ReadDataTable("SELECT * FROM accounts WHERE Username= '******'"); } if (loginData != null) { if (loginData.Rows.Count > 0) { foreach (DataRow row in loginData.Rows) { string uIsername = (string)row["username"]; string password = (string)row["password"]; bool banned = Database.DataStore.ReadMethods.EnumToBool(row["banned"].ToString()); if (clientPassword == password) { if (banned) { SendFailedLogin(pClient, ServerError.Blocked); Log.WriteLine(LogLevel.Debug, "Banned user - {0} tries to login.", username); } else if (ClientManager.Instance.IsLoggedIn(uIsername)) { Log.WriteLine(LogLevel.Warn, "{0} is trying dual login. Disconnecting.", uIsername); pClient.Disconnect(); break; } else { pClient.Username = uIsername; pClient.IsAuthenticated = true; pClient.Admin = 0; /*(byte)row["Admin"];*/ pClient.AccountID = int.Parse(row["id"].ToString()); WorldList(pClient, false); } } else SendFailedLogin(pClient, ServerError.InvalidCredentials); } } } }
public static void VersionInfo(LoginClient pClient, Packet pPacket) { ushort year; ushort version; if (!pPacket.TryReadUShort(out year) || !pPacket.TryReadUShort(out version)) { Log.WriteLine(LogLevel.Warn, "Invalid client version."); pClient.Disconnect(); return; } Log.WriteLine(LogLevel.Debug, "Client version authenticated - Year: {0} Version: {1}.", year, version); using (Packet response = new Packet(SH3Type.VersionAllowed)) { response.WriteShort(1); pClient.SendPacket(response); } }
public void DisConnect() { _client.Disconnect(); }