diff --git a/CHANGELOG.md b/CHANGELOG.md index 448cb05e..a278716f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,10 @@ ######1.9 +* Refactored/Cleaned up a lot of code * [API] Deprecated platform specific authplugin. Please use AuthPlugin< platform specific player type > * [API] Deprecated bukkit's password generator. Please use PasswordGenerator< platform specific player type > * Added second attempt login -> cracked login -* Add cracked whitelist (switch-mode -> switching to online-mode from offlinemode) +* Added cracked whitelist (switch-mode -> switching to online-mode from offlinemode) * Added configuration to disable auto logins for 2Factor authentication * Add missing add-premium-other message * Fix ProtocolSupport autoRegister diff --git a/bukkit/pom.xml b/bukkit/pom.xml index d522c5f5..c62d6c3a 100644 --- a/bukkit/pom.xml +++ b/bukkit/pom.xml @@ -104,6 +104,7 @@ LoginSecurity-2 -9c09e73b7f-1 + true * @@ -116,6 +117,7 @@ com.lenis0012.bukkit loginsecurity 2.1.3-SNAPSHOT + true * @@ -128,6 +130,7 @@ com.github.games647 LogIt 9e3581db27 + true provided @@ -141,6 +144,7 @@ com.github.RoyalDev RoyalAuth -e21354a9b7-1 + true * diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/BukkitCore.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/BukkitCore.java index 50fe68d1..6e58d241 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/BukkitCore.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/BukkitCore.java @@ -1,45 +1,24 @@ package com.github.games647.fastlogin.bukkit; -import com.github.games647.fastlogin.core.FastLoginCore; +import com.github.games647.fastlogin.core.shared.FastLoginCore; import com.google.common.base.Charsets; -import com.google.common.cache.CacheLoader; import com.google.common.util.concurrent.ThreadFactoryBuilder; import java.io.File; import java.io.InputStreamReader; -import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ThreadFactory; -import java.util.concurrent.TimeUnit; import java.util.logging.Logger; import org.bukkit.ChatColor; import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Player; -public class BukkitCore extends FastLoginCore { - - public static ConcurrentMap buildCache(int minutes, int maxSize) { - CompatibleCacheBuilder builder = CompatibleCacheBuilder.newBuilder(); - - if (minutes > 0) { - builder.expireAfterWrite(minutes, TimeUnit.MINUTES); - } - - if (maxSize > 0) { - builder.maximumSize(maxSize); - } - - return builder.build(new CacheLoader() { - @Override - public V load(K key) throws Exception { - throw new UnsupportedOperationException("Not supported yet."); - } - }); - } +public class BukkitCore extends FastLoginCore { private final FastLoginBukkit plugin; public BukkitCore(FastLoginBukkit plugin) { - super(BukkitCore.buildCache(5, 0), plugin.getConfig().getValues(false)); + super(plugin.getConfig().getValues(false)); this.plugin = plugin; } diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/FastLoginBukkit.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/FastLoginBukkit.java index 387c987c..d8fdd0b1 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/FastLoginBukkit.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/FastLoginBukkit.java @@ -14,13 +14,10 @@ import com.github.games647.fastlogin.bukkit.listener.protocollib.LoginSkinApplyL import com.github.games647.fastlogin.bukkit.listener.protocollib.StartPacketListener; import com.github.games647.fastlogin.bukkit.listener.protocolsupport.ProtocolSupportListener; import com.github.games647.fastlogin.bukkit.tasks.DelayedAuthHook; -import com.github.games647.fastlogin.core.FastLoginCore; -import com.google.common.collect.Sets; +import com.github.games647.fastlogin.core.shared.FastLoginCore; import java.security.KeyPair; import java.util.List; -import java.util.Set; -import java.util.UUID; import java.util.concurrent.ConcurrentMap; import java.util.logging.Level; @@ -38,18 +35,13 @@ public class FastLoginBukkit extends JavaPlugin { private final KeyPair keyPair = EncryptionUtil.generateKeyPair(); private boolean bungeeCord; - private final FastLoginCore core = new BukkitCore(this); + private final BukkitCore core = new BukkitCore(this); private boolean serverStarted; - private final Set pendingConfirms = Sets.newHashSet(); - - //this map is thread-safe for async access (Packet Listener) - //SafeCacheBuilder is used in order to be version independent - private final ConcurrentMap session = BukkitCore.buildCache(1, -1); //1 minutes should be enough as a timeout for bad internet connection (Server, Client and Mojang) + private final ConcurrentMap session = FastLoginCore.buildCache(1, -1); private BukkitAuthPlugin authPlugin; - private PasswordGenerator passwordGenerator = new DefaultPasswordGenerator(); @Override public void onEnable() { @@ -58,8 +50,7 @@ public class FastLoginBukkit extends JavaPlugin { List ipAddresses = getConfig().getStringList("ip-addresses"); int requestLimit = getConfig().getInt("mojang-request-limit"); - ConcurrentMap requestCache = BukkitCore.buildCache(10, -1); - MojangApiBukkit mojangApi = new MojangApiBukkit(requestCache, getLogger(), ipAddresses, requestLimit); + MojangApiBukkit mojangApi = new MojangApiBukkit(getLogger(), ipAddresses, requestLimit); core.setMojangApiConnector(mojangApi); try { @@ -67,8 +58,7 @@ public class FastLoginBukkit extends JavaPlugin { bungeeCord = Class.forName("org.spigotmc.SpigotConfig").getDeclaredField("bungee").getBoolean(null); } } catch (Exception | NoSuchMethodError ex) { - getLogger().warning("Cannot check bungeecord support. You use a non-spigot build"); - ex.printStackTrace(); + getLogger().log(Level.WARNING, "Cannot check bungeecord support. You use a non-spigot build", ex); } if (getServer().getOnlineMode()) { @@ -86,15 +76,7 @@ public class FastLoginBukkit extends JavaPlugin { getServer().getMessenger().registerOutgoingPluginChannel(this, getName()); //register listeners on success } else { - String driver = getConfig().getString("driver"); - String host = getConfig().getString("host", ""); - int port = getConfig().getInt("port", 3306); - String database = getConfig().getString("database"); - - String username = getConfig().getString("username", ""); - String password = getConfig().getString("password", ""); - - if (!core.setupDatabase(driver, host, port, database, username, password)) { + if (!core.setupDatabase()) { setEnabled(false); return; } @@ -143,16 +125,13 @@ public class FastLoginBukkit extends JavaPlugin { } } - public FastLoginCore getCore() { + public BukkitCore getCore() { return core; } - public String generateStringPassword(Player player) { - return passwordGenerator.getRandomPassword(player); - } - + @Deprecated public void setPasswordGenerator(PasswordGenerator passwordGenerator) { - this.passwordGenerator = passwordGenerator; + core.setPasswordGenerator(passwordGenerator); } /** @@ -210,10 +189,6 @@ public class FastLoginBukkit extends JavaPlugin { return serverStarted; } - public Set getPendingConfirms() { - return pendingConfirms; - } - public void setServerStarted() { if (!this.serverStarted) { this.serverStarted = true; diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/MojangApiBukkit.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/MojangApiBukkit.java index 04b2cad5..c8639aa5 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/MojangApiBukkit.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/MojangApiBukkit.java @@ -1,14 +1,13 @@ package com.github.games647.fastlogin.bukkit; -import com.github.games647.fastlogin.core.FastLoginCore; -import com.github.games647.fastlogin.core.MojangApiConnector; +import com.github.games647.fastlogin.core.shared.FastLoginCore; +import com.github.games647.fastlogin.core.shared.MojangApiConnector; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.util.List; import java.util.UUID; -import java.util.concurrent.ConcurrentMap; import java.util.logging.Level; import java.util.logging.Logger; @@ -21,9 +20,8 @@ public class MojangApiBukkit extends MojangApiConnector { //mojang api check to prove a player is logged in minecraft and made a join server request private static final String HAS_JOINED_URL = "https://sessionserver.mojang.com/session/minecraft/hasJoined?"; - public MojangApiBukkit(ConcurrentMap requests, Logger logger, List localAddresses - , int rateLimit) { - super(requests, logger, localAddresses, rateLimit); + public MojangApiBukkit(Logger logger, List localAddresses, int rateLimit) { + super(logger, localAddresses, rateLimit); } @Override diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/PasswordGenerator.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/PasswordGenerator.java index 85d8a6fe..c07d8481 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/PasswordGenerator.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/PasswordGenerator.java @@ -4,10 +4,10 @@ import org.bukkit.entity.Player; /** * - * @deprecated please use com.github.games647.fastlogin.core.shared.PasswordGenerator + * @deprecated please use com.github.games647.fastlogin.core.hooks.PasswordGenerator */ @Deprecated -public interface PasswordGenerator { +public interface PasswordGenerator extends com.github.games647.fastlogin.core.hooks.PasswordGenerator { String getRandomPassword(Player player); } diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/commands/ImportCommand.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/commands/ImportCommand.java index ecfedf4f..e7d043b8 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/commands/ImportCommand.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/commands/ImportCommand.java @@ -2,7 +2,7 @@ package com.github.games647.fastlogin.bukkit.commands; import com.github.games647.fastlogin.bukkit.FastLoginBukkit; import com.github.games647.fastlogin.core.AuthStorage; -import com.github.games647.fastlogin.core.FastLoginCore; +import com.github.games647.fastlogin.core.shared.FastLoginCore; import com.github.games647.fastlogin.core.importer.ImportPlugin; import org.bukkit.ChatColor; diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/commands/PremiumCommand.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/commands/PremiumCommand.java index 171a2cc3..bda241ee 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/commands/PremiumCommand.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/commands/PremiumCommand.java @@ -44,13 +44,14 @@ public class PremiumCommand implements CommandExecutor { } } else { UUID id = ((Player) sender).getUniqueId(); - if (plugin.getConfig().getBoolean("premium-warning") && !plugin.getPendingConfirms().contains(id)) { + if (plugin.getConfig().getBoolean("premium-warning") + && !plugin.getCore().getPendingConfirms().contains(id)) { sender.sendMessage(plugin.getCore().getMessage("premium-warning")); - plugin.getPendingConfirms().add(id); + plugin.getCore().getPendingConfirms().add(id); return true; } - plugin.getPendingConfirms().remove(id); + plugin.getCore().getPendingConfirms().remove(id); //todo: load async final PlayerProfile profile = plugin.getCore().getStorage().loadProfile(sender.getName()); if (profile.isPremium()) { diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/hooks/BukkitAuthPlugin.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/hooks/BukkitAuthPlugin.java index fd30a6d4..3d25b325 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/hooks/BukkitAuthPlugin.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/hooks/BukkitAuthPlugin.java @@ -1,11 +1,11 @@ package com.github.games647.fastlogin.bukkit.hooks; -import com.github.games647.fastlogin.core.AuthPlugin; +import com.github.games647.fastlogin.core.hooks.AuthPlugin; import org.bukkit.entity.Player; /** - * @deprecated please use com.github.games647.fastlogin.core.AuthPlugin + * @deprecated please use com.github.games647.fastlogin.core.hooks.AuthPlugin */ @Deprecated public interface BukkitAuthPlugin extends AuthPlugin { diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/BukkitJoinListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/BukkitJoinListener.java index 0488a041..50ee0eac 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/BukkitJoinListener.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/BukkitJoinListener.java @@ -48,6 +48,6 @@ public class BukkitJoinListener implements Listener { public void onPlayerQuit(PlayerQuitEvent quitEvent) { Player player = quitEvent.getPlayer(); player.removeMetadata(plugin.getName(), plugin); - plugin.getPendingConfirms().remove(player.getUniqueId()); + plugin.getCore().getPendingConfirms().remove(player.getUniqueId()); } } diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/tasks/ForceLoginTask.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/tasks/ForceLoginTask.java index 28b6c46b..72665336 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/tasks/ForceLoginTask.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/tasks/ForceLoginTask.java @@ -88,7 +88,7 @@ public class ForceLoginTask implements Runnable { private boolean forceRegister(BukkitAuthPlugin authPlugin, Player player) { plugin.getLogger().log(Level.FINE, "Register player {0}", player.getName()); - String generatedPassword = plugin.generateStringPassword(player); + String generatedPassword = plugin.getCore().getPasswordGenerator().getRandomPassword(player); boolean success = authPlugin.forceRegister(player, generatedPassword); String message = plugin.getCore().getMessage("auto-register"); if (success && message != null) { diff --git a/bungee/pom.xml b/bungee/pom.xml index 2d1df209..ce1299cb 100644 --- a/bungee/pom.xml +++ b/bungee/pom.xml @@ -44,13 +44,6 @@ 1.8-SNAPSHOT provided - com.github.MatteCarra diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/BungeeCore.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/BungeeCore.java index 34c0f62e..ed8aefc8 100644 --- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/BungeeCore.java +++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/BungeeCore.java @@ -1,7 +1,6 @@ package com.github.games647.fastlogin.bungee; -import com.github.games647.fastlogin.core.FastLoginCore; -import com.google.common.cache.CacheBuilder; +import com.github.games647.fastlogin.core.shared.FastLoginCore; import com.google.common.collect.Maps; import com.google.common.util.concurrent.ThreadFactoryBuilder; @@ -12,23 +11,22 @@ import java.nio.file.Files; import java.util.Collection; import java.util.Map; import java.util.concurrent.ThreadFactory; -import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.scheduler.GroupedThreadFactory; import net.md_5.bungee.config.Configuration; import net.md_5.bungee.config.ConfigurationProvider; import net.md_5.bungee.config.YamlConfiguration; -public class BungeeCore extends FastLoginCore { +public class BungeeCore extends FastLoginCore { private final FastLoginBungee plugin; public BungeeCore(FastLoginBungee plugin) { - super(CacheBuilder.newBuilder().expireAfterWrite(5, TimeUnit.MINUTES).build().asMap() - , generateConfigMap(plugin.getConfig())); + super(generateConfigMap(plugin.getConfig())); this.plugin = plugin; } diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/FastLoginBungee.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/FastLoginBungee.java index f232800a..f87e3db4 100644 --- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/FastLoginBungee.java +++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/FastLoginBungee.java @@ -4,10 +4,6 @@ import com.github.games647.fastlogin.bungee.hooks.BungeeAuthHook; import com.github.games647.fastlogin.bungee.hooks.BungeeAuthPlugin; import com.github.games647.fastlogin.bungee.listener.PlayerConnectionListener; import com.github.games647.fastlogin.bungee.listener.PluginMessageListener; -import com.github.games647.fastlogin.core.FastLoginCore; -import com.github.games647.fastlogin.core.shared.DefaultPasswordGenerator; -import com.github.games647.fastlogin.core.shared.PasswordGenerator; -import com.google.common.cache.CacheBuilder; import com.google.common.collect.Maps; import com.google.common.collect.Sets; @@ -17,11 +13,9 @@ import java.util.List; import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentMap; -import java.util.concurrent.TimeUnit; import java.util.logging.Level; import net.md_5.bungee.api.connection.PendingConnection; -import net.md_5.bungee.api.connection.ProxiedPlayer; import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.config.Configuration; import net.md_5.bungee.config.ConfigurationProvider; @@ -32,11 +26,10 @@ import net.md_5.bungee.config.YamlConfiguration; */ public class FastLoginBungee extends Plugin { - private final FastLoginCore loginCore = new BungeeCore(this); + private final BungeeCore loginCore = new BungeeCore(this); private BungeeAuthPlugin bungeeAuthPlugin; private Configuration config; - private final PasswordGenerator passwordGenerator = new DefaultPasswordGenerator<>(); private final Set pendingConfirms = Sets.newHashSet(); private final ConcurrentMap session = Maps.newConcurrentMap(); @@ -52,19 +45,10 @@ public class FastLoginBungee extends Plugin { List ipAddresses = getConfig().getStringList("ip-addresses"); int requestLimit = getConfig().getInt("mojang-request-limit"); - ConcurrentMap requestCache = CacheBuilder.newBuilder() - .expireAfterWrite(10, TimeUnit.MINUTES).build().asMap(); - MojangApiBungee mojangApi = new MojangApiBungee(requestCache, getLogger(), ipAddresses, requestLimit); + MojangApiBungee mojangApi = new MojangApiBungee(getLogger(), ipAddresses, requestLimit); loginCore.setMojangApiConnector(mojangApi); - String driver = config.getString("driver"); - String host = config.getString("host", ""); - int port = config.getInt("port", 3306); - String database = config.getString("database"); - - String username = config.getString("username", ""); - String password = config.getString("password", ""); - if (!loginCore.setupDatabase(driver, host, port, database, username, password)) { + if (!loginCore.setupDatabase()) { return; } } catch (IOException ioExc) { @@ -85,16 +69,12 @@ public class FastLoginBungee extends Plugin { registerHook(); } - public String generatePassword(ProxiedPlayer player) { - return passwordGenerator.getRandomPassword(player); - } - @Override public void onDisable() { loginCore.close(); } - public FastLoginCore getCore() { + public BungeeCore getCore() { return loginCore; } @@ -110,10 +90,6 @@ public class FastLoginBungee extends Plugin { return session; } - public Set getPendingConfirms() { - return pendingConfirms; - } - /** * Get the auth plugin hook for BungeeCord * diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/ImportCommand.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/ImportCommand.java index 311d387b..ce812e97 100644 --- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/ImportCommand.java +++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/ImportCommand.java @@ -2,7 +2,7 @@ package com.github.games647.fastlogin.bungee; import com.github.games647.fastlogin.bungee.FastLoginBungee; import com.github.games647.fastlogin.core.AuthStorage; -import com.github.games647.fastlogin.core.FastLoginCore; +import com.github.games647.fastlogin.core.shared.FastLoginCore; import com.github.games647.fastlogin.core.importer.ImportPlugin; import net.md_5.bungee.api.ChatColor; diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/MojangApiBungee.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/MojangApiBungee.java index 45c3981f..47258922 100644 --- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/MojangApiBungee.java +++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/MojangApiBungee.java @@ -1,20 +1,18 @@ package com.github.games647.fastlogin.bungee; -import com.github.games647.fastlogin.core.FastLoginCore; -import com.github.games647.fastlogin.core.MojangApiConnector; +import com.github.games647.fastlogin.core.shared.FastLoginCore; +import com.github.games647.fastlogin.core.shared.MojangApiConnector; import java.util.List; import java.util.UUID; -import java.util.concurrent.ConcurrentMap; import java.util.logging.Logger; import net.md_5.bungee.BungeeCord; public class MojangApiBungee extends MojangApiConnector { - public MojangApiBungee(ConcurrentMap requests, Logger logger, List localAddresses - , int rateLimit) { - super(requests, logger, localAddresses, rateLimit); + public MojangApiBungee(Logger logger, List localAddresses, int rateLimit) { + super(logger, localAddresses, rateLimit); } @Override diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/hooks/BungeeAuthPlugin.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/hooks/BungeeAuthPlugin.java index ff1043c3..cd688efb 100644 --- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/hooks/BungeeAuthPlugin.java +++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/hooks/BungeeAuthPlugin.java @@ -1,10 +1,10 @@ package com.github.games647.fastlogin.bungee.hooks; -import com.github.games647.fastlogin.core.AuthPlugin; +import com.github.games647.fastlogin.core.hooks.AuthPlugin; import net.md_5.bungee.api.connection.ProxiedPlayer; /** - * @deprecated please use com.github.games647.fastlogin.core.AuthPlugin + * @deprecated please use com.github.games647.fastlogin.core.hooks.AuthPlugin */ @Deprecated public interface BungeeAuthPlugin extends AuthPlugin { diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/PlayerConnectionListener.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/PlayerConnectionListener.java index 0ac4a027..520ff401 100644 --- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/PlayerConnectionListener.java +++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/PlayerConnectionListener.java @@ -103,6 +103,6 @@ public class PlayerConnectionListener implements Listener { public void onDisconnect(PlayerDisconnectEvent disconnectEvent) { ProxiedPlayer player = disconnectEvent.getPlayer(); plugin.getSession().remove(player.getPendingConnection()); - plugin.getPendingConfirms().remove(player.getUniqueId()); + plugin.getCore().getPendingConfirms().remove(player.getUniqueId()); } } diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/PluginMessageListener.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/PluginMessageListener.java index e3a5fa9c..76292b93 100644 --- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/PluginMessageListener.java +++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/PluginMessageListener.java @@ -55,14 +55,14 @@ public class PluginMessageListener implements Listener { String playerName = dataInput.readUTF(); if (playerName.equals(forPlayer.getName()) && plugin.getConfig().getBoolean("premium-warning") - && !plugin.getPendingConfirms().contains(forPlayer.getUniqueId())) { + && !plugin.getCore().getPendingConfirms().contains(forPlayer.getUniqueId())) { String message = plugin.getCore().getMessage("premium-warning"); forPlayer.sendMessage(TextComponent.fromLegacyText(message)); - plugin.getPendingConfirms().add(forPlayer.getUniqueId()); + plugin.getCore().getPendingConfirms().add(forPlayer.getUniqueId()); return; } - plugin.getPendingConfirms().remove(forPlayer.getUniqueId()); + plugin.getCore().getPendingConfirms().remove(forPlayer.getUniqueId()); AsyncToggleMessage task = new AsyncToggleMessage(plugin, forPlayer, playerName, true); ProxyServer.getInstance().getScheduler().runAsync(plugin, task); } else if ("OFF".equals(subchannel)) { diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/tasks/ForceLoginTask.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/tasks/ForceLoginTask.java index 94b5fd20..a89d9c05 100644 --- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/tasks/ForceLoginTask.java +++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/tasks/ForceLoginTask.java @@ -81,7 +81,7 @@ public class ForceLoginTask implements Runnable { session.setAlreadyLogged(true); - String password = plugin.generatePassword(player); + String password = plugin.getCore().getPasswordGenerator().getRandomPassword(player); if (authPlugin.forceRegister(player, password)) { //save will happen on success message from bukkit sendBukkitLoginNotification(true); diff --git a/core/pom.xml b/core/pom.xml index 914ab156..0cb95aa3 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -28,5 +28,12 @@ slf4j-jdk14 1.7.21 + + + com.google.guava + guava + 10.0 + provided + diff --git a/core/src/main/java/com/github/games647/fastlogin/core/AuthStorage.java b/core/src/main/java/com/github/games647/fastlogin/core/AuthStorage.java index a16cbace..39d52aae 100644 --- a/core/src/main/java/com/github/games647/fastlogin/core/AuthStorage.java +++ b/core/src/main/java/com/github/games647/fastlogin/core/AuthStorage.java @@ -1,5 +1,6 @@ package com.github.games647.fastlogin.core; +import com.github.games647.fastlogin.core.shared.FastLoginCore; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/CompatibleCacheBuilder.java b/core/src/main/java/com/github/games647/fastlogin/core/CompatibleCacheBuilder.java similarity index 99% rename from bukkit/src/main/java/com/github/games647/fastlogin/bukkit/CompatibleCacheBuilder.java rename to core/src/main/java/com/github/games647/fastlogin/core/CompatibleCacheBuilder.java index 6292f56e..0e2c3f5e 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/CompatibleCacheBuilder.java +++ b/core/src/main/java/com/github/games647/fastlogin/core/CompatibleCacheBuilder.java @@ -1,4 +1,4 @@ -package com.github.games647.fastlogin.bukkit; +package com.github.games647.fastlogin.core; import java.lang.reflect.Method; import java.util.concurrent.ConcurrentMap; @@ -10,14 +10,13 @@ import com.google.common.cache.CacheLoader; import com.google.common.cache.RemovalListener; /** - * Represents a Guava CacheBuilder that is compatible with both Guava 10 and 13 + * Represents a Guava CacheBuilder that is compatible with both Guava 10 (Minecraft 1.7.X) and 13 */ public class CompatibleCacheBuilder { private static Method BUILD_METHOD; private static Method AS_MAP_METHOD; - /** * Construct a new safe cache builder. * diff --git a/core/src/main/java/com/github/games647/fastlogin/core/AuthPlugin.java b/core/src/main/java/com/github/games647/fastlogin/core/hooks/AuthPlugin.java similarity index 97% rename from core/src/main/java/com/github/games647/fastlogin/core/AuthPlugin.java rename to core/src/main/java/com/github/games647/fastlogin/core/hooks/AuthPlugin.java index 7772fa07..c97e7452 100644 --- a/core/src/main/java/com/github/games647/fastlogin/core/AuthPlugin.java +++ b/core/src/main/java/com/github/games647/fastlogin/core/hooks/AuthPlugin.java @@ -1,4 +1,4 @@ -package com.github.games647.fastlogin.core; +package com.github.games647.fastlogin.core.hooks; /** * Represents a supporting authentication plugin in BungeeCord and Bukkit/Spigot/... servers diff --git a/core/src/main/java/com/github/games647/fastlogin/core/shared/DefaultPasswordGenerator.java b/core/src/main/java/com/github/games647/fastlogin/core/hooks/DefaultPasswordGenerator.java similarity index 92% rename from core/src/main/java/com/github/games647/fastlogin/core/shared/DefaultPasswordGenerator.java rename to core/src/main/java/com/github/games647/fastlogin/core/hooks/DefaultPasswordGenerator.java index 17f324d1..ef393b87 100644 --- a/core/src/main/java/com/github/games647/fastlogin/core/shared/DefaultPasswordGenerator.java +++ b/core/src/main/java/com/github/games647/fastlogin/core/hooks/DefaultPasswordGenerator.java @@ -1,4 +1,4 @@ -package com.github.games647.fastlogin.core.shared; +package com.github.games647.fastlogin.core.hooks; import java.util.Random; diff --git a/core/src/main/java/com/github/games647/fastlogin/core/shared/PasswordGenerator.java b/core/src/main/java/com/github/games647/fastlogin/core/hooks/PasswordGenerator.java similarity index 62% rename from core/src/main/java/com/github/games647/fastlogin/core/shared/PasswordGenerator.java rename to core/src/main/java/com/github/games647/fastlogin/core/hooks/PasswordGenerator.java index 0400b88b..f7dc7832 100644 --- a/core/src/main/java/com/github/games647/fastlogin/core/shared/PasswordGenerator.java +++ b/core/src/main/java/com/github/games647/fastlogin/core/hooks/PasswordGenerator.java @@ -1,4 +1,4 @@ -package com.github.games647.fastlogin.core.shared; +package com.github.games647.fastlogin.core.hooks; public interface PasswordGenerator { diff --git a/core/src/main/java/com/github/games647/fastlogin/core/FastLoginCore.java b/core/src/main/java/com/github/games647/fastlogin/core/shared/FastLoginCore.java similarity index 66% rename from core/src/main/java/com/github/games647/fastlogin/core/FastLoginCore.java rename to core/src/main/java/com/github/games647/fastlogin/core/shared/FastLoginCore.java index 4966b53a..79fda1a4 100644 --- a/core/src/main/java/com/github/games647/fastlogin/core/FastLoginCore.java +++ b/core/src/main/java/com/github/games647/fastlogin/core/shared/FastLoginCore.java @@ -1,23 +1,51 @@ -package com.github.games647.fastlogin.core; +package com.github.games647.fastlogin.core.shared; +import com.github.games647.fastlogin.core.AuthStorage; +import com.github.games647.fastlogin.core.CompatibleCacheBuilder; +import com.github.games647.fastlogin.core.SharedConfig; +import com.github.games647.fastlogin.core.hooks.DefaultPasswordGenerator; +import com.github.games647.fastlogin.core.hooks.PasswordGenerator; import com.github.games647.fastlogin.core.importer.AutoInImporter; import com.github.games647.fastlogin.core.importer.ImportPlugin; import com.github.games647.fastlogin.core.importer.Importer; +import com.google.common.cache.CacheLoader; +import com.google.common.collect.Sets; import java.io.File; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Map; +import java.util.Set; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.logging.Logger; -public abstract class FastLoginCore { - +public abstract class FastLoginCore { + + public static ConcurrentMap buildCache(int expireAfterWrite, int maxSize) { + CompatibleCacheBuilder builder = CompatibleCacheBuilder.newBuilder(); + + if (expireAfterWrite > 0) { + builder.expireAfterWrite(expireAfterWrite, TimeUnit.MINUTES); + } + + if (maxSize > 0) { + builder.maximumSize(maxSize); + } + + return builder.build(new CacheLoader() { + @Override + public V load(K key) throws Exception { + throw new UnsupportedOperationException("Not supported yet."); + } + }); + } + public static UUID parseId(String withoutDashes) { if (withoutDashes == null) { return null; @@ -33,13 +61,15 @@ public abstract class FastLoginCore { protected final Map localeMessages = new ConcurrentHashMap<>(); private final ConcurrentMap pendingLogins; + private final Set pendingConfirms = Sets.newHashSet(); private final SharedConfig sharedConfig; private MojangApiConnector mojangApiConnector; + private PasswordGenerator passwordGenerator = new DefaultPasswordGenerator<>(); private AuthStorage storage; - public FastLoginCore(ConcurrentMap pendingLogins, Map config) { - this.pendingLogins = pendingLogins; + public FastLoginCore(Map config) { + this.pendingLogins = FastLoginCore.buildCache(5, 0); this.sharedConfig = new SharedConfig(config); } @@ -69,7 +99,15 @@ public abstract class FastLoginCore { public abstract void loadConfig(); - public boolean setupDatabase(String driver, String host, int port, String database, String user, String password) { + public boolean setupDatabase() { + String driver = sharedConfig.get("driver"); + String host = sharedConfig.get("host", ""); + int port = sharedConfig.get("port", 3306); + String database = sharedConfig.get("database"); + + String user = sharedConfig.get("username", ""); + String password = sharedConfig.get("password", ""); + storage = new AuthStorage(this, driver, host, port, database, user, password); try { storage.createTables(); @@ -124,10 +162,22 @@ public abstract class FastLoginCore { return sharedConfig; } + public PasswordGenerator getPasswordGenerator() { + return passwordGenerator; + } + + public void setPasswordGenerator(PasswordGenerator passwordGenerator) { + this.passwordGenerator = passwordGenerator; + } + public ConcurrentMap getPendingLogins() { return pendingLogins; } + public Set getPendingConfirms() { + return pendingConfirms; + } + public void close() { if (storage != null) { storage.close(); diff --git a/core/src/main/java/com/github/games647/fastlogin/core/shared/JoinManagement.java b/core/src/main/java/com/github/games647/fastlogin/core/shared/JoinManagement.java index 59fba62d..6122d7b4 100644 --- a/core/src/main/java/com/github/games647/fastlogin/core/shared/JoinManagement.java +++ b/core/src/main/java/com/github/games647/fastlogin/core/shared/JoinManagement.java @@ -1,7 +1,6 @@ package com.github.games647.fastlogin.core.shared; -import com.github.games647.fastlogin.core.AuthPlugin; -import com.github.games647.fastlogin.core.FastLoginCore; +import com.github.games647.fastlogin.core.hooks.AuthPlugin; import com.github.games647.fastlogin.core.PlayerProfile; import com.github.games647.fastlogin.core.SharedConfig; import java.util.UUID; diff --git a/core/src/main/java/com/github/games647/fastlogin/core/MojangApiConnector.java b/core/src/main/java/com/github/games647/fastlogin/core/shared/MojangApiConnector.java similarity index 95% rename from core/src/main/java/com/github/games647/fastlogin/core/MojangApiConnector.java rename to core/src/main/java/com/github/games647/fastlogin/core/shared/MojangApiConnector.java index 13945bca..a6981402 100644 --- a/core/src/main/java/com/github/games647/fastlogin/core/MojangApiConnector.java +++ b/core/src/main/java/com/github/games647/fastlogin/core/shared/MojangApiConnector.java @@ -1,5 +1,6 @@ -package com.github.games647.fastlogin.core; +package com.github.games647.fastlogin.core.shared; +import com.github.games647.fastlogin.core.BalancedSSLFactory; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; @@ -36,17 +37,15 @@ public abstract class MojangApiConnector { //compile the pattern only on plugin enable -> and this have to be threadsafe private final Pattern playernameMatcher = Pattern.compile(VALID_PLAYERNAME); - private final ConcurrentMap requests; + private final ConcurrentMap requests = FastLoginCore.buildCache(10, -1); private final BalancedSSLFactory sslFactory; private final int rateLimit; private long lastRateLimit; protected final Logger logger; - public MojangApiConnector(ConcurrentMap requests, Logger logger, List localAddresses - , int rateLimit) { + public MojangApiConnector(Logger logger, List localAddresses, int rateLimit) { this.logger = logger; - this.requests = requests; if (rateLimit > 600) { this.rateLimit = 600;