mirror of
https://github.com/TuxCoding/FastLogin.git
synced 2025-07-29 18:27:36 +02:00
Optimize performance and thread-safety
This commit is contained in:
@ -23,10 +23,11 @@ So they don't need to enter passwords. This is also called auto login (auto-logi
|
||||
***
|
||||
|
||||
###Commands:
|
||||
* /premium Label the invoker as paid account
|
||||
* /premium [player] Label the invoker as paid account
|
||||
* /cracked [player] Label the invoker as cracked account
|
||||
|
||||
###Permissions:
|
||||
* fastlogin.bukkit.command.premium
|
||||
* fastlogin.bukkit.command.premium
|
||||
|
||||
###Requirements:
|
||||
* Plugin: [ProtocolLib](http://www.spigotmc.org/resources/protocollib.1997/)
|
||||
|
@ -26,9 +26,9 @@ public class CrazyLoginHook implements BukkitAuthPlugin {
|
||||
|
||||
@Override
|
||||
public void forceLogin(Player player) {
|
||||
CrazyLogin crazyLoginPlugin = CrazyLogin.getPlugin();
|
||||
final CrazyLogin crazyLoginPlugin = CrazyLogin.getPlugin();
|
||||
|
||||
LoginPlayerData playerData = crazyLoginPlugin.getPlayerData(player.getName());
|
||||
final LoginPlayerData playerData = crazyLoginPlugin.getPlayerData(player.getName());
|
||||
if (playerData != null) {
|
||||
//mark the account as logged in
|
||||
playerData.setLoggedIn(true);
|
||||
@ -50,9 +50,15 @@ public class CrazyLoginHook implements BukkitAuthPlugin {
|
||||
//illegalCommandUsesPerIP.remove(IP);
|
||||
//tempBans.remove(IP);
|
||||
playerData.addIP(ip);
|
||||
crazyLoginPlugin.getCrazyDatabase().saveWithoutPassword(playerData);
|
||||
player.setMetadata("Authenticated", new Authenticated(crazyLoginPlugin, player));
|
||||
crazyLoginPlugin.unregisterDynamicHooks();
|
||||
Bukkit.getScheduler().runTaskAsynchronously(crazyLoginPlugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
//SQL-Queries should run async
|
||||
crazyLoginPlugin.getCrazyDatabase().saveWithoutPassword(playerData);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -58,12 +58,13 @@ public class LoginSecurityHook implements BukkitAuthPlugin {
|
||||
UUID playerUUID = player.getUniqueId();
|
||||
final String uuidString = playerUUID.toString().replace("-", "");
|
||||
final InetAddress ipAddress = player.getAddress().getAddress();
|
||||
final String passwordHash = securityPlugin.hasher.hash(password);
|
||||
|
||||
//this executes a sql query without interacting with other parts so we can run it async.
|
||||
Bukkit.getScheduler().runTaskAsynchronously(securityPlugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
dataManager.register(uuidString, password, securityPlugin.hasher.getTypeId(), ipAddress.toString());
|
||||
dataManager.register(uuidString, passwordHash, securityPlugin.hasher.getTypeId(), ipAddress.toString());
|
||||
//run forcelogin only if it was successfull
|
||||
Bukkit.getScheduler().runTask(securityPlugin, new Runnable() {
|
||||
@Override
|
||||
|
@ -16,6 +16,9 @@ public class RoyalAuthHook implements BukkitAuthPlugin {
|
||||
@Override
|
||||
public void forceLogin(Player player) {
|
||||
AuthPlayer authPlayer = AuthPlayer.getAuthPlayer(player);
|
||||
|
||||
//https://github.com/RoyalDev/RoyalAuth/blob/master/src/main/java/org/royaldev/royalauth/commands/CmdLogin.java#L62
|
||||
//not thread-safe
|
||||
authPlayer.login();
|
||||
}
|
||||
|
||||
@ -27,6 +30,7 @@ public class RoyalAuthHook implements BukkitAuthPlugin {
|
||||
|
||||
@Override
|
||||
public void forceRegister(Player player, String password) {
|
||||
//https://github.com/RoyalDev/RoyalAuth/blob/master/src/main/java/org/royaldev/royalauth/commands/CmdRegister.java#L50
|
||||
AuthPlayer authPlayer = AuthPlayer.getAuthPlayer(player);
|
||||
authPlayer.setPassword(password, Config.passwordHashType);
|
||||
|
||||
|
@ -9,6 +9,7 @@ import java.util.Set;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.bukkit.Achievement;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Effect;
|
||||
import org.bukkit.EntityEffect;
|
||||
import org.bukkit.GameMode;
|
||||
@ -54,6 +55,7 @@ import org.bukkit.scoreboard.Scoreboard;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import ultraauth.api.UltraAuthAPI;
|
||||
import ultraauth.main.Main;
|
||||
|
||||
/**
|
||||
* Project page:
|
||||
@ -74,8 +76,14 @@ public class UltraAuthHook implements BukkitAuthPlugin {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceRegister(Player player, String password) {
|
||||
UltraAuthAPI.setPlayerPasswordOnline(player, password);
|
||||
public void forceRegister(final Player player, final String password) {
|
||||
Bukkit.getScheduler().runTaskAsynchronously(Main.main, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
UltraAuthAPI.setPlayerPasswordOnline(player, password);
|
||||
forceLogin(player);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
class FakePlayer implements Player {
|
||||
|
@ -20,11 +20,12 @@ public class xAuthHook implements BukkitAuthPlugin {
|
||||
|
||||
xAuthPlayer xAuthPlayer = xAuthPlugin.getPlayerManager().getPlayer(player);
|
||||
if (xAuthPlayer != null) {
|
||||
xAuthPlugin.getPlayerManager().doLogin(xAuthPlayer);
|
||||
|
||||
//we checked that the player is premium (paid account)
|
||||
//unprotect the inventory, op status...
|
||||
xAuthPlayer.setPremium(true);
|
||||
|
||||
//not thread-safe
|
||||
xAuthPlugin.getPlayerManager().doLogin(xAuthPlayer);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -6,6 +6,9 @@ import com.google.common.io.ByteArrayDataOutput;
|
||||
import com.google.common.io.ByteStreams;
|
||||
|
||||
import java.util.UUID;
|
||||
import net.md_5.bungee.api.ChatColor;
|
||||
import net.md_5.bungee.api.chat.BaseComponent;
|
||||
import net.md_5.bungee.api.chat.TextComponent;
|
||||
|
||||
import net.md_5.bungee.api.connection.PendingConnection;
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
@ -67,6 +70,9 @@ public class PlayerConnectionListener implements Listener {
|
||||
BungeeAuthPlugin authPlugin = plugin.getBungeeAuthPlugin();
|
||||
if (authPlugin != null) {
|
||||
authPlugin.forceLogin(player);
|
||||
BaseComponent loginMessage = new TextComponent("Auto login");
|
||||
loginMessage.setColor(ChatColor.DARK_GREEN);
|
||||
player.sendMessage(loginMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -4,11 +4,13 @@ import java.lang.reflect.Method;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Random;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import me.vik1395.BungeeAuth.ListenerClass;
|
||||
import me.vik1395.BungeeAuth.Main;
|
||||
import me.vik1395.BungeeAuth.Password.PasswordHandler;
|
||||
import me.vik1395.BungeeAuth.Tables;
|
||||
import net.md_5.bungee.api.ProxyServer;
|
||||
|
||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||
|
||||
@ -25,22 +27,34 @@ public class BungeeAuthHook implements BungeeAuthPlugin {
|
||||
private final Tables databaseConnection = new Tables();
|
||||
|
||||
@Override
|
||||
public void forceLogin(ProxiedPlayer player) {
|
||||
public void forceLogin(final ProxiedPlayer player) {
|
||||
//https://github.com/MatteCarra/BungeeAuth/blob/master/src/me/vik1395/BungeeAuth/Login.java#L92-95
|
||||
Main.plonline.add(player.getName());
|
||||
try {
|
||||
//renamed from ct to databaseConnection
|
||||
|
||||
//renamed from ct to databaseConnection
|
||||
// databaseConnection.setStatus(player.getName(), "online");
|
||||
final Class<?>[] parameterTypes = new Class<?>[]{String.class, String.class};
|
||||
final Object[] arguments = new Object[]{player.getName(), "online"};
|
||||
|
||||
Class<?>[] parameterTypes = new Class<?>[] {String.class, String.class};
|
||||
Object[] arguments = new Object[] {player.getName(), "online"};
|
||||
callProtected("setStatus", parameterTypes, arguments);
|
||||
ProxyServer.getInstance().getScheduler().runAsync(Main.plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
callProtected("setStatus", parameterTypes, arguments);
|
||||
ListenerClass.movePlayer(player, false);
|
||||
|
||||
ListenerClass.movePlayer(player, false);
|
||||
ListenerClass.prelogin.get(player.getName()).cancel();
|
||||
} catch (Exception ex) {
|
||||
Main.plugin.getLogger().severe("[BungeeAuth] Error force loging in player");
|
||||
}
|
||||
ProxyServer.getInstance().getScheduler().schedule(Main.plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
//not thread-safe
|
||||
ListenerClass.prelogin.get(player.getName()).cancel();
|
||||
}
|
||||
}, 0, TimeUnit.SECONDS);
|
||||
} catch (Exception ex) {
|
||||
Main.plugin.getLogger().severe("[BungeeAuth] Error force loging in player");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -51,7 +65,7 @@ public class BungeeAuthHook implements BungeeAuthPlugin {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void forceRegister(ProxiedPlayer player, String password) {
|
||||
public void forceRegister(final ProxiedPlayer player, String password) {
|
||||
//https://github.com/MatteCarra/BungeeAuth/blob/master/src/me/vik1395/BungeeAuth/Register.java#L102
|
||||
PasswordHandler ph = new PasswordHandler();
|
||||
Random rand = new Random();
|
||||
@ -68,18 +82,32 @@ public class BungeeAuthHook implements BungeeAuthPlugin {
|
||||
String hash = ph.newHash(Pw, pType);
|
||||
|
||||
//creates a new SQL entry with the player's details.
|
||||
try {
|
||||
//renamed t to databaseConnection
|
||||
|
||||
//renamed t to databaseConnection
|
||||
// databaseConnection.newPlayerEntry(player.getName(), hash, pType, "", lastip, regdate, lastip, lastseen);
|
||||
|
||||
Class<?>[] parameterTypes = new Class<?>[] {String.class, String.class, String.class, String.class
|
||||
, String.class, String.class, String.class, String.class};
|
||||
Object[] arguments = new Object[] {player.getName(), hash, pType, "", lastip, regdate, lastip, lastseen};
|
||||
callProtected("newPlayerEntry", parameterTypes, arguments);
|
||||
forceLogin(player);
|
||||
} catch (Exception ex) {
|
||||
Main.plugin.getLogger().severe("[BungeeAuth] Error when creating a new player in the MySQL Database");
|
||||
}
|
||||
final Class<?>[] parameterTypes = new Class<?>[] {String.class, String.class, String.class, String.class
|
||||
, String.class, String.class, String.class, String.class};
|
||||
final Object[] arguments = new Object[] {player.getName(), hash, pType, "", lastip, regdate, lastip, lastseen};
|
||||
|
||||
ProxyServer.getInstance().getScheduler().runAsync(Main.plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
callProtected("newPlayerEntry", parameterTypes, arguments);
|
||||
|
||||
ProxyServer.getInstance().getScheduler().schedule(Main.plugin, new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
//proparly not thread-safe
|
||||
forceLogin(player);
|
||||
}
|
||||
}, 0, TimeUnit.SECONDS);
|
||||
} catch (Exception ex) {
|
||||
Main.plugin.getLogger().severe("[BungeeAuth] Error when creating a new player in the Database");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//pail ;(
|
||||
|
Reference in New Issue
Block a user