From b8b755c0c7291aac95f220d206371063c9aa47d7 Mon Sep 17 00:00:00 2001 From: Steven Lawson Date: Wed, 19 Dec 2012 20:25:29 -0500 Subject: [PATCH] Adding additional login checks. Added /saconfig info --- .../Commands/Command_saconfig.java | 35 ++++++++++++++++++- .../TotalFreedomMod/Commands/TFM_Command.java | 27 ++++++++++---- .../Listener/TFM_PlayerListener.java | 17 +++++++-- .../TotalFreedomMod/TFM_ServerInterface.java | 2 +- .../TotalFreedomMod/TFM_SuperadminList.java | 31 +++++++++++++--- .../TotalFreedomMod/TFM_UserInfo.java | 15 ++++++++ .../TotalFreedomMod/TFM_Util.java | 6 ---- 7 files changed, 112 insertions(+), 21 deletions(-) diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_saconfig.java b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_saconfig.java index d9fc0898..fc624376 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Commands/Command_saconfig.java +++ b/src/me/StevenLawson/TotalFreedomMod/Commands/Command_saconfig.java @@ -48,6 +48,39 @@ public class Command_saconfig extends TFM_Command } else if (args.length == 2) { + if (args[0].equalsIgnoreCase("info")) + { + if (!TFM_SuperadminList.isUserSuperadmin(sender)) + { + sender.sendMessage(TotalFreedomMod.MSG_NO_PERMS); + return true; + } + + TFM_Superadmin superadmin = TFM_SuperadminList.getAdminEntry(args[1].toLowerCase()); + + if (superadmin == null) + { + try + { + superadmin = TFM_SuperadminList.getAdminEntry(getPlayer(args[1]).getName().toLowerCase()); + } + catch (CantFindPlayerException ex) + { + } + } + + if (superadmin == null) + { + sender.sendMessage("Superadmin not found: " + args[1]); + } + else + { + sender.sendMessage(ChatColor.stripColor(ChatColor.translateAlternateColorCodes('&', superadmin.toString()))); + } + + return true; + } + if (!senderIsConsole) { sender.sendMessage(ChatColor.GRAY + "This command may only be used from the console."); @@ -95,7 +128,7 @@ public class Command_saconfig extends TFM_Command sender.sendMessage(TotalFreedomMod.MSG_NO_PERMS); return true; } - + String target_name = args[1]; try diff --git a/src/me/StevenLawson/TotalFreedomMod/Commands/TFM_Command.java b/src/me/StevenLawson/TotalFreedomMod/Commands/TFM_Command.java index 25b9d3d9..5476ad7e 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Commands/TFM_Command.java +++ b/src/me/StevenLawson/TotalFreedomMod/Commands/TFM_Command.java @@ -3,6 +3,7 @@ package me.StevenLawson.TotalFreedomMod.Commands; import java.util.List; import me.StevenLawson.TotalFreedomMod.TFM_Log; import me.StevenLawson.TotalFreedomMod.TFM_SuperadminList; +import me.StevenLawson.TotalFreedomMod.TFM_UserInfo; import me.StevenLawson.TotalFreedomMod.TFM_Util; import me.StevenLawson.TotalFreedomMod.TotalFreedomMod; import org.bukkit.ChatColor; @@ -53,9 +54,7 @@ public class TFM_Command ADMIN_LEVEL level = permissions.level(); SOURCE_TYPE_ALLOWED source = permissions.source(); - boolean block_web_console = permissions.block_host_console(); - - //TFM_Log.info("Level: " + level + ", Source: " + source + ", BWC: " + block_host_console); + boolean block_host_console = permissions.block_host_console(); Player sender_p = null; if (sender instanceof Player) @@ -73,7 +72,7 @@ public class TFM_Command { return false; } - else if (block_web_console && TFM_Util.isFromHostConsole(sender.getName())) + else if (block_host_console && TFM_Util.isFromHostConsole(sender.getName())) { return false; } @@ -84,9 +83,25 @@ public class TFM_Command { return false; } - else if (level == ADMIN_LEVEL.SENIOR && !is_senior) + else if (level == ADMIN_LEVEL.SENIOR) { - return false; + if (is_senior) + { + TFM_UserInfo playerdata = TFM_UserInfo.getPlayerData(sender_p); + Boolean superadminIdVerified = playerdata.isSuperadminIdVerified(); + + if (superadminIdVerified != null) + { + if (!superadminIdVerified.booleanValue()) + { + return false; + } + } + } + else + { + return false; + } } else if (level == ADMIN_LEVEL.SUPER && !is_super) { diff --git a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java index 487debdb..c7cce67f 100644 --- a/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java +++ b/src/me/StevenLawson/TotalFreedomMod/Listener/TFM_PlayerListener.java @@ -641,6 +641,8 @@ public class TFM_PlayerListener implements Listener try { final Player p = event.getPlayer(); + final TFM_UserInfo playerdata = TFM_UserInfo.getPlayerData(p); + playerdata.setSuperadminIdVerified(null); TFM_UserList.getInstance(TotalFreedomMod.plugin).addUser(p); @@ -659,9 +661,20 @@ public class TFM_PlayerListener implements Listener } else { - p.setOp(true); + if (TFM_SuperadminList.verifyIdentity(p.getName(), p.getAddress().getAddress().getHostAddress())) + { + playerdata.setSuperadminIdVerified(Boolean.TRUE); - TFM_SuperadminList.updateLastLogin(p); + TFM_SuperadminList.updateLastLogin(p); + } + else + { + playerdata.setSuperadminIdVerified(Boolean.FALSE); + + TFM_Util.bcastMsg("Warning: " + p.getName() + " is an admin, but is using a username not registered to one of their IPs.", ChatColor.RED); + } + + p.setOp(true); } } diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_ServerInterface.java b/src/me/StevenLawson/TotalFreedomMod/TFM_ServerInterface.java index da5a00ab..a2580d75 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_ServerInterface.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_ServerInterface.java @@ -154,7 +154,7 @@ public class TFM_ServerInterface } else { - is_superadmin = TFM_SuperadminList.checkPartialSuperadminIP(player_ip); + is_superadmin = TFM_SuperadminList.checkPartialSuperadminIP(player_ip, player_name.toLowerCase()); } if (!is_superadmin) diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_SuperadminList.java b/src/me/StevenLawson/TotalFreedomMod/TFM_SuperadminList.java index 39ebea02..0670d18f 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_SuperadminList.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_SuperadminList.java @@ -265,7 +265,7 @@ public class TFM_SuperadminList return false; } - public static boolean checkPartialSuperadminIP(String user_ip) + public static boolean checkPartialSuperadminIP(String user_ip, String user_name) { try { @@ -293,10 +293,13 @@ public class TFM_SuperadminList if (admin_entry != null) { - List ips = admin_entry.getIps(); - ips.add(user_ip); - admin_entry.setIps(ips); - saveSuperadminList(); + if (admin_entry.getName().equalsIgnoreCase(user_name)) + { + List ips = admin_entry.getIps(); + ips.add(user_ip); + admin_entry.setIps(ips); + saveSuperadminList(); + } } return true; @@ -430,4 +433,22 @@ public class TFM_SuperadminList TFM_Log.severe(ex); } } + + public static boolean verifyIdentity(String admin_name, String ip) throws Exception + { + if (Bukkit.getOnlineMode()) + { + return true; + } + + TFM_Superadmin admin_entry = getAdminEntry(admin_name); + if (admin_entry != null) + { + return admin_entry.getIps().contains(ip); + } + else + { + throw new Exception(); + } + } } diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_UserInfo.java b/src/me/StevenLawson/TotalFreedomMod/TFM_UserInfo.java index d47d3ee3..499c0913 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_UserInfo.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_UserInfo.java @@ -47,6 +47,7 @@ public class TFM_UserInfo private String last_message = ""; private boolean in_adminchat = false; private boolean all_commands_blocked = false; + private Boolean superadmin_id_verified = null; public TFM_UserInfo(Player player) { @@ -438,4 +439,18 @@ public class TFM_UserInfo { this.all_commands_blocked = commands_blocked; } + + //If someone logs in to telnet or minecraft, and they are an admin, make sure that they are using a username that is associated with their IP. + //After the check for this is done in TFM_PlayerListener, never change it elsewhere. + public Boolean isSuperadminIdVerified() + { + return superadmin_id_verified; + } + + //If someone logs in to telnet or minecraft, and they are an admin, make sure that they are using a username that is associated with their IP. + //After the check for this is done in TFM_PlayerListener, never change it elsewhere. + public void setSuperadminIdVerified(Boolean superadmin_id_verified) + { + this.superadmin_id_verified = superadmin_id_verified; + } } diff --git a/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java b/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java index e4fc6378..110181ca 100644 --- a/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java +++ b/src/me/StevenLawson/TotalFreedomMod/TFM_Util.java @@ -245,12 +245,6 @@ public class TFM_Util return TFM_SuperadminList.isUserSuperadmin(user); } - @Deprecated - public static boolean checkPartialSuperadminIP(String user_ip) - { - return TFM_SuperadminList.checkPartialSuperadminIP(user_ip); - } - public static int wipeEntities(boolean wipe_explosives, boolean wipe_vehicles) { int removed = 0;