From b534765ff8c82ebf185feb162739a5c609d5c590 Mon Sep 17 00:00:00 2001 From: games647 Date: Fri, 16 Mar 2018 15:14:35 +0100 Subject: [PATCH] Always forward premium status to spigot --- .gitignore | 39 ++++++++++--------- .../fastlogin/bukkit/FastLoginBukkit.java | 25 ++++++++---- .../bukkit/listener/BungeeListener.java | 18 ++++++--- ...nListener.java => ConnectionListener.java} | 5 ++- .../bungee/hooks/BungeeAuthHook.java | 1 - .../bungee/listener/ConnectListener.java | 1 + .../bungee/listener/MessageListener.java | 4 +- .../bungee/tasks/ForceLoginTask.java | 6 +-- .../fastlogin/core/PremiumStatus.java | 10 +++++ .../core/messages/ChangePremiumMessage.java | 2 +- ...onMessage.java => LoginActionMessage.java} | 12 +++--- .../core/messages/SuccessMessage.java | 2 +- 12 files changed, 78 insertions(+), 47 deletions(-) rename bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/{JoinListener.java => ConnectionListener.java} (91%) create mode 100644 core/src/main/java/com/github/games647/fastlogin/core/PremiumStatus.java rename core/src/main/java/com/github/games647/fastlogin/core/messages/{ForceActionMessage.java => LoginActionMessage.java} (88%) diff --git a/.gitignore b/.gitignore index c7854a6f..f1dd3dae 100644 --- a/.gitignore +++ b/.gitignore @@ -7,31 +7,15 @@ nbproject/ nb-configuration.xml -# Maven -target/ - -# Vim -.*.sw[a-p] - -# virtual machine crash logs, see https://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - -# various other potential build files -build/ -bin/ -dist/ -manifest.mf -*.log - -# Mac filesystem dust -.DS_Store - # IntelliJ *.iml *.ipr *.iws .idea/ +# Maven +target/ + # Gradle .gradle @@ -40,3 +24,20 @@ gradle-app.setting # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) !gradle-wrapper.jar + +# various other potential build files +build/ +bin/ +dist/ +manifest.mf +*.log + +# Vim +.*.sw[a-p] + +# virtual machine crash logs, see https://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +# Mac filesystem dust +.DS_Store + 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 70754f0c..3b1e0076 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 @@ -3,12 +3,13 @@ package com.github.games647.fastlogin.bukkit; import com.github.games647.fastlogin.bukkit.commands.CrackedCommand; import com.github.games647.fastlogin.bukkit.commands.PremiumCommand; import com.github.games647.fastlogin.bukkit.listener.BungeeListener; -import com.github.games647.fastlogin.bukkit.listener.JoinListener; +import com.github.games647.fastlogin.bukkit.listener.ConnectionListener; import com.github.games647.fastlogin.bukkit.listener.protocollib.ProtocolLibListener; import com.github.games647.fastlogin.bukkit.listener.protocollib.SkinApplyListener; import com.github.games647.fastlogin.bukkit.listener.protocolsupport.ProtocolSupportListener; import com.github.games647.fastlogin.bukkit.tasks.DelayedAuthHook; import com.github.games647.fastlogin.core.CommonUtil; +import com.github.games647.fastlogin.core.PremiumStatus; import com.github.games647.fastlogin.core.messages.ChannelMessage; import com.github.games647.fastlogin.core.shared.FastLoginCore; import com.github.games647.fastlogin.core.shared.PlatformPlugin; @@ -16,6 +17,9 @@ import com.google.common.io.ByteArrayDataOutput; import com.google.common.io.ByteStreams; import java.nio.file.Path; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import org.bukkit.command.CommandSender; @@ -30,14 +34,14 @@ import org.slf4j.Logger; */ public class FastLoginBukkit extends JavaPlugin implements PlatformPlugin { - private final Logger logger = CommonUtil.createLoggerFromJDK(getLogger()); - - private boolean bungeeCord; - private FastLoginCore core; - private boolean serverStarted; - //1 minutes should be enough as a timeout for bad internet connection (Server, Client and Mojang) private final ConcurrentMap loginSession = CommonUtil.buildCache(1, -1); + private final Logger logger = CommonUtil.createLoggerFromJDK(getLogger()); + private final Map premiumPlayers = new ConcurrentHashMap<>(); + + private boolean serverStarted; + private boolean bungeeCord; + private FastLoginCore core; @Override public void onEnable() { @@ -84,7 +88,7 @@ public class FastLoginBukkit extends JavaPlugin implements PlatformPlugin getPremiumPlayers() { + return premiumPlayers; + } + public boolean isBungeeEnabled() { return bungeeCord; } diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/BungeeListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/BungeeListener.java index 7ddef28b..183a3a64 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/BungeeListener.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/BungeeListener.java @@ -3,9 +3,10 @@ package com.github.games647.fastlogin.bukkit.listener; import com.github.games647.fastlogin.bukkit.BukkitLoginSession; import com.github.games647.fastlogin.bukkit.FastLoginBukkit; import com.github.games647.fastlogin.bukkit.tasks.ForceLoginTask; +import com.github.games647.fastlogin.core.PremiumStatus; import com.github.games647.fastlogin.core.hooks.AuthPlugin; -import com.github.games647.fastlogin.core.messages.ForceActionMessage; -import com.github.games647.fastlogin.core.messages.ForceActionMessage.Type; +import com.github.games647.fastlogin.core.messages.LoginActionMessage; +import com.github.games647.fastlogin.core.messages.LoginActionMessage.Type; import com.google.common.io.ByteArrayDataInput; import com.google.common.io.ByteStreams; @@ -51,12 +52,12 @@ public class BungeeListener implements PluginMessageListener { ByteArrayDataInput dataInput = ByteStreams.newDataInput(message); String subChannel = dataInput.readUTF(); - if (!"FORCE_ACTION".equals(subChannel)) { + if (!"LoginAction".equals(subChannel)) { plugin.getLog().info("Unknown sub channel {}", subChannel); return; } - ForceActionMessage loginMessage = new ForceActionMessage(); + LoginActionMessage loginMessage = new LoginActionMessage(); loginMessage.readFrom(dataInput); plugin.getLog().debug("Received plugin message {}", loginMessage); @@ -81,18 +82,23 @@ public class BungeeListener implements PluginMessageListener { } } - private void readMessage(Player player, ForceActionMessage message) { + private void readMessage(Player player, LoginActionMessage message) { String playerName = message.getPlayerName(); Type type = message.getType(); InetSocketAddress address = player.getAddress(); String id = '/' + address.getAddress().getHostAddress() + ':' + address.getPort(); if (type == Type.LOGIN) { + plugin.getPremiumPlayers().put(player.getUniqueId(), PremiumStatus.PREMIUM); + BukkitLoginSession playerSession = new BukkitLoginSession(playerName, true); playerSession.setVerified(true); plugin.getLoginSessions().put(id, playerSession); + Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, new ForceLoginTask(plugin.getCore(), player), 20L); } else if (type == Type.REGISTER) { + plugin.getPremiumPlayers().put(player.getUniqueId(), PremiumStatus.PREMIUM); + Bukkit.getScheduler().runTaskLaterAsynchronously(plugin, () -> { AuthPlugin authPlugin = plugin.getCore().getAuthPluginHook(); try { @@ -107,6 +113,8 @@ public class BungeeListener implements PluginMessageListener { plugin.getLog().error("Failed to query isRegistered for player: {}", player, ex); } }, 20L); + } else if (type == Type.CRACKED) { + plugin.getPremiumPlayers().put(player.getUniqueId(), PremiumStatus.CRACKED); } } diff --git a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/JoinListener.java b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/ConnectionListener.java similarity index 91% rename from bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/JoinListener.java rename to bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/ConnectionListener.java index b7d28869..fec78d49 100644 --- a/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/JoinListener.java +++ b/bukkit/src/main/java/com/github/games647/fastlogin/bukkit/listener/ConnectionListener.java @@ -17,13 +17,13 @@ import org.bukkit.event.player.PlayerQuitEvent; * This listener tells authentication plugins if the player has a premium account and we checked it successfully. So the * plugin can skip authentication. */ -public class JoinListener implements Listener { +public class ConnectionListener implements Listener { private static final long DELAY_LOGIN = 20L / 2; private final FastLoginBukkit plugin; - public JoinListener(FastLoginBukkit plugin) { + public ConnectionListener(FastLoginBukkit plugin) { this.plugin = plugin; } @@ -51,5 +51,6 @@ public class JoinListener implements Listener { player.removeMetadata(plugin.getName(), plugin); plugin.getCore().getPendingConfirms().remove(player.getUniqueId()); + plugin.getPremiumPlayers().remove(player.getUniqueId()); } } diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/hooks/BungeeAuthHook.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/hooks/BungeeAuthHook.java index c19c0579..15bfb058 100644 --- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/hooks/BungeeAuthHook.java +++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/hooks/BungeeAuthHook.java @@ -22,7 +22,6 @@ public class BungeeAuthHook implements AuthPlugin { public boolean forceLogin(ProxiedPlayer player) { String playerName = player.getName(); return Main.plonline.contains(playerName) || requestHandler.forceLogin(playerName); - } @Override diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/ConnectListener.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/ConnectListener.java index 378b8aa8..a7759a17 100644 --- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/ConnectListener.java +++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/ConnectListener.java @@ -1,5 +1,6 @@ package com.github.games647.fastlogin.bungee.listener; +import com.github.games647.craftapi.UUIDAdapter; import com.github.games647.fastlogin.bungee.FastLoginBungee; import com.github.games647.fastlogin.bungee.tasks.AsyncPremiumCheck; import com.github.games647.fastlogin.bungee.tasks.ForceLoginTask; diff --git a/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/MessageListener.java b/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/MessageListener.java index 52c3eea5..ff4b0d73 100644 --- a/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/MessageListener.java +++ b/bungee/src/main/java/com/github/games647/fastlogin/bungee/listener/MessageListener.java @@ -56,9 +56,9 @@ public class MessageListener implements Listener { ByteArrayDataInput dataInput = ByteStreams.newDataInput(data); String subChannel = dataInput.readUTF(); - if ("SUCCESS".equals(subChannel)) { + if ("Success".equals(subChannel)) { onSuccessMessage(forPlayer); - } else if ("CHANGE".equals(subChannel)) { + } else if ("ChangeStatus".equals(subChannel)) { ChangePremiumMessage changeMessage = new ChangePremiumMessage(); changeMessage.readFrom(dataInput); 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 3521b0ee..749ebbdb 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 @@ -3,8 +3,8 @@ package com.github.games647.fastlogin.bungee.tasks; import com.github.games647.fastlogin.bungee.BungeeLoginSession; import com.github.games647.fastlogin.bungee.FastLoginBungee; import com.github.games647.fastlogin.core.messages.ChannelMessage; -import com.github.games647.fastlogin.core.messages.ForceActionMessage; -import com.github.games647.fastlogin.core.messages.ForceActionMessage.Type; +import com.github.games647.fastlogin.core.messages.LoginActionMessage; +import com.github.games647.fastlogin.core.messages.LoginActionMessage.Type; import com.github.games647.fastlogin.core.shared.FastLoginCore; import com.github.games647.fastlogin.core.shared.ForceLoginManagement; import com.github.games647.fastlogin.core.shared.LoginSession; @@ -66,7 +66,7 @@ public class ForceLoginTask } UUID proxyId = UUID.fromString(ProxyServer.getInstance().getConfig().getUuid()); - ChannelMessage loginMessage = new ForceActionMessage(type, player.getName(), proxyId); + ChannelMessage loginMessage = new LoginActionMessage(type, player.getName(), proxyId); core.getPlugin().sendPluginMessage(server, loginMessage); } diff --git a/core/src/main/java/com/github/games647/fastlogin/core/PremiumStatus.java b/core/src/main/java/com/github/games647/fastlogin/core/PremiumStatus.java new file mode 100644 index 00000000..0ec0c42b --- /dev/null +++ b/core/src/main/java/com/github/games647/fastlogin/core/PremiumStatus.java @@ -0,0 +1,10 @@ +package com.github.games647.fastlogin.core; + +public enum PremiumStatus { + + PREMIUM, + + CRACKED, + + UNKNOWN +} diff --git a/core/src/main/java/com/github/games647/fastlogin/core/messages/ChangePremiumMessage.java b/core/src/main/java/com/github/games647/fastlogin/core/messages/ChangePremiumMessage.java index d2e718f7..da30da0c 100644 --- a/core/src/main/java/com/github/games647/fastlogin/core/messages/ChangePremiumMessage.java +++ b/core/src/main/java/com/github/games647/fastlogin/core/messages/ChangePremiumMessage.java @@ -33,7 +33,7 @@ public class ChangePremiumMessage implements ChannelMessage { @Override public String getChannelName() { - return "CHANGE"; + return "ChangeStatus"; } @Override diff --git a/core/src/main/java/com/github/games647/fastlogin/core/messages/ForceActionMessage.java b/core/src/main/java/com/github/games647/fastlogin/core/messages/LoginActionMessage.java similarity index 88% rename from core/src/main/java/com/github/games647/fastlogin/core/messages/ForceActionMessage.java rename to core/src/main/java/com/github/games647/fastlogin/core/messages/LoginActionMessage.java index 2a1b67e1..a4a66127 100644 --- a/core/src/main/java/com/github/games647/fastlogin/core/messages/ForceActionMessage.java +++ b/core/src/main/java/com/github/games647/fastlogin/core/messages/LoginActionMessage.java @@ -5,20 +5,20 @@ import com.google.common.io.ByteArrayDataOutput; import java.util.UUID; -public class ForceActionMessage implements ChannelMessage { +public class LoginActionMessage implements ChannelMessage { private Type type; private String playerName; private UUID proxyId; - public ForceActionMessage(Type type, String playerName, UUID proxyId) { + public LoginActionMessage(Type type, String playerName, UUID proxyId) { this.type = type; this.playerName = playerName; this.proxyId = proxyId; } - public ForceActionMessage() { + public LoginActionMessage() { //reading mode } @@ -60,7 +60,7 @@ public class ForceActionMessage implements ChannelMessage { @Override public String getChannelName() { - return "FORCE_ACTION"; + return "LoginAction"; } @Override @@ -76,6 +76,8 @@ public class ForceActionMessage implements ChannelMessage { LOGIN, - REGISTER + REGISTER, + + CRACKED } } diff --git a/core/src/main/java/com/github/games647/fastlogin/core/messages/SuccessMessage.java b/core/src/main/java/com/github/games647/fastlogin/core/messages/SuccessMessage.java index 9ee72e15..558f6991 100644 --- a/core/src/main/java/com/github/games647/fastlogin/core/messages/SuccessMessage.java +++ b/core/src/main/java/com/github/games647/fastlogin/core/messages/SuccessMessage.java @@ -7,7 +7,7 @@ public class SuccessMessage implements ChannelMessage { @Override public String getChannelName() { - return "SUCCESS"; + return "Success"; } @Override