mirror of
https://github.com/AuthMe/AuthMeReloaded.git
synced 2024-11-23 18:55:11 +01:00
move GeoIP function into Utils
This commit is contained in:
parent
2cea7387c9
commit
878ab70c2f
@ -175,7 +175,7 @@ public class AuthMe extends JavaPlugin {
|
||||
}
|
||||
|
||||
// Download GeoIp.dat file
|
||||
downloadGeoIp();
|
||||
Utils.checkGeoIP();
|
||||
|
||||
// Load MailApi if needed
|
||||
if (!Settings.getmailAccount.isEmpty() && !Settings.getmailPassword.isEmpty()) {
|
||||
@ -673,54 +673,6 @@ public class AuthMe extends JavaPlugin {
|
||||
return player.getWorld().getSpawnLocation();
|
||||
}
|
||||
|
||||
// Download GeoIp data
|
||||
public void downloadGeoIp() {
|
||||
ConsoleLogger.info("[LICENSE] This product uses data from the GeoLite API created by MaxMind, available at http://www.maxmind.com");
|
||||
File file = new File(getDataFolder(), "GeoIP.dat");
|
||||
try {
|
||||
if (file.exists()) {
|
||||
if (lookupService == null) {
|
||||
lookupService = new LookupService(file);
|
||||
}
|
||||
} else {
|
||||
String url = "http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz";
|
||||
URL downloadUrl = new URL(url);
|
||||
URLConnection conn = downloadUrl.openConnection();
|
||||
conn.setConnectTimeout(10000);
|
||||
conn.connect();
|
||||
InputStream input = conn.getInputStream();
|
||||
if (url.endsWith(".gz")) {
|
||||
input = new GZIPInputStream(input);
|
||||
}
|
||||
OutputStream output = new FileOutputStream(file);
|
||||
byte[] buffer = new byte[2048];
|
||||
int length = input.read(buffer);
|
||||
while (length >= 0) {
|
||||
output.write(buffer, 0, length);
|
||||
length = input.read(buffer);
|
||||
}
|
||||
output.close();
|
||||
input.close();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
ConsoleLogger.writeStackTrace(e);
|
||||
}
|
||||
}
|
||||
|
||||
public String getCountryCode(String ip) {
|
||||
if (lookupService != null) {
|
||||
return lookupService.getCountry(ip).getCode();
|
||||
}
|
||||
return "--";
|
||||
}
|
||||
|
||||
public String getCountryName(String ip) {
|
||||
if (lookupService != null) {
|
||||
return lookupService.getCountry(ip).getName();
|
||||
}
|
||||
return "N/A";
|
||||
}
|
||||
|
||||
public void switchAntiBotMod(boolean mode) {
|
||||
this.antibotMod = mode;
|
||||
Settings.switchAntiBotMod(mode);
|
||||
@ -759,7 +711,7 @@ public class AuthMe extends JavaPlugin {
|
||||
message = message.replace("{WORLD}", player.getWorld().getName());
|
||||
message = message.replace("{SERVER}", server.getServerName());
|
||||
message = message.replace("{VERSION}", server.getBukkitVersion());
|
||||
message = message.replace("{COUNTRY}", this.getCountryName(getIP(player)));
|
||||
message = message.replace("{COUNTRY}", Utils.getCountryName(getIP(player)));
|
||||
return message;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package fr.xephi.authme;
|
||||
|
||||
import com.maxmind.geoip.LookupService;
|
||||
import fr.xephi.authme.cache.auth.PlayerCache;
|
||||
import fr.xephi.authme.cache.limbo.LimboCache;
|
||||
import fr.xephi.authme.cache.limbo.LimboPlayer;
|
||||
@ -13,19 +14,28 @@ import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.zip.GZIPInputStream;
|
||||
|
||||
public class Utils {
|
||||
|
||||
public static AuthMe plugin;
|
||||
|
||||
private static boolean getOnlinePlayersIsCollection;
|
||||
private static Method getOnlinePlayers;
|
||||
public static AuthMe plugin;
|
||||
private static LookupService lookupService;
|
||||
|
||||
static {
|
||||
plugin = AuthMe.getInstance();
|
||||
checkGeoIP();
|
||||
try {
|
||||
Method m = Bukkit.class.getDeclaredMethod("getOnlinePlayers");
|
||||
getOnlinePlayersIsCollection = m.getReturnType() == Collection.class;
|
||||
@ -33,6 +43,59 @@ public class Utils {
|
||||
}
|
||||
}
|
||||
|
||||
// Check and Download GeoIP data if not exist
|
||||
public static boolean checkGeoIP() {
|
||||
if (lookupService != null) {
|
||||
return true;
|
||||
}
|
||||
ConsoleLogger.info("[LICENSE] This product uses data from the GeoLite API created by MaxMind, available at http://www.maxmind.com");
|
||||
File file = new File(Settings.PLUGIN_FOLDER, "GeoIP.dat");
|
||||
try {
|
||||
if (file.exists()) {
|
||||
if (lookupService == null) {
|
||||
lookupService = new LookupService(file);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
String url = "http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz";
|
||||
URL downloadUrl = new URL(url);
|
||||
URLConnection conn = downloadUrl.openConnection();
|
||||
conn.setConnectTimeout(10000);
|
||||
conn.connect();
|
||||
InputStream input = conn.getInputStream();
|
||||
if (conn.getURL().toString().endsWith(".gz")) {
|
||||
input = new GZIPInputStream(input);
|
||||
}
|
||||
OutputStream output = new FileOutputStream(file);
|
||||
byte[] buffer = new byte[2048];
|
||||
int length = input.read(buffer);
|
||||
while (length >= 0) {
|
||||
output.write(buffer, 0, length);
|
||||
length = input.read(buffer);
|
||||
}
|
||||
output.close();
|
||||
input.close();
|
||||
} catch (Exception e) {
|
||||
ConsoleLogger.writeStackTrace(e);
|
||||
return false;
|
||||
}
|
||||
return checkGeoIP();
|
||||
}
|
||||
|
||||
public static String getCountryCode(String ip) {
|
||||
if (checkGeoIP()) {
|
||||
return lookupService.getCountry(ip).getCode();
|
||||
}
|
||||
return "--";
|
||||
}
|
||||
|
||||
public static String getCountryName(String ip) {
|
||||
if (checkGeoIP()) {
|
||||
return lookupService.getCountry(ip).getName();
|
||||
}
|
||||
return "N/A";
|
||||
}
|
||||
|
||||
public static void setGroup(Player player, GroupType group) {
|
||||
if (!Settings.isPermissionCheckEnabled)
|
||||
return;
|
||||
|
@ -249,7 +249,7 @@ public class AuthMePlayerListener implements Listener {
|
||||
return;
|
||||
|
||||
if (!Settings.countriesBlacklist.isEmpty()) {
|
||||
String code = plugin.getCountryCode(event.getAddress().getHostAddress());
|
||||
String code = Utils.getCountryCode(event.getAddress().getHostAddress());
|
||||
if (((code == null) || (Settings.countriesBlacklist.contains(code) && !isAuthAvailable)) && !plugin.authmePermissible(player, "authme.bypassantibot")) {
|
||||
event.setKickMessage(m.send("country_banned")[0]);
|
||||
event.setResult(PlayerLoginEvent.Result.KICK_OTHER);
|
||||
@ -257,7 +257,7 @@ public class AuthMePlayerListener implements Listener {
|
||||
}
|
||||
}
|
||||
if (Settings.enableProtection && !Settings.countries.isEmpty()) {
|
||||
String code = plugin.getCountryCode(event.getAddress().getHostAddress());
|
||||
String code = Utils.getCountryCode(event.getAddress().getHostAddress());
|
||||
if (((code == null) || (!Settings.countries.contains(code) && !isAuthAvailable)) && !plugin.authmePermissible(player, "authme.bypassantibot")) {
|
||||
event.setKickMessage(m.send("country_banned")[0]);
|
||||
event.setResult(PlayerLoginEvent.Result.KICK_OTHER);
|
||||
|
@ -2,6 +2,7 @@ package fr.xephi.authme.listener;
|
||||
|
||||
import fr.xephi.authme.AuthMe;
|
||||
import fr.xephi.authme.ConsoleLogger;
|
||||
import fr.xephi.authme.Utils;
|
||||
import fr.xephi.authme.settings.Messages;
|
||||
import fr.xephi.authme.settings.Settings;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@ -27,10 +28,10 @@ public class AuthMeServerListener implements Listener {
|
||||
if (Settings.countries.isEmpty())
|
||||
return;
|
||||
if (!Settings.countriesBlacklist.isEmpty()) {
|
||||
if (Settings.countriesBlacklist.contains(plugin.getCountryCode(event.getAddress().getHostAddress())))
|
||||
if (Settings.countriesBlacklist.contains(Utils.getCountryCode(event.getAddress().getHostAddress())))
|
||||
event.setMotd(m.send("country_banned")[0]);
|
||||
}
|
||||
if (Settings.countries.contains(plugin.getCountryCode(event.getAddress().getHostAddress()))) {
|
||||
if (Settings.countries.contains(Utils.getCountryCode(event.getAddress().getHostAddress()))) {
|
||||
event.setMotd(plugin.getServer().getMotd());
|
||||
} else {
|
||||
event.setMotd(m.send("country_banned")[0]);
|
||||
|
Loading…
Reference in New Issue
Block a user