From 705cc7ba8d2370cae55863977e28e48eb8c25722 Mon Sep 17 00:00:00 2001 From: Xephi Date: Mon, 21 Dec 2015 13:06:25 +0100 Subject: [PATCH] Fix Verygames Ipclean issue --- src/main/java/fr/xephi/authme/AuthMe.java | 85 ++++++++++--------- .../authme/listener/AuthMePlayerListener.java | 3 + 2 files changed, 46 insertions(+), 42 deletions(-) diff --git a/src/main/java/fr/xephi/authme/AuthMe.java b/src/main/java/fr/xephi/authme/AuthMe.java index d53fb6b1..f79ef8aa 100644 --- a/src/main/java/fr/xephi/authme/AuthMe.java +++ b/src/main/java/fr/xephi/authme/AuthMe.java @@ -851,16 +851,50 @@ public class AuthMe extends JavaPlugin { return message; } - public String getIP(Player player) { - String name = player.getName().toLowerCase(); + /** + * Gets a player's real IP through VeryGames method. + * + * @param player The player to process. + * + */ + public void getVerygamesIp(final Player player) + { + final String name = player.getName().toLowerCase(); + Bukkit.getScheduler().runTaskAsynchronously(plugin, new Runnable(){ + @Override + public void run() { + String realIP = player.getAddress().getAddress().getHostAddress(); + String sUrl = "http://monitor-1.verygames.net/api/?action=ipclean-real-ip&out=raw&ip=%IP%&port=%PORT%"; + sUrl = sUrl.replace("%IP%", realIP) + .replace("%PORT%", "" + player.getAddress().getPort()); + try { + URL url = new URL(sUrl); + URLConnection urlCon = url.openConnection(); + try (BufferedReader in = new BufferedReader(new InputStreamReader(urlCon.getInputStream()))) { + String inputLine = in.readLine(); + if (!StringUtils.isEmpty(inputLine) && !inputLine.equalsIgnoreCase("error") + && !inputLine.contains("error")) { + realIP = inputLine; + } + } catch (IOException e) { + ConsoleLogger.showError("Could not read from Very Games API - " + StringUtils.formatException(e)); + } + } catch (IOException e) { + ConsoleLogger.showError("Could not fetch Very Games API with URL '" + sUrl + "' - " + + StringUtils.formatException(e)); + } + if (realIp.containsKey(name)) + realIp.remove(name); + realIp.putIfAbsent(name, realIP); + } + }); + } + + public String getIP(final Player player) { + final String name = player.getName().toLowerCase(); String ip = player.getAddress().getAddress().getHostAddress(); - if (Settings.bungee) { - if (realIp.containsKey(name)) - ip = realIp.get(name); - } - if (Settings.checkVeryGames) - if (getVeryGamesIp(player) != null) - ip = getVeryGamesIp(player); + if (realIp.containsKey(name)) + ip = realIp.get(name); return ip; } @@ -886,39 +920,6 @@ public class AuthMe extends JavaPlugin { return moduleManager; } - /** - * Gets a player's real IP through VeryGames method. - * - * @param player The player to process. - * - * @return The real IP of the player. - */ - // TODO: Cache the result or run it async, it can cause trouble if verygames server isn't responding. - @Deprecated - public String getVeryGamesIp(Player player) { - String realIP = player.getAddress().getAddress().getHostAddress(); - String sUrl = "http://monitor-1.verygames.net/api/?action=ipclean-real-ip&out=raw&ip=%IP%&port=%PORT%"; - sUrl = sUrl.replace("%IP%", player.getAddress().getAddress().getHostAddress()) - .replace("%PORT%", "" + player.getAddress().getPort()); - try { - URL url = new URL(sUrl); - URLConnection urlCon = url.openConnection(); - try (BufferedReader in = new BufferedReader(new InputStreamReader(urlCon.getInputStream()))) { - String inputLine = in.readLine(); - if (!StringUtils.isEmpty(inputLine) && !inputLine.equalsIgnoreCase("error") - && !inputLine.contains("error")) { - realIP = inputLine; - } - } catch (IOException e) { - ConsoleLogger.showError("Could not read from Very Games API - " + StringUtils.formatException(e)); - } - } catch (IOException e) { - ConsoleLogger.showError("Could not fetch Very Games API with URL '" + sUrl + "' - " - + StringUtils.formatException(e)); - } - return realIP; - } - public CommandHandler getCommandHandler() { return this.commandHandler; } diff --git a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java index 5a4f0a15..f86be704 100644 --- a/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java +++ b/src/main/java/fr/xephi/authme/listener/AuthMePlayerListener.java @@ -210,6 +210,9 @@ public class AuthMePlayerListener implements Listener { joinMessage.put(name, joinMsg); } + if (Settings.checkVeryGames) + plugin.getVerygamesIp(player); + // Shedule login task so works after the prelogin // (Fix found by Koolaid5000) Bukkit.getScheduler().runTask(plugin, new Runnable() {