Merge branch 'Stabrinai:master' into master
This commit is contained in:
commit
53d4206271
@ -29,6 +29,7 @@ import fr.xephi.authme.command.executable.authme.TotpViewStatusCommand;
|
|||||||
import fr.xephi.authme.command.executable.authme.UnregisterAdminCommand;
|
import fr.xephi.authme.command.executable.authme.UnregisterAdminCommand;
|
||||||
import fr.xephi.authme.command.executable.authme.UpdateHelpMessagesCommand;
|
import fr.xephi.authme.command.executable.authme.UpdateHelpMessagesCommand;
|
||||||
import fr.xephi.authme.command.executable.authme.VersionCommand;
|
import fr.xephi.authme.command.executable.authme.VersionCommand;
|
||||||
|
import fr.xephi.authme.command.executable.authme.WhitelistCommand;
|
||||||
import fr.xephi.authme.command.executable.authme.debug.DebugCommand;
|
import fr.xephi.authme.command.executable.authme.debug.DebugCommand;
|
||||||
import fr.xephi.authme.command.executable.captcha.CaptchaCommand;
|
import fr.xephi.authme.command.executable.captcha.CaptchaCommand;
|
||||||
import fr.xephi.authme.command.executable.changepassword.ChangePasswordCommand;
|
import fr.xephi.authme.command.executable.changepassword.ChangePasswordCommand;
|
||||||
@ -420,6 +421,16 @@ public class CommandInitializer {
|
|||||||
.executableCommand(SwitchAntiBotCommand.class)
|
.executableCommand(SwitchAntiBotCommand.class)
|
||||||
.register();
|
.register();
|
||||||
|
|
||||||
|
CommandDescription.builder()
|
||||||
|
.parent(authmeBase)
|
||||||
|
.labels("whitelist")
|
||||||
|
.description("Switch whitelist mode")
|
||||||
|
.detailedDescription("Switch or toggle the whitelist mode to the specified state.")
|
||||||
|
.withArgument("mode", "ON / OFF", OPTIONAL)
|
||||||
|
.permission(AdminPermission.SWITCH_ANTIBOT)
|
||||||
|
.executableCommand(WhitelistCommand.class)
|
||||||
|
.register();
|
||||||
|
|
||||||
// Register the reload command
|
// Register the reload command
|
||||||
CommandDescription.builder()
|
CommandDescription.builder()
|
||||||
.parent(authmeBase)
|
.parent(authmeBase)
|
||||||
|
|||||||
@ -0,0 +1,40 @@
|
|||||||
|
package fr.xephi.authme.command.executable.authme;
|
||||||
|
|
||||||
|
import fr.xephi.authme.command.ExecutableCommand;
|
||||||
|
import fr.xephi.authme.service.WhiteListService;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Display or change the status of the antibot mod.
|
||||||
|
*/
|
||||||
|
public class WhitelistCommand implements ExecutableCommand {
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private WhiteListService whiteListService;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void executeCommand(final CommandSender sender, List<String> arguments) {
|
||||||
|
if (arguments.isEmpty()) {
|
||||||
|
sender.sendMessage("[AuthMe] WhiteList: " + whiteListService.getWhiteListStatus().name());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String newState = arguments.get(0);
|
||||||
|
|
||||||
|
// Enable or disable the mod
|
||||||
|
if ("ON".equalsIgnoreCase(newState)) {
|
||||||
|
whiteListService.overrideWhiteListStatus(true);
|
||||||
|
sender.sendMessage("[AuthMe] WhiteList enabled!");
|
||||||
|
} else if ("OFF".equalsIgnoreCase(newState)) {
|
||||||
|
sender.sendMessage("[AuthMe] WhiteList disabled!");
|
||||||
|
whiteListService.overrideWhiteListStatus(false);
|
||||||
|
} else {
|
||||||
|
sender.sendMessage(ChatColor.GOLD + "Detailed help: " + ChatColor.WHITE + "/authme help whitelist");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -7,11 +7,13 @@ import fr.xephi.authme.initialization.Reloadable;
|
|||||||
import fr.xephi.authme.message.MessageKey;
|
import fr.xephi.authme.message.MessageKey;
|
||||||
import fr.xephi.authme.message.Messages;
|
import fr.xephi.authme.message.Messages;
|
||||||
import fr.xephi.authme.output.ConsoleLoggerFactory;
|
import fr.xephi.authme.output.ConsoleLoggerFactory;
|
||||||
|
import fr.xephi.authme.permission.AdminPermission;
|
||||||
import fr.xephi.authme.permission.PermissionsManager;
|
import fr.xephi.authme.permission.PermissionsManager;
|
||||||
import fr.xephi.authme.permission.PlayerStatePermission;
|
import fr.xephi.authme.permission.PlayerStatePermission;
|
||||||
import fr.xephi.authme.service.AntiBotService;
|
import fr.xephi.authme.service.AntiBotService;
|
||||||
import fr.xephi.authme.service.BukkitService;
|
import fr.xephi.authme.service.BukkitService;
|
||||||
import fr.xephi.authme.service.ValidationService;
|
import fr.xephi.authme.service.ValidationService;
|
||||||
|
import fr.xephi.authme.service.WhiteListService;
|
||||||
import fr.xephi.authme.settings.Settings;
|
import fr.xephi.authme.settings.Settings;
|
||||||
import fr.xephi.authme.settings.properties.ProtectionSettings;
|
import fr.xephi.authme.settings.properties.ProtectionSettings;
|
||||||
import fr.xephi.authme.settings.properties.RegistrationSettings;
|
import fr.xephi.authme.settings.properties.RegistrationSettings;
|
||||||
@ -46,6 +48,8 @@ public class OnJoinVerifier implements Reloadable {
|
|||||||
@Inject
|
@Inject
|
||||||
private AntiBotService antiBotService;
|
private AntiBotService antiBotService;
|
||||||
@Inject
|
@Inject
|
||||||
|
private WhiteListService whiteListService;
|
||||||
|
@Inject
|
||||||
private ValidationService validationService;
|
private ValidationService validationService;
|
||||||
@Inject
|
@Inject
|
||||||
private BukkitService bukkitService;
|
private BukkitService bukkitService;
|
||||||
@ -81,6 +85,18 @@ public class OnJoinVerifier implements Reloadable {
|
|||||||
throw new FailedVerificationException(MessageKey.KICK_ANTIBOT);
|
throw new FailedVerificationException(MessageKey.KICK_ANTIBOT);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public void checkWhitelist(String name, boolean isAuthAvailable) throws FailedVerificationException {
|
||||||
|
if (isAuthAvailable || permissionsManager.hasPermissionOffline(name, PlayerStatePermission.WHITELIST)) {
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
bukkitService.getOnlinePlayers().stream()
|
||||||
|
.filter(player -> permissionsManager.hasPermission(player, AdminPermission.WHITELIST_MESSAGE))
|
||||||
|
.forEach(player -> messages.send(player, MessageKey.WHITELIST_KICK, name));
|
||||||
|
}
|
||||||
|
if (whiteListService.shouldKick()) {
|
||||||
|
throw new FailedVerificationException(MessageKey.KICK_WHITELIST);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks whether non-registered players should be kicked, and if so, whether the player should be kicked.
|
* Checks whether non-registered players should be kicked, and if so, whether the player should be kicked.
|
||||||
|
|||||||
@ -148,6 +148,7 @@ public class PlayerListener implements Listener {
|
|||||||
final PlayerAuth auth = dataSource.getAuth(name);
|
final PlayerAuth auth = dataSource.getAuth(name);
|
||||||
final boolean isAuthAvailable = auth != null;
|
final boolean isAuthAvailable = auth != null;
|
||||||
onJoinVerifier.checkKickNonRegistered(isAuthAvailable);
|
onJoinVerifier.checkKickNonRegistered(isAuthAvailable);
|
||||||
|
onJoinVerifier.checkWhitelist(name, isAuthAvailable);
|
||||||
onJoinVerifier.checkAntibot(name, isAuthAvailable);
|
onJoinVerifier.checkAntibot(name, isAuthAvailable);
|
||||||
onJoinVerifier.checkNameCasing(name, auth);
|
onJoinVerifier.checkNameCasing(name, auth);
|
||||||
final String ip = event.getAddress().getHostAddress();
|
final String ip = event.getAddress().getHostAddress();
|
||||||
|
|||||||
@ -16,6 +16,9 @@ public enum MessageKey {
|
|||||||
|
|
||||||
/** AntiBot protection mode is enabled! You have to wait some minutes before joining the server. */
|
/** AntiBot protection mode is enabled! You have to wait some minutes before joining the server. */
|
||||||
KICK_ANTIBOT("antibot.kick_antibot"),
|
KICK_ANTIBOT("antibot.kick_antibot"),
|
||||||
|
KICK_WHITELIST("on_join_validation.kick_whitelist"),
|
||||||
|
WHITELIST_ENABLED_MESSAGE("misc.whitelist_enabled"),
|
||||||
|
WHITELIST_DISABLED_MESSAGE("misc.whitelist_disabled"),
|
||||||
|
|
||||||
/** This user isn't registered! */
|
/** This user isn't registered! */
|
||||||
UNKNOWN_USER("error.unregistered_user"),
|
UNKNOWN_USER("error.unregistered_user"),
|
||||||
@ -196,6 +199,7 @@ public enum MessageKey {
|
|||||||
|
|
||||||
/** [AntiBotService] AntiBot disabled after %m minutes! */
|
/** [AntiBotService] AntiBot disabled after %m minutes! */
|
||||||
ANTIBOT_AUTO_DISABLED_MESSAGE("antibot.auto_disabled", "%m"),
|
ANTIBOT_AUTO_DISABLED_MESSAGE("antibot.auto_disabled", "%m"),
|
||||||
|
WHITELIST_KICK("misc.whitelist_kick", "%p"),
|
||||||
|
|
||||||
/** The email address is already being used */
|
/** The email address is already being used */
|
||||||
EMAIL_ALREADY_USED_ERROR("email.already_used"),
|
EMAIL_ALREADY_USED_ERROR("email.already_used"),
|
||||||
|
|||||||
@ -124,6 +124,7 @@ public enum AdminPermission implements PermissionNode {
|
|||||||
* Permission to see Antibot messages.
|
* Permission to see Antibot messages.
|
||||||
*/
|
*/
|
||||||
ANTIBOT_MESSAGES("authme.admin.antibotmessages"),
|
ANTIBOT_MESSAGES("authme.admin.antibotmessages"),
|
||||||
|
WHITELIST_MESSAGE("authme.admin.whitelistmessage"),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Permission to use the update messages command.
|
* Permission to use the update messages command.
|
||||||
|
|||||||
@ -10,6 +10,7 @@ public enum PlayerStatePermission implements PermissionNode {
|
|||||||
* Permission node to bypass AntiBot protection.
|
* Permission node to bypass AntiBot protection.
|
||||||
*/
|
*/
|
||||||
BYPASS_ANTIBOT("authme.bypassantibot", DefaultPermission.OP_ONLY),
|
BYPASS_ANTIBOT("authme.bypassantibot", DefaultPermission.OP_ONLY),
|
||||||
|
WHITELIST("authme.whitelist", DefaultPermission.OP_ONLY),
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Permission node to bypass BungeeCord server teleportation.
|
* Permission node to bypass BungeeCord server teleportation.
|
||||||
|
|||||||
82
src/main/java/fr/xephi/authme/service/WhiteListService.java
Normal file
82
src/main/java/fr/xephi/authme/service/WhiteListService.java
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
package fr.xephi.authme.service;
|
||||||
|
|
||||||
|
import fr.xephi.authme.initialization.SettingsDependent;
|
||||||
|
import fr.xephi.authme.message.MessageKey;
|
||||||
|
import fr.xephi.authme.message.Messages;
|
||||||
|
import fr.xephi.authme.permission.AdminPermission;
|
||||||
|
import fr.xephi.authme.permission.PermissionsManager;
|
||||||
|
import fr.xephi.authme.settings.Settings;
|
||||||
|
import fr.xephi.authme.settings.properties.ProtectionSettings;
|
||||||
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The AntiBot Service Management class.
|
||||||
|
*/
|
||||||
|
public class WhiteListService implements SettingsDependent {
|
||||||
|
|
||||||
|
private final PermissionsManager permissionsManager;
|
||||||
|
private final Messages messages;
|
||||||
|
private final BukkitService bukkitService;
|
||||||
|
private WhiteListStatus whiteListStatus;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
WhiteListService(Settings settings, Messages messages, PermissionsManager permissionsManager,
|
||||||
|
BukkitService bukkitService) {
|
||||||
|
// Instances
|
||||||
|
this.messages = messages;
|
||||||
|
this.permissionsManager = permissionsManager;
|
||||||
|
this.bukkitService = bukkitService;
|
||||||
|
// Initial status
|
||||||
|
whiteListStatus = WhiteListStatus.DISABLED;
|
||||||
|
// Load settings and start if required
|
||||||
|
reload(settings);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void reload(Settings settings) {
|
||||||
|
}
|
||||||
|
|
||||||
|
private void startProtection() {
|
||||||
|
if (whiteListStatus == WhiteListStatus.ACTIVE) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
whiteListStatus = WhiteListStatus.ACTIVE;
|
||||||
|
bukkitService.getOnlinePlayers().stream()
|
||||||
|
.filter(player -> permissionsManager.hasPermission(player, AdminPermission.WHITELIST_MESSAGE))
|
||||||
|
.forEach(player -> messages.send(player, MessageKey.WHITELIST_ENABLED_MESSAGE));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void stopProtection() {
|
||||||
|
if (whiteListStatus == WhiteListStatus.DISABLED) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
whiteListStatus = WhiteListStatus.DISABLED;
|
||||||
|
bukkitService.getOnlinePlayers().stream()
|
||||||
|
.filter(player -> permissionsManager.hasPermission(player, AdminPermission.WHITELIST_MESSAGE))
|
||||||
|
.forEach(player -> messages.send(player, MessageKey.WHITELIST_DISABLED_MESSAGE));
|
||||||
|
}
|
||||||
|
public WhiteListStatus getWhiteListStatus() {
|
||||||
|
return whiteListStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void overrideWhiteListStatus(boolean started) {
|
||||||
|
if (started) {
|
||||||
|
startProtection();
|
||||||
|
} else {
|
||||||
|
stopProtection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public boolean shouldKick() {
|
||||||
|
return whiteListStatus != WhiteListStatus.DISABLED;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum WhiteListStatus {
|
||||||
|
DISABLED,
|
||||||
|
ACTIVE
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -19,7 +19,9 @@ public final class ProtectionSettings implements SettingsHolder {
|
|||||||
@Comment("Apply the protection also to registered usernames")
|
@Comment("Apply the protection also to registered usernames")
|
||||||
public static final Property<Boolean> ENABLE_PROTECTION_REGISTERED =
|
public static final Property<Boolean> ENABLE_PROTECTION_REGISTERED =
|
||||||
newProperty("Protection.enableProtectionRegistered", true);
|
newProperty("Protection.enableProtectionRegistered", true);
|
||||||
|
@Comment("Only allow registed usernames join server")
|
||||||
|
public static final Property<Boolean> ENABLE_WHITELIST =
|
||||||
|
newProperty("Protection.enableWhiteList", true);
|
||||||
@Comment({
|
@Comment({
|
||||||
"Countries allowed to join the server and register. For country codes, see",
|
"Countries allowed to join the server and register. For country codes, see",
|
||||||
"https://dev.maxmind.com/geoip/legacy/codes/iso3166/",
|
"https://dev.maxmind.com/geoip/legacy/codes/iso3166/",
|
||||||
|
|||||||
@ -65,6 +65,9 @@ misc:
|
|||||||
usage_change_password: '&a正确用法:“/changepassword 旧密码 新密码”'
|
usage_change_password: '&a正确用法:“/changepassword 旧密码 新密码”'
|
||||||
accounts_owned_self: '您拥有 %count 个账户:'
|
accounts_owned_self: '您拥有 %count 个账户:'
|
||||||
accounts_owned_other: '玩家 %name 拥有 %count 个账户:'
|
accounts_owned_other: '玩家 %name 拥有 %count 个账户:'
|
||||||
|
whitelist_enabled: '&c*** 服务器已暂停注册 ***'
|
||||||
|
whitelist_disabled: '&a*** 服务器已开放注册 ***'
|
||||||
|
whitelist_kick: '&7玩家 &c%p &7请求加入服务器,但是被拒绝了.'
|
||||||
|
|
||||||
# Session messages
|
# Session messages
|
||||||
session:
|
session:
|
||||||
@ -87,7 +90,10 @@ on_join_validation:
|
|||||||
&c如果您并不知情,请更换您的用户名重新加入该服务器.
|
&c如果您并不知情,请更换您的用户名重新加入该服务器.
|
||||||
invalid_name_case: '&c您应该使用 %valid 登录服务器,当前名字: %invalid .'
|
invalid_name_case: '&c您应该使用 %valid 登录服务器,当前名字: %invalid .'
|
||||||
quick_command: '&c您发送命令的速度太快了,请重新加入服务器等待一会后再使用命令'
|
quick_command: '&c您发送命令的速度太快了,请重新加入服务器等待一会后再使用命令'
|
||||||
|
kick_whitelist: |-
|
||||||
|
&6[&b&lAccount Security System&6]
|
||||||
|
&c本服务器已经暂停注册,请用下面的联系方式了解详细情况.
|
||||||
|
&cQQ群聊号码: 550984860 &b| &c QQ: 2125368097 &b| &cTelegram: @Stabrinai
|
||||||
# Email
|
# Email
|
||||||
email:
|
email:
|
||||||
add_email_request: ''
|
add_email_request: ''
|
||||||
|
|||||||
@ -184,6 +184,9 @@ permissions:
|
|||||||
authme.bypassantibot:
|
authme.bypassantibot:
|
||||||
description: Permission node to bypass AntiBot protection.
|
description: Permission node to bypass AntiBot protection.
|
||||||
default: op
|
default: op
|
||||||
|
authme.whitelist:
|
||||||
|
description: Permission node to whitelist.
|
||||||
|
default: op
|
||||||
authme.bypasscountrycheck:
|
authme.bypasscountrycheck:
|
||||||
description: Permission to bypass the GeoIp country code check.
|
description: Permission to bypass the GeoIp country code check.
|
||||||
default: false
|
default: false
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user