private static bool CheckAdmin(PlayerDBInfo playerinfo, Candidate c) { switch (playerinfo.group) { case 4: c.player.access = Constants.ACCESS_ADMIN; break; case 6: c.player.access = Constants.ACCESS_DONOR; break; case 7: c.player.access = Constants.ACCESS_MAPPER_DEVELOPER; break; case 8: c.player.access = Constants.ACCESS_DONOR; break; case 9: c.player.access = Constants.ACCESS_DONOR; break; case 10: c.player.access = Constants.ACCESS_DONOR; break; case 12: c.player.access = Constants.ACCESS_GAMEMASTER; break; default: c.player.access = Constants.ACCESS_FREE; break; } if (c.player.access < Constants.ACCESS_MAPPER_DEVELOPER) { if (_form.AdminOnly) return false; } else AppendLog(c.loginName + " is an admin."); return true; }
private static void PreloadPlayer(Candidate c, PlayerDBInfo pInfo) { c.player = new Player(0); var file = new AccountsManager(_form); if (!file.LoadPlayer(c.loginName, ref c.player)) { for (int i = 0; i < Constants.MAX_PLAYER_FRIENDS; i++) { c.player.friends[i].name = new string(' ', Constants.PLAYER_NAME_LENGTH); //<--- max display name length on the forum. } } c.player.PlayerName = pInfo.charName; c.playerBank = new Bank(0); file.LoadPlayerBank(c.loginName, ref c.playerBank); }
private static bool CheckValidating(PlayerDBInfo pInfo) { if (pInfo.group != 1) return true; // 1 -> Group = 1 -> accounts awaiting validation return false; }
private static bool CheckSubscription(PlayerDBInfo playerinfo, Candidate c) { if (playerinfo.group == (int)Donors.Silver || playerinfo.group == (int)Donors.Gold) { Donors don = (Donors)playerinfo.group; string donorType = ""; switch (don) { case Donors.Silver: donorType = " (Silver)"; c.player.IsDonor = 2; break; case Donors.Gold: donorType = " (Gold)"; c.player.IsDonor = 1; break; } _form.appendLog(c.loginName + " is a donor" + donorType + "."); } else { c.player.IsDonor = 0; if (c.player.access == 0) _form.appendLog(c.loginName + " is a regular player."); } if (_form.DonorOnly && c.player.access < Constants.ACCESS_DONOR) return false; return true; }
private static bool CheckPlayerStatus(Candidate c) { List<string>[] playerInfo; string ipAddress = ((IPEndPoint)c.socket.RemoteEndPoint).Address.ToString(); if (!Database.Instance.SelectPlayerData(out playerInfo, c.loginName)) { AppendLog("Couldn't connect with database for: " + ipAddress + ". Rejecting..."); SendClient_AlertMsg(c.socket, "Unexpected loss of connection, try again in a minute!", true); KillClientSocket(c); return false; } if (playerInfo[0].Count == 0) { AppendLog("->" + c.loginName + "<-(" + ipAddress + ") doesn't exist in the database. Rejecting..."); SendClient_AlertMsg(c.socket, "Sorry, but it seems that you've entered an incorrect login or password. Please try again!", true); KillClientSocket(c); return false; } PlayerDBInfo pInfo = new PlayerDBInfo(playerInfo[0][0], playerInfo[1][0], playerInfo[2][0], playerInfo[3][0]); if (!CheckPassword(pInfo, c.password)) { AppendLog("Wrong password for: " + c.loginName + "/" + ipAddress + ". Rejecting..."); SendClient_AlertMsg(c.socket, "Sorry, you've entered incorrect login or password. Please try again!", true); KillClientSocket(c); return false; } if (!CheckValidating(pInfo)) { AppendLog("Account is not verified for: " + c.loginName + "/" + ipAddress + ". Rejecting..."); SendClient_AlertMsg(c.socket, "Please validate your account, by confirming your email address!", true); KillClientSocket(c); return false; } //Load Player, to synchronize his status - gold silver admin. PreloadPlayer(c, pInfo); if (!CheckAdmin(pInfo, c)) { SendClient_AlertMsg(c.socket, "Sorry, but the server is only available to staff members at the moment.", true); AppendLog(c.loginName + "/" + ipAddress + " isn't an Admin. Rejecting..."); KillClientSocket(c); return false; } if (!CheckSubscription(pInfo, c)) { SendClient_AlertMsg(c.socket, "Sorry, but the server is only available to Gold or Silver Shinobi at the moment.", true); AppendLog(c.loginName + "/" + ipAddress + " isn't a Donor" + "" + ". Rejecting..."); KillClientSocket(c); return false; } //No more checks, it's seems player can join the server. AccountsManager file = new AccountsManager(_form); file.SavePlayer(c.loginName, ref c.player); file.SavePlayerBank(c.loginName, ref c.playerBank); if (!SendClient_ServerDetails(c)) { SendClient_AlertMsg(c.socket, "Server is down, try again in a minute!", true); AppendLog(c.loginName + "/" + ipAddress + " rejected -> no available servers"); KillClientSocket(c); } return true; }
private static bool CheckPassword(PlayerDBInfo playerinfo, string pass) { string ultimateHash = playerinfo.hash; string salt = playerinfo.salt; using (MD5 md5Hash = MD5.Create()) { string firstIteration = GetMd5Hash(md5Hash, salt) + GetMd5Hash(md5Hash, pass); string seconditeration = GetMd5Hash(md5Hash, firstIteration); if (seconditeration == ultimateHash) { return true; } } return false; }