From 714bcd1e29e4e6c499b0f6d4ca8b6d9bc36ac9b0 Mon Sep 17 00:00:00 2001 From: CypherX Date: Sat, 2 Apr 2011 22:10:18 -0400 Subject: [PATCH] Added: /logout command Changed: Forcing registration is now configurable, verification of IP addresses upon resuming a session is now configurable. /unregister now notifies the player if they are online. --- src/com/cypherx/xauth/CommandHandler.java | 98 +++++++++++++++++-- src/com/cypherx/xauth/Settings.java | 18 ++-- src/com/cypherx/xauth/Strings.java | 14 ++- src/com/cypherx/xauth/xAuth.java | 40 +++++--- .../cypherx/xauth/xAuthPlayerListener.java | 14 ++- src/plugin.yml | 9 +- 6 files changed, 159 insertions(+), 34 deletions(-) diff --git a/src/com/cypherx/xauth/CommandHandler.java b/src/com/cypherx/xauth/CommandHandler.java index 4e76d2b..fd217d8 100644 --- a/src/com/cypherx/xauth/CommandHandler.java +++ b/src/com/cypherx/xauth/CommandHandler.java @@ -27,8 +27,8 @@ public class CommandHandler player.sendMessage(xAuth.strings.getString("register.err.disabled")); else if (plugin.isRegistered(player.getName())) player.sendMessage(xAuth.strings.getString("register.err.registered")); - else if (args[0].length() < xAuth.settings.getInt("registration.pw-min-length")) - player.sendMessage(xAuth.strings.getString("register.err.password", xAuth.settings.getInt("registration.pw-min-length"))); + else if (args[0].length() < xAuth.settings.getInt("security.password.min-length")) + player.sendMessage(xAuth.strings.getString("register.err.password", xAuth.settings.getInt("security.password.min-length"))); else { plugin.addAuth(player.getName(), args[0]); @@ -89,8 +89,8 @@ public class CommandHandler player.sendMessage(xAuth.strings.getString("changepw.err.login")); else if (!xAuth.settings.getBool("misc.allow-changepw")) player.sendMessage(xAuth.strings.getString("changepw.err.disabled")); - else if (args[0].length() < xAuth.settings.getInt("registration.pw-min-length")) - player.sendMessage(xAuth.strings.getString("register.err.password", xAuth.settings.getInt("registration.pw-min-length"))); + else if (args[0].length() < xAuth.settings.getInt("security.password.min-length")) + player.sendMessage(xAuth.strings.getString("register.err.password", xAuth.settings.getInt("security.password.min-length"))); else { plugin.changePass(player.getName(), args[0]); @@ -120,8 +120,8 @@ public class CommandHandler player.sendMessage(xAuth.strings.getString("changepw.err.login")); else if (!xAuth.settings.getBool("misc.allow-changepw")) player.sendMessage(xAuth.strings.getString("changepw.err.disabled")); - else if (args[0].length() < xAuth.settings.getInt("registration.pw-min-length")) - player.sendMessage(xAuth.strings.getString("register.err.password", xAuth.settings.getInt("registration.pw-min-length"))); + else if (args[0].length() < xAuth.settings.getInt("security.password.min-length")) + player.sendMessage(xAuth.strings.getString("register.err.password", xAuth.settings.getInt("security.password.min-length"))); else { plugin.changePass(player.getName(), args[0]); @@ -141,6 +141,15 @@ public class CommandHandler else { plugin.removeAuth(args[0]); + Player target = plugin.getServer().getPlayer(args[0]); + + if (target != null) + { + if (xAuth.settings.getBool("registration.forced")) + plugin.saveInventory(target); + target.sendMessage(xAuth.strings.getString("unregister.target")); + } + player.sendMessage(xAuth.strings.getString("unregister.success", args[0])); System.out.println("[" + pdfFile.getName() + "] " + player.getName() + " has unregistered " + args[0]); } @@ -208,6 +217,35 @@ public class CommandHandler player.sendMessage(xAuth.strings.getString("toggle.usage")); } } + else if (cmd.getName().equalsIgnoreCase("logout")) + { + //logout current player + if (args.length == 0) + plugin.killSession(player); + //logout other player + else + { + if (plugin.canUseCommand(player, "xauth.admin.logout")) + { + String target = buildName(args); + if (!plugin.sessionExists(target)) + player.sendMessage(xAuth.strings.getString("logout.err.session")); + else + { + Player pTarget = plugin.getServer().getPlayer(target); + plugin.removeSession(target); + + if (pTarget != null) + { + plugin.saveInventory(pTarget); + pTarget.sendMessage(xAuth.strings.getString("logout.success.ended")); + } + + player.sendMessage(xAuth.strings.getString("logout.success.other", target)); + } + } + } + } } public void handleConsoleCommand(Command cmd, String[] args) @@ -245,6 +283,15 @@ public class CommandHandler else { plugin.removeAuth(args[0]); + Player target = plugin.getServer().getPlayer(args[0]); + + if (target != null) + { + if (xAuth.settings.getBool("registration.forced")) + plugin.saveInventory(target); + target.sendMessage(xAuth.strings.getString("unregister.target")); + } + System.out.println(args[0] + " has been unregistered"); } } @@ -275,5 +322,44 @@ public class CommandHandler else System.out.println("Correct Usage: /toggle "); } + else if (cmd.getName().equalsIgnoreCase("logout")) + { + if (args.length < 1) + System.out.println("Correct Usage: /logout "); + else + { + String target = buildName(args); + if (!plugin.sessionExists(target)) + System.out.println("[" + pdfFile.getName() + "] This player does not have an active session."); + else + { + Player pTarget = plugin.getServer().getPlayer(target); + plugin.removeSession(target); + + if (pTarget != null) + { + plugin.saveInventory(pTarget); + pTarget.sendMessage(xAuth.strings.getString("logout.success.ended")); + } + + System.out.println("[" + pdfFile.getName() + "] " + target + "'s session has been terminated"); + } + } + } + } + + private String buildName(String[] args) + { + String s = ""; + + for (int i = 0; i < args.length; i++) + { + if (args[i] == null) + continue; + + s += args[i] + " "; + } + + return s.trim(); } } \ No newline at end of file diff --git a/src/com/cypherx/xauth/Settings.java b/src/com/cypherx/xauth/Settings.java index 7ac077d..2302ddc 100644 --- a/src/com/cypherx/xauth/Settings.java +++ b/src/com/cypherx/xauth/Settings.java @@ -11,23 +11,26 @@ public class Settings private static String[] keys = { "registration.enabled", + "registration.forced", "misc.allow-changepw", "misc.autosave", "session.timeout", + "session.verifyip", "notify.limit", - "registration.pw-min-length", "misc.allowed-cmds", "login.strikes.enabled", "login.strikes.amount", "security.filter.enabled", - "security.filter.allowed" - //"security.filter.blankname" + "security.filter.allowed", + "security.filter.blankname", + "security.password.min-length" }; private static final String[][] keyUpdates = { {"misc.allow-change-pw", "misc.allow-changepw"}, - {"misc.save-on-change", "misc.autosave"} + {"misc.save-on-change", "misc.autosave"}, + {"registration.pw-min-length", "security.password.min-length"} }; private static Configuration config; @@ -50,8 +53,9 @@ public class Settings public void fillDefaults() { defaults.put("registration.enabled", true); - defaults.put("registration.pw-min-length", 3); + defaults.put("registration.forced", true); defaults.put("session.timeout", 3600); + defaults.put("session.verifyip", true); defaults.put("notify.limit", 5); defaults.put("misc.allow-changepw", true); defaults.put("misc.allowed-cmds", new String[]{"/register", "/login"}); @@ -60,7 +64,8 @@ public class Settings defaults.put("login.strikes.amount", 5); defaults.put("security.filter.enabled", true); defaults.put("security.filter.allowed", "abcdefghijklmnopqrstuvwxyz0123456789_- ()[]{}"); - //defaults.put("security.filter.blankname", true); + defaults.put("security.filter.blankname", true); + defaults.put("security.password.min-length", 3); } public void updateKeys() @@ -118,7 +123,6 @@ public class Settings @SuppressWarnings("unchecked") public List getStrList(String key) { - //List cmds = (List)settings.get(key); return (List)settings.get(key); } } \ No newline at end of file diff --git a/src/com/cypherx/xauth/Strings.java b/src/com/cypherx/xauth/Strings.java index 5bdd8c9..fa51d55 100644 --- a/src/com/cypherx/xauth/Strings.java +++ b/src/com/cypherx/xauth/Strings.java @@ -13,9 +13,10 @@ public class Strings "register.success1", "register.success2", "login.login", "login.usage", "login.err.registered", "login.err.logged", "login.err.password", "login.err.kick", "login.success", "changepw.usage1", "changepw.usage2", "changepw.err.login", "changepw.err.disabled", "changepw.err.registered", "changepw.success.self", "changepw.success.other", - "unregister.usage", "unregister.success", "reload.success", "toggle.usage", "toggle.err.permission", "toggle.success.reg", - "toggle.success.pw", "toggle.success.save", "misc.illegal", "misc.reloaded", "misc.enabled", "misc.disabled", - "misc.filterkickmsg"/*, "misc.blankkickmsg"*/ + "unregister.usage", "unregister.target", "unregister.success", "reload.success", "toggle.usage", "toggle.err.permission", + "toggle.success.reg", "toggle.success.pw", "toggle.success.save", "logout.err.session", "logout.success.ended", + "logout.success.other", "misc.illegal", "misc.reloaded", "misc.enabled", "misc.disabled", "misc.filterkickmsg", + "misc.blankkickmsg" }; private static final String[][] keyUpdates = {}; @@ -64,6 +65,7 @@ public class Strings defaults.put("changepw.success.other", "&aPassword changed."); defaults.put("unregister.usage", "&cCorrect Usage: /unregister "); + defaults.put("unregister.target", "&cYou have been unregistered."); defaults.put("unregister.success", "&a%1 has been unregistered."); defaults.put("reload.success", "&e[xAuth] Configuration and Accounts reloaded"); @@ -74,12 +76,16 @@ public class Strings defaults.put("toggle.success.pw", "&e[xAuth] Password changes are now %1."); defaults.put("toggle.success.save", "&e[xAuth] Autosaving of account modifications is now %1."); + defaults.put("logout.err.session", "&cThis player does not have an active session."); + defaults.put("logout.success.ended", "&cYour session has been terminated. You must log in again."); + defaults.put("logout.success.other", "&a%1's session has been terminated."); + defaults.put("misc.illegal", "&7You must be logged in to do that!"); defaults.put("misc.reloaded", "&cServer reloaded! You must log in again."); defaults.put("misc.enabled", "enabled"); defaults.put("misc.disabled", "disabled"); defaults.put("misc.filterkickmsg", "Your name contains one or more illegal characters."); - //defaults.put("misc.blankkickmsg", "Blank names are not allowed."); + defaults.put("misc.blankkickmsg", "Blank names are not allowed."); } private void updateKeys() diff --git a/src/com/cypherx/xauth/xAuth.java b/src/com/cypherx/xauth/xAuth.java index c05e489..e000394 100644 --- a/src/com/cypherx/xauth/xAuth.java +++ b/src/com/cypherx/xauth/xAuth.java @@ -1,5 +1,5 @@ -//xAuth 1.1.6 -//Built against Bukkit #493 and CraftBukkit #612 +//xAuth 1.2 +//Built against Bukkit #493 and CraftBukkit #617 package com.cypherx.xauth; @@ -86,7 +86,7 @@ public class xAuth extends JavaPlugin } File fDir = new File(DIR); - + if (!fDir.exists()) fDir.mkdir(); @@ -113,8 +113,11 @@ public class xAuth extends JavaPlugin { for (Player player : players) { - saveInventory(player); - player.sendMessage(strings.getString("misc.reloaded")); + if (isRegistered(player.getName())) + { + saveInventory(player); + player.sendMessage(strings.getString("misc.reloaded")); + } } } @@ -189,14 +192,14 @@ public class xAuth extends JavaPlugin { if (!this.isEnabled()) return false; - + CommandHandler cmdHandler = new CommandHandler(this); if (sender instanceof Player) cmdHandler.handlePlayerCommand((Player)sender, cmd, args); else if (sender instanceof ConsoleCommandSender) cmdHandler.handleConsoleCommand(cmd, args); - + return true; } @@ -322,6 +325,9 @@ public class xAuth extends JavaPlugin //NOTIFY FUNCTIONS public void handleEvent(Player player, Cancellable event) { + if (!settings.getBool("registration.forced") && !isRegistered(player.getName())) + return; + if (!sessionExists(player.getName())) { event.setCancelled(true); @@ -424,7 +430,7 @@ public class xAuth extends JavaPlugin removeSession(player.getName()); } - + return false; } @@ -433,10 +439,10 @@ public class xAuth extends JavaPlugin Session session = sessions.get(player.getName().toLowerCase()); if (session.isExpired(new Date(session.getLoginTime() + (settings.getInt("session.timeout") * 1000)))) return false; - - if (!session.isValidAddr(player.getAddress().getAddress().getHostAddress())) + + if (settings.getBool("session.verifyip") && !session.isValidAddr(player.getAddress().getAddress().getHostAddress())) return false; - + return true; } @@ -446,6 +452,18 @@ public class xAuth extends JavaPlugin if (sessionExists(pName)) sessions.remove(pName); } + + public void killSession(Player player) + { + String pName = player.getName(); + removeSession(pName); + + if (player != null) + { + saveInventory(player); + player.sendMessage(strings.getString("logout.success.ended")); + } + } //MISC FUNCTIONS private void setupPermissions() diff --git a/src/com/cypherx/xauth/xAuthPlayerListener.java b/src/com/cypherx/xauth/xAuthPlayerListener.java index b10705c..9f8b403 100644 --- a/src/com/cypherx/xauth/xAuthPlayerListener.java +++ b/src/com/cypherx/xauth/xAuthPlayerListener.java @@ -24,8 +24,8 @@ public class xAuthPlayerListener extends PlayerListener if (xAuth.settings.getBool("security.filter.enabled") && !plugin.isNameLegal(player.getName())) event.disallow(PlayerLoginEvent.Result.KICK_OTHER, xAuth.strings.getString("misc.filterkickmsg")); - //if (xAuth.settings.getBool("security.filter.blankname") && player.getName().trim().equals("")) - //event.disallow(PlayerLoginEvent.Result.KICK_OTHER, xAuth.strings.getString("misc.blankkickmsg")); + if (xAuth.settings.getBool("security.filter.blankname") && player.getName().trim().equals("")) + event.disallow(PlayerLoginEvent.Result.KICK_OTHER, xAuth.strings.getString("misc.blankkickmsg")); } public void onPlayerJoin(PlayerJoinEvent event) @@ -34,12 +34,18 @@ public class xAuthPlayerListener extends PlayerListener if (!plugin.isLoggedIn(player)) { - plugin.saveInventory(player); - if (!plugin.isRegistered(player.getName())) + { + if (xAuth.settings.getBool("registration.forced")) + plugin.saveInventory(player); + player.sendMessage(xAuth.strings.getString("register.login")); + } else + { + plugin.saveInventory(player); player.sendMessage(xAuth.strings.getString("login.login")); + } } } diff --git a/src/plugin.yml b/src/plugin.yml index 586a4d0..81da00d 100644 --- a/src/plugin.yml +++ b/src/plugin.yml @@ -1,6 +1,6 @@ name: xAuth main: com.cypherx.xauth.xAuth -version: 1.1.6 +version: 1.2 commands: register: @@ -25,4 +25,9 @@ commands: usage: | /toggle reg /toggle changepw - /toggle autosave \ No newline at end of file + /toggle autosave + logout: + description: End a players session and force them to re-authenticate + usage: | + /logout + /logout \ No newline at end of file