mirror of
https://github.com/TuxCoding/FastLogin.git
synced 2025-07-30 10:47:33 +02:00
Allow FastLogin to respect AuthMe pre IP register limit, fixes #458
This commit is contained in:
@ -3,15 +3,18 @@ package com.github.games647.fastlogin.bukkit.hook;
|
|||||||
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
|
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
|
||||||
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
|
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
|
||||||
import com.github.games647.fastlogin.core.hooks.AuthPlugin;
|
import com.github.games647.fastlogin.core.hooks.AuthPlugin;
|
||||||
|
|
||||||
import fr.xephi.authme.api.v3.AuthMeApi;
|
import fr.xephi.authme.api.v3.AuthMeApi;
|
||||||
import fr.xephi.authme.events.RestoreSessionEvent;
|
import fr.xephi.authme.events.RestoreSessionEvent;
|
||||||
|
import fr.xephi.authme.process.Management;
|
||||||
|
import fr.xephi.authme.process.register.executors.ApiPasswordRegisterParams;
|
||||||
|
import fr.xephi.authme.process.register.executors.RegistrationMethod;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* GitHub: https://github.com/Xephi/AuthMeReloaded/
|
* GitHub: https://github.com/Xephi/AuthMeReloaded/
|
||||||
* <p>
|
* <p>
|
||||||
@ -25,8 +28,22 @@ public class AuthMeHook implements AuthPlugin<Player>, Listener {
|
|||||||
|
|
||||||
private final FastLoginBukkit plugin;
|
private final FastLoginBukkit plugin;
|
||||||
|
|
||||||
|
private final AuthMeApi authmeAPI;
|
||||||
|
private Management authmeManagement;
|
||||||
|
|
||||||
public AuthMeHook(FastLoginBukkit plugin) {
|
public AuthMeHook(FastLoginBukkit plugin) {
|
||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
|
this.authmeAPI = AuthMeApi.getInstance();
|
||||||
|
|
||||||
|
if (plugin.getConfig().getBoolean("respectIpLimit", false)) {
|
||||||
|
try {
|
||||||
|
Field managementField = this.authmeAPI.getClass().getDeclaredField("management");
|
||||||
|
managementField.setAccessible(true);
|
||||||
|
this.authmeManagement = (Management) managementField.get(this.authmeAPI);
|
||||||
|
} catch (NoSuchFieldException | IllegalAccessException exception) {
|
||||||
|
this.authmeManagement = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
|
||||||
@ -41,25 +58,32 @@ public class AuthMeHook implements AuthPlugin<Player>, Listener {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean forceLogin(Player player) {
|
public boolean forceLogin(Player player) {
|
||||||
if (AuthMeApi.getInstance().isAuthenticated(player)) {
|
if (authmeAPI.isAuthenticated(player)) {
|
||||||
plugin.getLog().warn(ALREADY_AUTHENTICATED, player);
|
plugin.getLog().warn(ALREADY_AUTHENTICATED, player);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//skips registration and login
|
//skips registration and login
|
||||||
AuthMeApi.getInstance().forceLogin(player);
|
authmeAPI.forceLogin(player);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isRegistered(String playerName) {
|
public boolean isRegistered(String playerName) {
|
||||||
return AuthMeApi.getInstance().isRegistered(playerName);
|
return authmeAPI.isRegistered(playerName);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
//this automatically login the player too
|
||||||
public boolean forceRegister(Player player, String password) {
|
public boolean forceRegister(Player player, String password) {
|
||||||
//this automatically login the player too
|
//if we have the management - we can trigger register with IP limit checks
|
||||||
AuthMeApi.getInstance().forceRegister(player, password);
|
if (authmeManagement != null) {
|
||||||
return true;
|
authmeManagement.performRegister(RegistrationMethod.PASSWORD_REGISTRATION,
|
||||||
|
ApiPasswordRegisterParams.of(player, password, true));
|
||||||
|
} else {
|
||||||
|
authmeAPI.forceRegister(player, password);
|
||||||
|
}
|
||||||
|
|
||||||
|
return authmeAPI.isRegistered(player.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,6 +36,15 @@ anti-bot:
|
|||||||
# For more information: https://github.com/games647/FastLogin#why-do-players-have-to-invoke-a-command
|
# For more information: https://github.com/games647/FastLogin#why-do-players-have-to-invoke-a-command
|
||||||
autoRegister: false
|
autoRegister: false
|
||||||
|
|
||||||
|
# Should FastLogin respect per IP limit of registrations (e.g. in AuthMe)
|
||||||
|
# Because most auth plugins do their stuff async - FastLogin will still think the player was registered
|
||||||
|
# To work best - you also need to enable auto-register-unknown
|
||||||
|
#
|
||||||
|
# If set to true - FastLogin will always attempt to register the player, even if the limit is exceeded
|
||||||
|
# It is up to the auth plugin to handle the excessive registration
|
||||||
|
# https://github.com/games647/FastLogin/issues/458
|
||||||
|
respectIpLimit: false
|
||||||
|
|
||||||
# This is extra configuration option to the feature above. If we request a premium authentication from a player who
|
# This is extra configuration option to the feature above. If we request a premium authentication from a player who
|
||||||
# isn't actual premium but used a premium username, the player will disconnect with the reason "invalid session" or
|
# isn't actual premium but used a premium username, the player will disconnect with the reason "invalid session" or
|
||||||
# "bad login".
|
# "bad login".
|
||||||
@ -129,6 +138,7 @@ nameChangeCheck: false
|
|||||||
#
|
#
|
||||||
# If you use PaperSpigot - FastLogin will always try to set the skin, even if forwardSkin is set to false
|
# If you use PaperSpigot - FastLogin will always try to set the skin, even if forwardSkin is set to false
|
||||||
# It is needed to allow premium name change to work correctly
|
# It is needed to allow premium name change to work correctly
|
||||||
|
# https://github.com/games647/FastLogin/issues/457
|
||||||
#
|
#
|
||||||
# If you want to use skins for your cracked player, you need an additional plugin like
|
# If you want to use skins for your cracked player, you need an additional plugin like
|
||||||
# ChangeSkin, SkinRestorer, ...
|
# ChangeSkin, SkinRestorer, ...
|
||||||
|
@ -53,10 +53,10 @@ player-unknown: '&4Player not in the database'
|
|||||||
# The user skipped the authentication, because it was a premium player
|
# The user skipped the authentication, because it was a premium player
|
||||||
auto-login: '&2Auto logged in'
|
auto-login: '&2Auto logged in'
|
||||||
|
|
||||||
# The user was auto registered on the first join. The user account will be registered to protect it from cracked players
|
# FastLogin attempted to auto register user. The user account is registered to protect it from cracked players
|
||||||
|
# If FastLogin is respecting auth plugin IP limit - the registration may have failed, however the message is still displayed
|
||||||
# The password can be used if the mojang servers are down and you still want your premium users to login (PLANNED)
|
# The password can be used if the mojang servers are down and you still want your premium users to login (PLANNED)
|
||||||
auto-register: '&2Auto registered with password: %password
|
auto-register: '&2Tried auto registering with password: &7%password&2. You may want change it?'
|
||||||
You may want change it?'
|
|
||||||
|
|
||||||
# GameProfile is not able to toggle the premium state of other players
|
# GameProfile is not able to toggle the premium state of other players
|
||||||
no-permission: '&4Not enough permissions'
|
no-permission: '&4Not enough permissions'
|
||||||
|
Reference in New Issue
Block a user