mirror of
https://github.com/TuxCoding/FastLogin.git
synced 2025-07-30 02:37:34 +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:
|
###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:
|
###Permissions:
|
||||||
* fastlogin.bukkit.command.premium
|
* fastlogin.bukkit.command.premium
|
||||||
|
|
||||||
###Requirements:
|
###Requirements:
|
||||||
* Plugin: [ProtocolLib](http://www.spigotmc.org/resources/protocollib.1997/)
|
* Plugin: [ProtocolLib](http://www.spigotmc.org/resources/protocollib.1997/)
|
||||||
|
@ -26,9 +26,9 @@ public class CrazyLoginHook implements BukkitAuthPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void forceLogin(Player player) {
|
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) {
|
if (playerData != null) {
|
||||||
//mark the account as logged in
|
//mark the account as logged in
|
||||||
playerData.setLoggedIn(true);
|
playerData.setLoggedIn(true);
|
||||||
@ -50,9 +50,15 @@ public class CrazyLoginHook implements BukkitAuthPlugin {
|
|||||||
//illegalCommandUsesPerIP.remove(IP);
|
//illegalCommandUsesPerIP.remove(IP);
|
||||||
//tempBans.remove(IP);
|
//tempBans.remove(IP);
|
||||||
playerData.addIP(ip);
|
playerData.addIP(ip);
|
||||||
crazyLoginPlugin.getCrazyDatabase().saveWithoutPassword(playerData);
|
|
||||||
player.setMetadata("Authenticated", new Authenticated(crazyLoginPlugin, player));
|
player.setMetadata("Authenticated", new Authenticated(crazyLoginPlugin, player));
|
||||||
crazyLoginPlugin.unregisterDynamicHooks();
|
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();
|
UUID playerUUID = player.getUniqueId();
|
||||||
final String uuidString = playerUUID.toString().replace("-", "");
|
final String uuidString = playerUUID.toString().replace("-", "");
|
||||||
final InetAddress ipAddress = player.getAddress().getAddress();
|
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.
|
//this executes a sql query without interacting with other parts so we can run it async.
|
||||||
Bukkit.getScheduler().runTaskAsynchronously(securityPlugin, new Runnable() {
|
Bukkit.getScheduler().runTaskAsynchronously(securityPlugin, new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
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
|
//run forcelogin only if it was successfull
|
||||||
Bukkit.getScheduler().runTask(securityPlugin, new Runnable() {
|
Bukkit.getScheduler().runTask(securityPlugin, new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -16,6 +16,9 @@ public class RoyalAuthHook implements BukkitAuthPlugin {
|
|||||||
@Override
|
@Override
|
||||||
public void forceLogin(Player player) {
|
public void forceLogin(Player player) {
|
||||||
AuthPlayer authPlayer = AuthPlayer.getAuthPlayer(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();
|
authPlayer.login();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -27,6 +30,7 @@ public class RoyalAuthHook implements BukkitAuthPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void forceRegister(Player player, String password) {
|
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 authPlayer = AuthPlayer.getAuthPlayer(player);
|
||||||
authPlayer.setPassword(password, Config.passwordHashType);
|
authPlayer.setPassword(password, Config.passwordHashType);
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@ import java.util.Set;
|
|||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
import org.bukkit.Achievement;
|
import org.bukkit.Achievement;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.Effect;
|
import org.bukkit.Effect;
|
||||||
import org.bukkit.EntityEffect;
|
import org.bukkit.EntityEffect;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
@ -54,6 +55,7 @@ import org.bukkit.scoreboard.Scoreboard;
|
|||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
|
|
||||||
import ultraauth.api.UltraAuthAPI;
|
import ultraauth.api.UltraAuthAPI;
|
||||||
|
import ultraauth.main.Main;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Project page:
|
* Project page:
|
||||||
@ -74,8 +76,14 @@ public class UltraAuthHook implements BukkitAuthPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void forceRegister(Player player, String password) {
|
public void forceRegister(final Player player, final String password) {
|
||||||
UltraAuthAPI.setPlayerPasswordOnline(player, password);
|
Bukkit.getScheduler().runTaskAsynchronously(Main.main, new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
UltraAuthAPI.setPlayerPasswordOnline(player, password);
|
||||||
|
forceLogin(player);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
class FakePlayer implements Player {
|
class FakePlayer implements Player {
|
||||||
|
@ -20,11 +20,12 @@ public class xAuthHook implements BukkitAuthPlugin {
|
|||||||
|
|
||||||
xAuthPlayer xAuthPlayer = xAuthPlugin.getPlayerManager().getPlayer(player);
|
xAuthPlayer xAuthPlayer = xAuthPlugin.getPlayerManager().getPlayer(player);
|
||||||
if (xAuthPlayer != null) {
|
if (xAuthPlayer != null) {
|
||||||
xAuthPlugin.getPlayerManager().doLogin(xAuthPlayer);
|
|
||||||
|
|
||||||
//we checked that the player is premium (paid account)
|
//we checked that the player is premium (paid account)
|
||||||
//unprotect the inventory, op status...
|
//unprotect the inventory, op status...
|
||||||
xAuthPlayer.setPremium(true);
|
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 com.google.common.io.ByteStreams;
|
||||||
|
|
||||||
import java.util.UUID;
|
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.PendingConnection;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
@ -67,6 +70,9 @@ public class PlayerConnectionListener implements Listener {
|
|||||||
BungeeAuthPlugin authPlugin = plugin.getBungeeAuthPlugin();
|
BungeeAuthPlugin authPlugin = plugin.getBungeeAuthPlugin();
|
||||||
if (authPlugin != null) {
|
if (authPlugin != null) {
|
||||||
authPlugin.forceLogin(player);
|
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.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import me.vik1395.BungeeAuth.ListenerClass;
|
import me.vik1395.BungeeAuth.ListenerClass;
|
||||||
import me.vik1395.BungeeAuth.Main;
|
import me.vik1395.BungeeAuth.Main;
|
||||||
import me.vik1395.BungeeAuth.Password.PasswordHandler;
|
import me.vik1395.BungeeAuth.Password.PasswordHandler;
|
||||||
import me.vik1395.BungeeAuth.Tables;
|
import me.vik1395.BungeeAuth.Tables;
|
||||||
|
import net.md_5.bungee.api.ProxyServer;
|
||||||
|
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
|
||||||
@ -25,22 +27,34 @@ public class BungeeAuthHook implements BungeeAuthPlugin {
|
|||||||
private final Tables databaseConnection = new Tables();
|
private final Tables databaseConnection = new Tables();
|
||||||
|
|
||||||
@Override
|
@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
|
//https://github.com/MatteCarra/BungeeAuth/blob/master/src/me/vik1395/BungeeAuth/Login.java#L92-95
|
||||||
Main.plonline.add(player.getName());
|
Main.plonline.add(player.getName());
|
||||||
try {
|
|
||||||
//renamed from ct to databaseConnection
|
//renamed from ct to databaseConnection
|
||||||
// databaseConnection.setStatus(player.getName(), "online");
|
// 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};
|
ProxyServer.getInstance().getScheduler().runAsync(Main.plugin, new Runnable() {
|
||||||
Object[] arguments = new Object[] {player.getName(), "online"};
|
@Override
|
||||||
callProtected("setStatus", parameterTypes, arguments);
|
public void run() {
|
||||||
|
try {
|
||||||
|
callProtected("setStatus", parameterTypes, arguments);
|
||||||
|
ListenerClass.movePlayer(player, false);
|
||||||
|
|
||||||
ListenerClass.movePlayer(player, false);
|
ProxyServer.getInstance().getScheduler().schedule(Main.plugin, new Runnable() {
|
||||||
ListenerClass.prelogin.get(player.getName()).cancel();
|
@Override
|
||||||
} catch (Exception ex) {
|
public void run() {
|
||||||
Main.plugin.getLogger().severe("[BungeeAuth] Error force loging in player");
|
//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
|
@Override
|
||||||
@ -51,7 +65,7 @@ public class BungeeAuthHook implements BungeeAuthPlugin {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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
|
//https://github.com/MatteCarra/BungeeAuth/blob/master/src/me/vik1395/BungeeAuth/Register.java#L102
|
||||||
PasswordHandler ph = new PasswordHandler();
|
PasswordHandler ph = new PasswordHandler();
|
||||||
Random rand = new Random();
|
Random rand = new Random();
|
||||||
@ -68,18 +82,32 @@ public class BungeeAuthHook implements BungeeAuthPlugin {
|
|||||||
String hash = ph.newHash(Pw, pType);
|
String hash = ph.newHash(Pw, pType);
|
||||||
|
|
||||||
//creates a new SQL entry with the player's details.
|
//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);
|
// databaseConnection.newPlayerEntry(player.getName(), hash, pType, "", lastip, regdate, lastip, lastseen);
|
||||||
|
|
||||||
Class<?>[] parameterTypes = new Class<?>[] {String.class, String.class, String.class, String.class
|
final Class<?>[] parameterTypes = new Class<?>[] {String.class, String.class, String.class, String.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};
|
final Object[] arguments = new Object[] {player.getName(), hash, pType, "", lastip, regdate, lastip, lastseen};
|
||||||
callProtected("newPlayerEntry", parameterTypes, arguments);
|
|
||||||
forceLogin(player);
|
ProxyServer.getInstance().getScheduler().runAsync(Main.plugin, new Runnable() {
|
||||||
} catch (Exception ex) {
|
@Override
|
||||||
Main.plugin.getLogger().severe("[BungeeAuth] Error when creating a new player in the MySQL Database");
|
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 ;(
|
//pail ;(
|
||||||
|
Reference in New Issue
Block a user