Move some configuations from PluginSettings to CommonSettings (new created)

This commit is contained in:
MC~蛟龙 2024-07-11 20:40:09 +08:00
parent d22ec8c34a
commit ea98f7b9f2
20 changed files with 134 additions and 98 deletions

View File

@ -11,6 +11,7 @@ import fr.xephi.authme.logger.ConsoleLoggerFactory;
import fr.xephi.authme.logger.Log4JFilter; import fr.xephi.authme.logger.Log4JFilter;
import fr.xephi.authme.service.BukkitService; import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.CommonSettings;
import fr.xephi.authme.settings.properties.DatabaseSettings; import fr.xephi.authme.settings.properties.DatabaseSettings;
import fr.xephi.authme.settings.properties.EmailSettings; import fr.xephi.authme.settings.properties.EmailSettings;
import fr.xephi.authme.settings.properties.PluginSettings; import fr.xephi.authme.settings.properties.PluginSettings;
@ -56,7 +57,7 @@ public class OnStartupTasks {
final Metrics metrics = new Metrics(plugin, 18479); final Metrics metrics = new Metrics(plugin, 18479);
metrics.addCustomChart(new SimplePie("messages_language", metrics.addCustomChart(new SimplePie("messages_language",
() -> settings.getProperty(PluginSettings.MESSAGES_LANGUAGE))); () -> settings.getProperty(CommonSettings.MESSAGES_LANGUAGE)));
metrics.addCustomChart(new SimplePie("database_backend", metrics.addCustomChart(new SimplePie("database_backend",
() -> settings.getProperty(DatabaseSettings.BACKEND).toString())); () -> settings.getProperty(DatabaseSettings.BACKEND).toString()));
} }

View File

