public static void OnDeletePlayer(ClusterClient client, INetPacketStream packet) { var pak = new DeletePlayerPacket(packet); DbUser dbUser = null; DbCharacter dbCharacter = null; using (var database = DependencyContainer.Instance.Resolve <IDatabase>()) { dbUser = database.Users.Get(x => x.Username.Equals(pak.Username, StringComparison.OrdinalIgnoreCase) && x.Password.Equals(pak.Password, StringComparison.OrdinalIgnoreCase)); // Check if user exist and with good password in database. if (dbUser == null) { Logger.LogWarning($"[SECURITY] Unable to delete character id '{pak.CharacterId}' for user '{pak.Username}' from {client.RemoteEndPoint}. " + "Reason: bad presented credentials compared to the database."); client.Disconnect(); return; } // Check if given password match confirmation password. if (!string.Equals(pak.Password, pak.PasswordConfirmation, StringComparison.OrdinalIgnoreCase)) { Logger.LogWarning($"Unable to delete character id '{pak.CharacterId}' for user '{pak.Username}' from {client.RemoteEndPoint}. " + "Reason: passwords entered do not match."); ClusterPacketFactory.SendError(client, ErrorType.WRONG_PASSWORD); return; } dbCharacter = database.Characters.Get(pak.CharacterId); // Check if character exist. if (dbCharacter == null) { Logger.LogWarning($"[SECURITY] Unable to delete character id '{pak.CharacterId}' for user '{pak.Username}' from {client.RemoteEndPoint}. " + "Reason: user doesn't have any character with this id."); client.Disconnect(); return; } if (dbCharacter.IsDeleted) { Logger.LogWarning($"[SECURITY] Unable to delete character id '{pak.CharacterId}' for user '{pak.Username}' from {client.RemoteEndPoint}. " + "Reason: character is already deleted."); return; } database.Characters.Delete(dbCharacter); database.Complete(); } Logger.LogInformation("Character '{0}' has been deleted successfully for user '{1}' from {2}.", dbCharacter.Name, pak.Username, client.RemoteEndPoint); ClusterPacketFactory.SendPlayerList(client, pak.AuthenticationKey, dbUser.Characters); }
public void OnDeletePlayer(IClusterClient client, DeletePlayerPacket packet) { DbUser dbUser = _database.Users.FirstOrDefault(x => x.Username == packet.Username && x.Password == packet.Password); if (dbUser == null) { _logger.LogWarning($"[SECURITY] Unable to create new character for user '{packet.Username}' from {client.Socket.RemoteEndPoint}. " + "Reason: bad presented credentials compared to the database."); client.Disconnect(); return; } if (!string.Equals(packet.Password, packet.PasswordConfirmation, StringComparison.OrdinalIgnoreCase)) { _logger.LogWarning($"Unable to delete character id '{packet.CharacterId}' for user '{packet.Username}' from {client.Socket.RemoteEndPoint}. " + "Reason: passwords entered do not match."); _clusterPacketFactory.SendClusterError(client, ErrorType.WRONG_PASSWORD); return; } DbCharacter characterToDelete = _database.Characters.FirstOrDefault(x => x.Id == packet.CharacterId); // Check if character exist. if (characterToDelete == null) { _logger.LogWarning($"[SECURITY] Unable to delete character id '{packet.CharacterId}' for user '{packet.Username}' from {client.Socket.RemoteEndPoint}. " + "Reason: user doesn't have any character with this id."); client.Disconnect(); return; } if (characterToDelete.IsDeleted) { _logger.LogWarning($"[SECURITY] Unable to delete character id '{packet.CharacterId}' for user '{packet.Username}' from {client.Socket.RemoteEndPoint}. " + "Reason: character is already deleted."); return; } characterToDelete.IsDeleted = true; _database.Characters.Update(characterToDelete); _database.SaveChanges(); _logger.LogInformation($"Character '{characterToDelete.Name}' has been deleted successfully for user '{packet.Username}' from {client.Socket.RemoteEndPoint}."); IEnumerable <DbCharacter> dbCharacters = GetCharacters(dbUser.Id); _clusterPacketFactory.SendPlayerList(client, packet.AuthenticationKey, dbCharacters); }