mirror of
https://github.com/TuxCoding/FastLogin.git
synced 2025-07-30 10:47:33 +02:00
Fix duplicate premium uuid check in BungeeCord
This commit is contained in:
@ -1,70 +0,0 @@
|
|||||||
package com.github.games647.fastlogin.bungee;
|
|
||||||
|
|
||||||
import com.github.games647.fastlogin.bungee.FastLoginBungee;
|
|
||||||
import com.github.games647.fastlogin.bungee.hooks.BungeeAuthPlugin;
|
|
||||||
import com.github.games647.fastlogin.core.LoginSession;
|
|
||||||
import com.github.games647.fastlogin.core.PlayerProfile;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.logging.Level;
|
|
||||||
|
|
||||||
import net.md_5.bungee.api.connection.PendingConnection;
|
|
||||||
import net.md_5.bungee.api.event.PreLoginEvent;
|
|
||||||
|
|
||||||
public class AsyncPremiumCheck implements Runnable {
|
|
||||||
|
|
||||||
private final FastLoginBungee plugin;
|
|
||||||
private final PreLoginEvent preLoginEvent;
|
|
||||||
|
|
||||||
public AsyncPremiumCheck(FastLoginBungee plugin, PreLoginEvent preLoginEvent) {
|
|
||||||
this.plugin = plugin;
|
|
||||||
this.preLoginEvent = preLoginEvent;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
PendingConnection connection = preLoginEvent.getConnection();
|
|
||||||
plugin.getSession().remove(connection);
|
|
||||||
|
|
||||||
String username = connection.getName();
|
|
||||||
try {
|
|
||||||
PlayerProfile profile = plugin.getCore().getStorage().loadProfile(username);
|
|
||||||
if (profile != null) {
|
|
||||||
if (profile.isPremium()) {
|
|
||||||
if (profile.getUserId() != -1) {
|
|
||||||
plugin.getSession().put(connection, new LoginSession(username, true, profile));
|
|
||||||
connection.setOnlineMode(true);
|
|
||||||
}
|
|
||||||
} else if (profile.getUserId() == -1) {
|
|
||||||
//user not exists in the db
|
|
||||||
BungeeAuthPlugin authPlugin = plugin.getBungeeAuthPlugin();
|
|
||||||
if (plugin.getConfiguration().getBoolean("nameChangeCheck")) {
|
|
||||||
UUID premiumUUID = plugin.getCore().getMojangApiConnector().getPremiumUUID(username);
|
|
||||||
if (premiumUUID != null) {
|
|
||||||
profile = plugin.getCore().getStorage().loadProfile(premiumUUID);
|
|
||||||
if (profile != null) {
|
|
||||||
plugin.getLogger().log(Level.FINER, "Player {0} changed it's username", premiumUUID);
|
|
||||||
connection.setOnlineMode(true);
|
|
||||||
plugin.getSession().put(connection, new LoginSession(username, false, profile));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plugin.getConfiguration().getBoolean("autoRegister")
|
|
||||||
&& (authPlugin == null || !authPlugin.isRegistered(username))) {
|
|
||||||
UUID premiumUUID = plugin.getCore().getMojangApiConnector().getPremiumUUID(username);
|
|
||||||
if (premiumUUID != null) {
|
|
||||||
plugin.getLogger().log(Level.FINER, "Player {0} uses a premium username", username);
|
|
||||||
connection.setOnlineMode(true);
|
|
||||||
plugin.getSession().put(connection, new LoginSession(username, false, profile));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception ex) {
|
|
||||||
plugin.getLogger().log(Level.SEVERE, "Failed to check premium state", ex);
|
|
||||||
} finally {
|
|
||||||
preLoginEvent.completeIntent(plugin);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +1,8 @@
|
|||||||
package com.github.games647.fastlogin.bungee.listener;
|
package com.github.games647.fastlogin.bungee.listener;
|
||||||
|
|
||||||
import com.github.games647.fastlogin.bungee.AsyncPremiumCheck;
|
import com.github.games647.fastlogin.bungee.tasks.AsyncPremiumCheck;
|
||||||
import com.github.games647.fastlogin.bungee.FastLoginBungee;
|
import com.github.games647.fastlogin.bungee.FastLoginBungee;
|
||||||
import com.github.games647.fastlogin.bungee.ForceLoginTask;
|
import com.github.games647.fastlogin.bungee.tasks.ForceLoginTask;
|
||||||
import com.github.games647.fastlogin.core.LoginSession;
|
import com.github.games647.fastlogin.core.LoginSession;
|
||||||
import com.github.games647.fastlogin.core.PlayerProfile;
|
import com.github.games647.fastlogin.core.PlayerProfile;
|
||||||
import com.google.common.base.Charsets;
|
import com.google.common.base.Charsets;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.github.games647.fastlogin.bungee.listener;
|
package com.github.games647.fastlogin.bungee.listener;
|
||||||
|
|
||||||
|
import com.github.games647.fastlogin.bungee.tasks.AsyncToggleMessage;
|
||||||
import com.github.games647.fastlogin.bungee.FastLoginBungee;
|
import com.github.games647.fastlogin.bungee.FastLoginBungee;
|
||||||
import com.github.games647.fastlogin.core.PlayerProfile;
|
import com.github.games647.fastlogin.core.PlayerProfile;
|
||||||
import com.google.common.io.ByteArrayDataInput;
|
import com.google.common.io.ByteArrayDataInput;
|
||||||
@ -46,12 +47,12 @@ public class PluginMessageListener implements Listener {
|
|||||||
if ("ON".equals(subchannel)) {
|
if ("ON".equals(subchannel)) {
|
||||||
String playerName = dataInput.readUTF();
|
String playerName = dataInput.readUTF();
|
||||||
|
|
||||||
AsyncStatusMessage task = new AsyncStatusMessage(plugin, fromPlayer, playerName, true);
|
AsyncToggleMessage task = new AsyncToggleMessage(plugin, fromPlayer, playerName, true);
|
||||||
ProxyServer.getInstance().getScheduler().runAsync(plugin, task);
|
ProxyServer.getInstance().getScheduler().runAsync(plugin, task);
|
||||||
} else if ("OFF".equals(subchannel)) {
|
} else if ("OFF".equals(subchannel)) {
|
||||||
String playerName = dataInput.readUTF();
|
String playerName = dataInput.readUTF();
|
||||||
|
|
||||||
AsyncStatusMessage task = new AsyncStatusMessage(plugin, fromPlayer, playerName, false);
|
AsyncToggleMessage task = new AsyncToggleMessage(plugin, fromPlayer, playerName, false);
|
||||||
ProxyServer.getInstance().getScheduler().runAsync(plugin, task);
|
ProxyServer.getInstance().getScheduler().runAsync(plugin, task);
|
||||||
} else if ("SUCCESS".equals(subchannel)) {
|
} else if ("SUCCESS".equals(subchannel)) {
|
||||||
if (fromPlayer.getPendingConnection().isOnlineMode()) {
|
if (fromPlayer.getPendingConnection().isOnlineMode()) {
|
||||||
|
@ -0,0 +1,91 @@
|
|||||||
|
package com.github.games647.fastlogin.bungee.tasks;
|
||||||
|
|
||||||
|
import com.github.games647.fastlogin.bungee.FastLoginBungee;
|
||||||
|
import com.github.games647.fastlogin.bungee.hooks.BungeeAuthPlugin;
|
||||||
|
import com.github.games647.fastlogin.core.LoginSession;
|
||||||
|
import com.github.games647.fastlogin.core.PlayerProfile;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.logging.Level;
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.connection.PendingConnection;
|
||||||
|
import net.md_5.bungee.api.event.PreLoginEvent;
|
||||||
|
|
||||||
|
public class AsyncPremiumCheck implements Runnable {
|
||||||
|
|
||||||
|
private final FastLoginBungee plugin;
|
||||||
|
private final PreLoginEvent preLoginEvent;
|
||||||
|
|
||||||
|
public AsyncPremiumCheck(FastLoginBungee plugin, PreLoginEvent preLoginEvent) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
this.preLoginEvent = preLoginEvent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
PendingConnection connection = preLoginEvent.getConnection();
|
||||||
|
plugin.getSession().remove(connection);
|
||||||
|
|
||||||
|
String username = connection.getName();
|
||||||
|
try {
|
||||||
|
PlayerProfile profile = plugin.getCore().getStorage().loadProfile(username);
|
||||||
|
if (profile == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (profile.getUserId() == -1) {
|
||||||
|
UUID premiumUUID = null;
|
||||||
|
if (plugin.getConfiguration().getBoolean("nameChangeCheck")
|
||||||
|
|| plugin.getConfiguration().getBoolean("autoRegister")) {
|
||||||
|
premiumUUID = plugin.getCore().getMojangApiConnector().getPremiumUUID(username);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (premiumUUID == null
|
||||||
|
|| checkNameChange(premiumUUID, connection, username)
|
||||||
|
|| checkPremiumName(username, connection, profile)) {
|
||||||
|
//nothing detected the player as premium -> start a cracked session
|
||||||
|
plugin.getSession().put(connection, new LoginSession(username, false, profile));
|
||||||
|
}
|
||||||
|
} else if (profile.isPremium()) {
|
||||||
|
requestPremiumLogin(connection, profile, username, true);
|
||||||
|
}
|
||||||
|
} catch (Exception ex) {
|
||||||
|
plugin.getLogger().log(Level.SEVERE, "Failed to check premium state", ex);
|
||||||
|
} finally {
|
||||||
|
preLoginEvent.completeIntent(plugin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean checkPremiumName(String username, PendingConnection connection, PlayerProfile profile)
|
||||||
|
throws Exception {
|
||||||
|
BungeeAuthPlugin authPlugin = plugin.getBungeeAuthPlugin();
|
||||||
|
if (plugin.getConfiguration().getBoolean("autoRegister")
|
||||||
|
&& (authPlugin == null || !authPlugin.isRegistered(username))) {
|
||||||
|
plugin.getLogger().log(Level.FINER, "Player {0} uses a premium username", username);
|
||||||
|
requestPremiumLogin(connection, profile, username, false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean checkNameChange(UUID premiumUUID, PendingConnection connection, String username) {
|
||||||
|
//user not exists in the db
|
||||||
|
if (plugin.getConfiguration().getBoolean("nameChangeCheck")) {
|
||||||
|
PlayerProfile profile = plugin.getCore().getStorage().loadProfile(premiumUUID);
|
||||||
|
if (profile != null) {
|
||||||
|
//uuid exists in the database
|
||||||
|
plugin.getLogger().log(Level.FINER, "Player {0} changed it's username", premiumUUID);
|
||||||
|
requestPremiumLogin(connection, profile, username, false);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void requestPremiumLogin(PendingConnection con, PlayerProfile profile, String username, boolean register) {
|
||||||
|
con.setOnlineMode(true);
|
||||||
|
plugin.getSession().put(con, new LoginSession(username, register, profile));
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package com.github.games647.fastlogin.bungee.listener;
|
package com.github.games647.fastlogin.bungee.tasks;
|
||||||
|
|
||||||
import com.github.games647.fastlogin.bungee.FastLoginBungee;
|
import com.github.games647.fastlogin.bungee.FastLoginBungee;
|
||||||
import com.github.games647.fastlogin.core.PlayerProfile;
|
import com.github.games647.fastlogin.core.PlayerProfile;
|
||||||
@ -7,14 +7,14 @@ import net.md_5.bungee.api.ChatColor;
|
|||||||
import net.md_5.bungee.api.chat.TextComponent;
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
|
||||||
public class AsyncStatusMessage implements Runnable {
|
public class AsyncToggleMessage implements Runnable {
|
||||||
|
|
||||||
private final FastLoginBungee plugin;
|
private final FastLoginBungee plugin;
|
||||||
private final ProxiedPlayer fromPlayer;
|
private final ProxiedPlayer fromPlayer;
|
||||||
private final String targetPlayer;
|
private final String targetPlayer;
|
||||||
private final boolean toPremium;
|
private final boolean toPremium;
|
||||||
|
|
||||||
public AsyncStatusMessage(FastLoginBungee plugin, ProxiedPlayer fromPlayer, String targetPlayer
|
public AsyncToggleMessage(FastLoginBungee plugin, ProxiedPlayer fromPlayer, String targetPlayer
|
||||||
, boolean toPremium) {
|
, boolean toPremium) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
this.fromPlayer = fromPlayer;
|
this.fromPlayer = fromPlayer;
|
@ -1,5 +1,6 @@
|
|||||||
package com.github.games647.fastlogin.bungee;
|
package com.github.games647.fastlogin.bungee.tasks;
|
||||||
|
|
||||||
|
import com.github.games647.fastlogin.bungee.FastLoginBungee;
|
||||||
import com.github.games647.fastlogin.bungee.hooks.BungeeAuthPlugin;
|
import com.github.games647.fastlogin.bungee.hooks.BungeeAuthPlugin;
|
||||||
import com.github.games647.fastlogin.core.LoginSession;
|
import com.github.games647.fastlogin.core.LoginSession;
|
||||||
import com.github.games647.fastlogin.core.PlayerProfile;
|
import com.github.games647.fastlogin.core.PlayerProfile;
|
||||||
@ -7,8 +8,8 @@ import com.google.common.io.ByteArrayDataOutput;
|
|||||||
import com.google.common.io.ByteStreams;
|
import com.google.common.io.ByteStreams;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import net.md_5.bungee.api.connection.PendingConnection;
|
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.connection.PendingConnection;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
import net.md_5.bungee.api.connection.Server;
|
import net.md_5.bungee.api.connection.Server;
|
||||||
|
|
||||||
@ -49,7 +50,6 @@ public class ForceLoginTask implements Runnable {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
//cracked player
|
//cracked player
|
||||||
//update only on success to prevent corrupt data
|
|
||||||
playerProfile.setPremium(false);
|
playerProfile.setPremium(false);
|
||||||
plugin.getCore().getStorage().save(playerProfile);
|
plugin.getCore().getStorage().save(playerProfile);
|
||||||
}
|
}
|
Reference in New Issue
Block a user