@ -7,6 +7,7 @@ import fr.xephi.authme.initialization.DataFolder;
import fr.xephi.authme.initialization.Reloadable; import fr.xephi.authme.initialization.Reloadable;
import fr.xephi.authme.logger.ConsoleLoggerFactory; import fr.xephi.authme.logger.ConsoleLoggerFactory;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.CommonSettings;
import fr.xephi.authme.settings.properties.PluginSettings; import fr.xephi.authme.settings.properties.PluginSettings;
import fr.xephi.authme.util.FileUtils; import fr.xephi.authme.util.FileUtils;
import fr.xephi.authme.util.message.I18NUtils; import fr.xephi.authme.util.message.I18NUtils;
@ -45,7 +46,7 @@ public abstract class AbstractMessageFileHandler implements Reloadable {
@Override @Override
@PostConstruct @PostConstruct
public void reload() { public void reload() {
String language = settings.getProperty(PluginSettings.MESSAGES_LANGUAGE); String language = getLanguage();
filename = createFilePath(language); filename = createFilePath(language);
File messagesFile = initializeFile(filename); File messagesFile = initializeFile(filename);
configuration = Configuration.loadFromFile(messagesFile); configuration = Configuration.loadFromFile(messagesFile);
@ -53,7 +54,7 @@ public abstract class AbstractMessageFileHandler implements Reloadable {
} }
protected String getLanguage() { protected String getLanguage() {
return settings.getProperty(PluginSettings.MESSAGES_LANGUAGE); return settings.getProperty(CommonSettings.MESSAGES_LANGUAGE);
} }
protected File getUserLanguageFile() { protected File getUserLanguageFile() {

View File

@ -28,6 +28,7 @@ import fr.xephi.authme.service.bungeecord.BungeeSender;
import fr.xephi.authme.service.bungeecord.MessageType; import fr.xephi.authme.service.bungeecord.MessageType;
import fr.xephi.authme.service.velocity.VelocitySender; import fr.xephi.authme.service.velocity.VelocitySender;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.CommonSettings;
import fr.xephi.authme.settings.properties.DatabaseSettings; import fr.xephi.authme.settings.properties.DatabaseSettings;
import fr.xephi.authme.settings.properties.EmailSettings; import fr.xephi.authme.settings.properties.EmailSettings;
import fr.xephi.authme.settings.properties.HooksSettings; import fr.xephi.authme.settings.properties.HooksSettings;
@ -193,7 +194,7 @@ public class AsynchronousLogin implements AsynchronousProcess {
return null; return null;
} }
boolean isAsync = service.getProperty(PluginSettings.USE_ASYNC_TASKS); boolean isAsync = service.getProperty(CommonSettings.USE_ASYNC_TASKS);
AuthMeAsyncPreLoginEvent event = new AuthMeAsyncPreLoginEvent(player, isAsync); AuthMeAsyncPreLoginEvent event = new AuthMeAsyncPreLoginEvent(player, isAsync);
bukkitService.callEvent(event); bukkitService.callEvent(event);
if (!event.canLogin()) { if (!event.canLogin()) {

View File

@ -11,6 +11,7 @@ import fr.xephi.authme.service.CommonService;
import fr.xephi.authme.service.SessionService; import fr.xephi.authme.service.SessionService;
import fr.xephi.authme.service.ValidationService; import fr.xephi.authme.service.ValidationService;
import fr.xephi.authme.settings.SpawnLoader; import fr.xephi.authme.settings.SpawnLoader;
import fr.xephi.authme.settings.properties.CommonSettings;
import fr.xephi.authme.settings.properties.PluginSettings; import fr.xephi.authme.settings.properties.PluginSettings;
import fr.xephi.authme.util.PlayerUtils; import fr.xephi.authme.util.PlayerUtils;
import org.bukkit.Location; import org.bukkit.Location;
@ -97,7 +98,7 @@ public class AsynchronousQuit implements AsynchronousProcess {
//always update the database when the player quit the game (if sessions are disabled) //always update the database when the player quit the game (if sessions are disabled)
if (wasLoggedIn) { if (wasLoggedIn) {
database.setUnlogged(name); database.setUnlogged(name);
if (!service.getProperty(PluginSettings.SESSIONS_ENABLED)) { if (!service.getProperty(CommonSettings.SESSIONS_ENABLED)) {
sessionService.revokeSession(name); sessionService.revokeSession(name);
} }
} }

View File

@ -8,7 +8,7 @@ import fr.xephi.authme.security.crypts.HashedPassword;
import fr.xephi.authme.service.BukkitService; import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.service.CommonService; import fr.xephi.authme.service.CommonService;
import fr.xephi.authme.service.ValidationService; import fr.xephi.authme.service.ValidationService;
import fr.xephi.authme.settings.properties.PluginSettings; import fr.xephi.authme.settings.properties.CommonSettings;
import fr.xephi.authme.settings.properties.RegistrationSettings; import fr.xephi.authme.settings.properties.RegistrationSettings;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -88,7 +88,7 @@ abstract class AbstractPasswordRegisterExecutor<P extends AbstractPasswordRegist
public void executePostPersistAction(P params) { public void executePostPersistAction(P params) {
final Player player = params.getPlayer(); final Player player = params.getPlayer();
if (performLoginAfterRegister(params)) { if (performLoginAfterRegister(params)) {
if (commonService.getProperty(PluginSettings.USE_ASYNC_TASKS)) { if (commonService.getProperty(CommonSettings.USE_ASYNC_TASKS)) {
bukkitService.runTaskAsynchronously(() -> asynchronousLogin.forceLogin(player)); bukkitService.runTaskAsynchronously(() -> asynchronousLogin.forceLogin(player));
} else { } else {
bukkitService.scheduleSyncDelayedTask(() -> asynchronousLogin.forceLogin(player), SYNC_LOGIN_DELAY); bukkitService.scheduleSyncDelayedTask(() -> asynchronousLogin.forceLogin(player), SYNC_LOGIN_DELAY);

View File

@ -10,6 +10,7 @@ import com.warrenstrange.googleauth.IGoogleAuthenticator;
import fr.xephi.authme.data.auth.PlayerAuth; import fr.xephi.authme.data.auth.PlayerAuth;
import fr.xephi.authme.initialization.HasCleanup; import fr.xephi.authme.initialization.HasCleanup;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.CommonSettings;
import fr.xephi.authme.settings.properties.PluginSettings; import fr.xephi.authme.settings.properties.PluginSettings;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -68,7 +69,7 @@ public class TotpAuthenticator implements HasCleanup {
public TotpGenerationResult generateTotpKey(Player player) { public TotpGenerationResult generateTotpKey(Player player) {
GoogleAuthenticatorKey credentials = authenticator.createCredentials(); GoogleAuthenticatorKey credentials = authenticator.createCredentials();
String qrCodeUrl = GoogleAuthenticatorQRGenerator.getOtpAuthURL( String qrCodeUrl = GoogleAuthenticatorQRGenerator.getOtpAuthURL(
settings.getProperty(PluginSettings.SERVER_NAME), player.getName(), credentials); settings.getProperty(CommonSettings.SERVER_NAME), player.getName(), credentials);
return new TotpGenerationResult(credentials.getKey(), qrCodeUrl); return new TotpGenerationResult(credentials.getKey(), qrCodeUrl);
} }

View File

@ -6,7 +6,7 @@ import com.github.Anon8281.universalScheduler.scheduling.tasks.MyScheduledTask;
import fr.xephi.authme.AuthMe; import fr.xephi.authme.AuthMe;
import fr.xephi.authme.initialization.SettingsDependent; import fr.xephi.authme.initialization.SettingsDependent;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.PluginSettings; import fr.xephi.authme.settings.properties.CommonSettings;
import org.bukkit.BanEntry; import org.bukkit.BanEntry;
import org.bukkit.BanList; import org.bukkit.BanList;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -35,11 +35,17 @@ import static fr.xephi.authme.AuthMe.getScheduler;
*/ */
public class BukkitService implements SettingsDependent { public class BukkitService implements SettingsDependent {
/** Number of ticks per second in the Bukkit main thread. */ /**
* Number of ticks per second in the Bukkit main thread.
*/
public static final int TICKS_PER_SECOND = 20; public static final int TICKS_PER_SECOND = 20;
/** Number of ticks per minute. */ /**
* Number of ticks per minute.
*/
public static final int TICKS_PER_MINUTE = 60 * TICKS_PER_SECOND; public static final int TICKS_PER_MINUTE = 60 * TICKS_PER_SECOND;
/** Whether the server is running Folia. */ /**
* Whether the server is running Folia.
*/
private static final boolean isFolia = UniversalScheduler.isFolia; private static final boolean isFolia = UniversalScheduler.isFolia;
private final AuthMe authMe; private final AuthMe authMe;
private boolean useAsyncTasks; private boolean useAsyncTasks;
@ -121,6 +127,7 @@ public class BukkitService implements SettingsDependent {
/** /**
* Runs the task synchronously if we are running Folia, else do nothing but run it. * Runs the task synchronously if we are running Folia, else do nothing but run it.
*
* @param task the task to be run * @param task the task to be run
*/ */
public void runTaskIfFolia(Runnable task) { public void runTaskIfFolia(Runnable task) {
@ -133,6 +140,7 @@ public class BukkitService implements SettingsDependent {
/** /**
* Runs the task synchronously if we are running Folia, else do nothing but run it. * Runs the task synchronously if we are running Folia, else do nothing but run it.
*
* @param task the task to be run * @param task the task to be run
*/ */
public void runTaskIfFolia(Entity entity, Runnable task) { public void runTaskIfFolia(Entity entity, Runnable task) {
@ -145,6 +153,7 @@ public class BukkitService implements SettingsDependent {
/** /**
* Runs the task synchronously if we are running Folia, else do nothing but run it. * Runs the task synchronously if we are running Folia, else do nothing but run it.
*
* @param task the task to be run * @param task the task to be run
*/ */
public void runTaskIfFolia(Location location, Runnable task) { public void runTaskIfFolia(Location location, Runnable task) {
@ -372,7 +381,7 @@ public class BukkitService implements SettingsDependent {
@Override @Override
public void reload(Settings settings) { public void reload(Settings settings) {
useAsyncTasks = settings.getProperty(PluginSettings.USE_ASYNC_TASKS); useAsyncTasks = settings.getProperty(CommonSettings.USE_ASYNC_TASKS);
} }
/** /**

View File

@ -11,6 +11,7 @@ import fr.xephi.authme.initialization.DataFolder;
import fr.xephi.authme.message.MessagePathHelper; import fr.xephi.authme.message.MessagePathHelper;
import fr.xephi.authme.permission.DefaultPermission; import fr.xephi.authme.permission.DefaultPermission;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.CommonSettings;
import fr.xephi.authme.settings.properties.PluginSettings; import fr.xephi.authme.settings.properties.PluginSettings;
import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.DumperOptions;
import org.yaml.snakeyaml.Yaml; import org.yaml.snakeyaml.Yaml;
@ -49,7 +50,7 @@ public class HelpTranslationGenerator {
* @throws IOException if the help file cannot be written to * @throws IOException if the help file cannot be written to
*/ */
public File updateHelpFile() throws IOException { public File updateHelpFile() throws IOException {
String languageCode = settings.getProperty(PluginSettings.MESSAGES_LANGUAGE); String languageCode = settings.getProperty(CommonSettings.MESSAGES_LANGUAGE);
File helpFile = new File(dataFolder, MessagePathHelper.createHelpMessageFilePath(languageCode)); File helpFile = new File(dataFolder, MessagePathHelper.createHelpMessageFilePath(languageCode));
Map<String, Object> helpEntries = generateHelpMessageEntries(); Map<String, Object> helpEntries = generateHelpMessageEntries();

View File

@ -7,6 +7,7 @@ import fr.xephi.authme.events.RestoreSessionEvent;
import fr.xephi.authme.initialization.Reloadable; import fr.xephi.authme.initialization.Reloadable;
import fr.xephi.authme.message.MessageKey; import fr.xephi.authme.message.MessageKey;
import fr.xephi.authme.logger.ConsoleLoggerFactory; import fr.xephi.authme.logger.ConsoleLoggerFactory;
import fr.xephi.authme.settings.properties.CommonSettings;
import fr.xephi.authme.settings.properties.PluginSettings; import fr.xephi.authme.settings.properties.PluginSettings;
import fr.xephi.authme.util.PlayerUtils; import fr.xephi.authme.util.PlayerUtils;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -78,7 +79,7 @@ public class SessionService implements Reloadable {
long timeSinceLastLogin = System.currentTimeMillis() - auth.getLastLogin(); long timeSinceLastLogin = System.currentTimeMillis() - auth.getLastLogin();
if (timeSinceLastLogin > 0 if (timeSinceLastLogin > 0
&& timeSinceLastLogin < service.getProperty(PluginSettings.SESSIONS_TIMEOUT) * MILLIS_PER_MINUTE) { && timeSinceLastLogin < service.getProperty(CommonSettings.SESSIONS_TIMEOUT) * MILLIS_PER_MINUTE) {
if (PlayerUtils.getPlayerIp(player).equals(auth.getLastIp())) { if (PlayerUtils.getPlayerIp(player).equals(auth.getLastIp())) {
return SessionState.VALID; return SessionState.VALID;
} else { } else {
@ -100,6 +101,6 @@ public class SessionService implements Reloadable {
@Override @Override
public void reload() { public void reload() {
this.isEnabled = service.getProperty(PluginSettings.SESSIONS_ENABLED); this.isEnabled = service.getProperty(CommonSettings.SESSIONS_ENABLED);
} }
} }

View File

@ -13,6 +13,7 @@ import fr.xephi.authme.logger.LogLevel;
import fr.xephi.authme.process.register.RegisterSecondaryArgument; import fr.xephi.authme.process.register.RegisterSecondaryArgument;
import fr.xephi.authme.process.register.RegistrationType; import fr.xephi.authme.process.register.RegistrationType;
import fr.xephi.authme.security.HashAlgorithm; import fr.xephi.authme.security.HashAlgorithm;
import fr.xephi.authme.settings.properties.CommonSettings;
import fr.xephi.authme.settings.properties.DatabaseSettings; import fr.xephi.authme.settings.properties.DatabaseSettings;
import fr.xephi.authme.settings.properties.PluginSettings; import fr.xephi.authme.settings.properties.PluginSettings;
import fr.xephi.authme.settings.properties.RegistrationSettings; import fr.xephi.authme.settings.properties.RegistrationSettings;
@ -222,7 +223,7 @@ public class SettingsMigrationService extends PlainMigrationService {
private static boolean changeBooleanSettingToLogLevelProperty(PropertyReader reader, private static boolean changeBooleanSettingToLogLevelProperty(PropertyReader reader,
ConfigurationData configData) { ConfigurationData configData) {
final String oldPath = "Security.console.noConsoleSpam"; final String oldPath = "Security.console.noConsoleSpam";
final Property<LogLevel> newProperty = PluginSettings.LOG_LEVEL; final Property<LogLevel> newProperty = CommonSettings.LOG_LEVEL;
if (!newProperty.isValidInResource(reader) && reader.contains(oldPath)) { if (!newProperty.isValidInResource(reader) && reader.contains(oldPath)) {
logger.info("Moving '" + oldPath + "' to '" + newProperty.getPath() + "'"); logger.info("Moving '" + oldPath + "' to '" + newProperty.getPath() + "'");
boolean oldValue = Optional.ofNullable(reader.getBoolean(oldPath)).orElse(false); boolean oldValue = Optional.ofNullable(reader.getBoolean(oldPath)).orElse(false);

View File

@ -6,6 +6,7 @@ import fr.xephi.authme.logger.ConsoleLoggerFactory;
import fr.xephi.authme.security.HashAlgorithm; import fr.xephi.authme.security.HashAlgorithm;
import fr.xephi.authme.security.crypts.Argon2; import fr.xephi.authme.security.crypts.Argon2;
import fr.xephi.authme.service.BukkitService; import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.settings.properties.CommonSettings;
import fr.xephi.authme.settings.properties.EmailSettings; import fr.xephi.authme.settings.properties.EmailSettings;
import fr.xephi.authme.settings.properties.HooksSettings; import fr.xephi.authme.settings.properties.HooksSettings;
import fr.xephi.authme.settings.properties.PluginSettings; import fr.xephi.authme.settings.properties.PluginSettings;
@ -54,8 +55,8 @@ public class SettingsWarner {
} }
// Output hint if sessions are enabled that the timeout must be positive // Output hint if sessions are enabled that the timeout must be positive
if (settings.getProperty(PluginSettings.SESSIONS_ENABLED) if (settings.getProperty(CommonSettings.SESSIONS_ENABLED)
&& settings.getProperty(PluginSettings.SESSIONS_TIMEOUT) <= 0) { && settings.getProperty(CommonSettings.SESSIONS_TIMEOUT) <= 0) {
logger.warning("Warning: Session timeout needs to be positive in order to work!"); logger.warning("Warning: Session timeout needs to be positive in order to work!");
} }

View File

@ -20,9 +20,11 @@ public final class AuthMeSettingsRetriever {
*/ */
public static ConfigurationData buildConfigurationData() { public static ConfigurationData buildConfigurationData() {
return ConfigurationDataBuilder.createConfiguration( return ConfigurationDataBuilder.createConfiguration(
CommonSettings.class,
DatabaseSettings.class, PluginSettings.class, RestrictionSettings.class, DatabaseSettings.class, PluginSettings.class, RestrictionSettings.class,
EmailSettings.class, HooksSettings.class, ProtectionSettings.class, EmailSettings.class, HooksSettings.class, ProtectionSettings.class,
PurgeSettings.class, SecuritySettings.class, RegistrationSettings.class, PurgeSettings.class, SecuritySettings.class, RegistrationSettings.class,
LimboSettings.class, BackupSettings.class, ConverterSettings.class); LimboSettings.class, BackupSettings.class, ConverterSettings.class);
} }
} }

View File

@ -40,32 +40,6 @@ public final class PluginSettings implements SettingsHolder {
newLowercaseStringSetProperty("3rdPartyFeature.features.i18nMessages.locale-code-redirect", newLowercaseStringSetProperty("3rdPartyFeature.features.i18nMessages.locale-code-redirect",
"tt_ru:ru", "lzh:zhcn"); "tt_ru:ru", "lzh:zhcn");
@Comment({
"Do you want to enable the session feature?",
"If enabled, when a player authenticates successfully,",
"his IP and his nickname is saved.",
"The next time the player joins the server, if his IP",
"is the same as last time and the timeout hasn't",
"expired, he will not need to authenticate."
})
public static final Property<Boolean> SESSIONS_ENABLED =
newProperty("settings.sessions.enabled", true);
@Comment({
"After how many minutes should a session expire?",
"A player's session ends after the timeout or if his IP has changed"
})
public static final Property<Integer> SESSIONS_TIMEOUT =
newProperty("settings.sessions.timeout", 43200);
@Comment({
"Message language, available languages:",
"https://github.com/AuthMe/AuthMeReloaded/blob/master/docs/translations.md",
"Example: zhcn, en"
})
public static final Property<String> MESSAGES_LANGUAGE =
newProperty("settings.messagesLanguage", "en");
@Comment({ @Comment({
"Enables switching a player to defined permission groups before they log in.", "Enables switching a player to defined permission groups before they log in.",
"See below for a detailed explanation." "See below for a detailed explanation."
@ -99,21 +73,6 @@ public final class PluginSettings implements SettingsHolder {
public static final Property<Boolean> FORCE_VAULT_HOOK = public static final Property<Boolean> FORCE_VAULT_HOOK =
newProperty("settings.forceVaultHook", false); newProperty("settings.forceVaultHook", false);
@Comment({
"Log level: INFO, FINE, DEBUG. Use INFO for general messages,",
"FINE for some additional detailed ones (like password failed),",
"and DEBUG for debugging"
})
public static final Property<LogLevel> LOG_LEVEL =
newProperty(LogLevel.class, "settings.logLevel", LogLevel.FINE);
@Comment({
"By default we schedule async tasks when talking to the database. If you want",
"typical communication with the database to happen synchronously, set this to false"
})
public static final Property<Boolean> USE_ASYNC_TASKS =
newProperty("settings.useAsyncTasks", true);
@Comment("The name of the server, used in some placeholders.") @Comment("The name of the server, used in some placeholders.")
public static final Property<String> SERVER_NAME = newProperty("settings.serverName", "Your Minecraft Server"); public static final Property<String> SERVER_NAME = newProperty("settings.serverName", "Your Minecraft Server");

View File

@ -1,6 +1,7 @@
package fr.xephi.authme.util.message; package fr.xephi.authme.util.message;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.CommonSettings;
import fr.xephi.authme.settings.properties.PluginSettings; import fr.xephi.authme.settings.properties.PluginSettings;
import fr.xephi.authme.util.Utils; import fr.xephi.authme.util.Utils;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -97,6 +98,6 @@ public class I18NUtils {
return locale; return locale;
} }
return settings.getProperty(PluginSettings.MESSAGES_LANGUAGE); return settings.getProperty(CommonSettings.MESSAGES_LANGUAGE);
} }
} }

View File

@ -0,0 +1,62 @@
package fr.xephi.authme.settings.properties;
import ch.jalu.configme.Comment;
import ch.jalu.configme.SettingsHolder;
import ch.jalu.configme.properties.Property;
import fr.xephi.authme.logger.LogLevel;
import static ch.jalu.configme.properties.PropertyInitializer.newProperty;
/**
* CommonSettings
*
* @author TheFloodDragon
* @since 2024/7/11 20:19
*/
public final class CommonSettings implements SettingsHolder {
@Comment({
"Message language, available languages:",
"https://github.com/AuthMe/AuthMeReloaded/blob/master/docs/translations.md",
"Example: zhcn, en"
})
public static final Property<String> MESSAGES_LANGUAGE =
newProperty("settings.messagesLanguage", "en");
@Comment({
"(Disabled since 2024.7.11) Log level: INFO, FINE, DEBUG. Use INFO for general messages,",
"FINE for some additional detailed ones (like password failed),",
"and DEBUG for debugging"
})
public static final Property<LogLevel> LOG_LEVEL =
newProperty(LogLevel.class, "settings.logLevel", LogLevel.FINE);
@Comment({
"By default we schedule async tasks when talking to the database. If you want",
"typical communication with the database to happen synchronously, set this to false"
})
public static final Property<Boolean> USE_ASYNC_TASKS =
newProperty("settings.useAsyncTasks", true);
@Comment({
"Do you want to enable the session feature?",
"If enabled, when a player authenticates successfully,",
"his IP and his nickname is saved.",
"The next time the player joins the server, if his IP",
"is the same as last time and the timeout hasn't",
"expired, he will not need to authenticate."
})
public static final Property<Boolean> SESSIONS_ENABLED =
newProperty("settings.sessions.enabled", true);
@Comment({
"After how many minutes should a session expire?",
"A player's session ends after the timeout or if his IP has changed"
})
public static final Property<Integer> SESSIONS_TIMEOUT =
newProperty("settings.sessions.timeout", 43200);
@Comment("The name of the server, used in some placeholders.")
public static final Property<String> SERVER_NAME = newProperty("settings.serverName", "Your Minecraft Server");
}

View File

@ -1,6 +1,7 @@
dependencies { dependencies {
compileOnly(project(":project:module-logger")) compileOnly(project(":project:module-logger"))
compileOnly(project(":project:module-util")) compileOnly(project(":project:module-util"))
compileOnly(project(":project:module-security"))
compileOnly(libs.configme) compileOnly(libs.configme)
compileOnly(libs.jalu.injector) compileOnly(libs.jalu.injector)
// Java Email Library // Java Email Library

View File

@ -4,8 +4,8 @@ import fr.xephi.authme.initialization.DataFolder;
import fr.xephi.authme.logger.ConsoleLogger; import fr.xephi.authme.logger.ConsoleLogger;
import fr.xephi.authme.logger.ConsoleLoggerFactory; import fr.xephi.authme.logger.ConsoleLoggerFactory;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.CommonSettings;
import fr.xephi.authme.settings.properties.EmailSettings; import fr.xephi.authme.settings.properties.EmailSettings;
import fr.xephi.authme.settings.properties.PluginSettings;
import fr.xephi.authme.settings.properties.SecuritySettings; import fr.xephi.authme.settings.properties.SecuritySettings;
import fr.xephi.authme.util.FileUtils; import fr.xephi.authme.util.FileUtils;
import org.apache.commons.mail.EmailException; import org.apache.commons.mail.EmailException;
@ -184,7 +184,7 @@ public class EmailService {
private String replaceTagsForPasswordMail(String mailText, String name, String newPass, String ip, String time) { private String replaceTagsForPasswordMail(String mailText, String name, String newPass, String ip, String time) {
return mailText return mailText
.replace("<playername />", name) .replace("<playername />", name)
.replace("<servername />", settings.getProperty(PluginSettings.SERVER_NAME)) .replace("<servername />", settings.getProperty(CommonSettings.SERVER_NAME))
.replace("<generatedpass />", newPass) .replace("<generatedpass />", newPass)
.replace("<playerip />", ip) .replace("<playerip />", ip)
.replace("<time />", time); .replace("<time />", time);
@ -193,7 +193,7 @@ public class EmailService {
private String replaceTagsForPasswordMail(String mailText, String name, String newPass, String time) { private String replaceTagsForPasswordMail(String mailText, String name, String newPass, String time) {
return mailText return mailText
.replace("<playername />", name) .replace("<playername />", name)
.replace("<servername />", settings.getProperty(PluginSettings.SERVER_NAME)) .replace("<servername />", settings.getProperty(CommonSettings.SERVER_NAME))
.replace("<generatedpass />", newPass) .replace("<generatedpass />", newPass)
.replace("<time />", time); .replace("<time />", time);
} }
@ -201,7 +201,7 @@ public class EmailService {
private String replaceTagsForVerificationEmail(String mailText, String name, String code, int minutesValid, String time) { private String replaceTagsForVerificationEmail(String mailText, String name, String code, int minutesValid, String time) {
return mailText return mailText
.replace("<playername />", name) .replace("<playername />", name)
.replace("<servername />", settings.getProperty(PluginSettings.SERVER_NAME)) .replace("<servername />", settings.getProperty(CommonSettings.SERVER_NAME))
.replace("<generatedcode />", code) .replace("<generatedcode />", code)
.replace("<minutesvalid />", String.valueOf(minutesValid)) .replace("<minutesvalid />", String.valueOf(minutesValid))
.replace("<time />", time); .replace("<time />", time);
@ -210,7 +210,7 @@ public class EmailService {
private String replaceTagsForRecoveryCodeMail(String mailText, String name, String code, int hoursValid, String time) { private String replaceTagsForRecoveryCodeMail(String mailText, String name, String code, int hoursValid, String time) {
return mailText return mailText
.replace("<playername />", name) .replace("<playername />", name)
.replace("<servername />", settings.getProperty(PluginSettings.SERVER_NAME)) .replace("<servername />", settings.getProperty(CommonSettings.SERVER_NAME))
.replace("<recoverycode />", code) .replace("<recoverycode />", code)
.replace("<hoursvalid />", String.valueOf(hoursValid)) .replace("<hoursvalid />", String.valueOf(hoursValid))
.replace("<time />", time); .replace("<time />", time);
@ -218,7 +218,7 @@ public class EmailService {
private String replaceTagsForShutDownMail(String mailText, String time) { private String replaceTagsForShutDownMail(String mailText, String time) {
return mailText return mailText
.replace("<servername />", settings.getProperty(PluginSettings.SERVER_NAME)) .replace("<servername />", settings.getProperty(CommonSettings.SERVER_NAME))
.replace("<time />", time); .replace("<time />", time);
} }

View File

@ -4,6 +4,7 @@ import fr.xephi.authme.logger.ConsoleLogger;
import fr.xephi.authme.logger.ConsoleLoggerFactory; import fr.xephi.authme.logger.ConsoleLoggerFactory;
import fr.xephi.authme.logger.LogLevel; import fr.xephi.authme.logger.LogLevel;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.CommonSettings;
import fr.xephi.authme.settings.properties.EmailSettings; import fr.xephi.authme.settings.properties.EmailSettings;
import fr.xephi.authme.settings.properties.PluginSettings; import fr.xephi.authme.settings.properties.PluginSettings;
import fr.xephi.authme.util.StringUtils; import fr.xephi.authme.util.StringUtils;
@ -66,7 +67,7 @@ public class SendMailSsl {
email.setFrom(senderMail, senderName); email.setFrom(senderMail, senderName);
email.setSubject(settings.getProperty(EmailSettings.RECOVERY_MAIL_SUBJECT)); email.setSubject(settings.getProperty(EmailSettings.RECOVERY_MAIL_SUBJECT));
email.setAuthentication(settings.getProperty(EmailSettings.MAIL_ACCOUNT), mailPassword); email.setAuthentication(settings.getProperty(EmailSettings.MAIL_ACCOUNT), mailPassword);
if (settings.getProperty(PluginSettings.LOG_LEVEL).includes(LogLevel.DEBUG)) { if (settings.getProperty(CommonSettings.LOG_LEVEL).includes(LogLevel.DEBUG)) {
email.setDebug(true); email.setDebug(true);
} }

View File

@ -1,5 +1,4 @@
dependencies { dependencies {
compileOnly(project(":project:module-logger"))
compileOnly(libs.guava) compileOnly(libs.guava)
// String comparison library. Used for dynamic help system. // String comparison library. Used for dynamic help system.
implementation("net.ricecode:string-similarity:1.0.0") implementation("net.ricecode:string-similarity:1.0.0")

View File

@ -1,8 +1,6 @@
package fr.xephi.authme.util; package fr.xephi.authme.util;
import com.google.common.io.Files; import com.google.common.io.Files;
import fr.xephi.authme.logger.ConsoleLogger;
import fr.xephi.authme.logger.ConsoleLoggerFactory;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@ -10,8 +8,6 @@ import java.io.InputStream;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import static java.lang.String.format;
/** /**
* File utilities. * File utilities.
*/ */
@ -20,8 +16,6 @@ public final class FileUtils {
private static final DateTimeFormatter CURRENT_DATE_STRING_FORMATTER = private static final DateTimeFormatter CURRENT_DATE_STRING_FORMATTER =
DateTimeFormatter.ofPattern("yyyyMMdd_HHmm"); DateTimeFormatter.ofPattern("yyyyMMdd_HHmm");
private static ConsoleLogger logger = ConsoleLoggerFactory.get(FileUtils.class);
// Utility class // Utility class
private FileUtils() { private FileUtils() {
} }
@ -37,21 +31,20 @@ public final class FileUtils {
if (destinationFile.exists()) { if (destinationFile.exists()) {
return true; return true;
} else if (!createDirectory(destinationFile.getParentFile())) { } else if (!createDirectory(destinationFile.getParentFile())) {
logger.warning("Cannot create parent directories for '" + destinationFile + "'"); System.out.println("[warning] Cannot create parent directories for '" + destinationFile + "'");
return false; return false;
} }
try (InputStream is = getResourceFromJar(resourcePath)) { try (InputStream is = getResourceFromJar(resourcePath)) {
if (is == null) { if (is == null) {
logger.warning(format("Cannot copy resource '%s' to file '%s': cannot load resource", System.out.printf("[warning] Cannot copy resource '%s' to file '%s': cannot load resource%n", resourcePath, destinationFile.getPath());
resourcePath, destinationFile.getPath()));
} else { } else {
java.nio.file.Files.copy(is, destinationFile.toPath()); java.nio.file.Files.copy(is, destinationFile.toPath());
return true; return true;
} }
} catch (IOException e) { } catch (IOException e) {
logger.logException(format("Cannot copy resource '%s' to file '%s':", System.out.printf("[warning] Cannot copy resource '%s' to file '%s':%n", resourcePath, destinationFile.getPath());
resourcePath, destinationFile.getPath()), e); e.printStackTrace();
} }
return false; return false;
} }
@ -64,7 +57,7 @@ public final class FileUtils {
*/ */
public static boolean createDirectory(File dir) { public static boolean createDirectory(File dir) {
if (!dir.exists() && !dir.mkdirs()) { if (!dir.exists() && !dir.mkdirs()) {
logger.warning("Could not create directory '" + dir + "'"); System.out.println("[warning] Could not create directory '" + dir + "'");
return false; return false;
} }
return dir.isDirectory(); return dir.isDirectory();
@ -121,7 +114,7 @@ public final class FileUtils {
if (file != null) { if (file != null) {
boolean result = file.delete(); boolean result = file.delete();
if (!result) { if (!result) {
logger.warning("Could not delete file '" + file + "'"); System.out.println("[warning] Could not delete file '" + file + "'");
} }
} }
} }