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;
@ -21,7 +21,7 @@ import javax.inject.Inject;
* @param <P> the parameters type * @param <P> the parameters type
*/ */
abstract class AbstractPasswordRegisterExecutor<P extends AbstractPasswordRegisterParams> abstract class AbstractPasswordRegisterExecutor<P extends AbstractPasswordRegisterParams>
implements RegistrationExecutor<P> { implements RegistrationExecutor<P> {
/** /**
* Number of ticks to wait before running the login action when it is run synchronously. * Number of ticks to wait before running the login action when it is run synchronously.
@ -51,7 +51,7 @@ abstract class AbstractPasswordRegisterExecutor<P extends AbstractPasswordRegist
@Override @Override
public boolean isRegistrationAdmitted(P params) { public boolean isRegistrationAdmitted(P params) {
ValidationService.ValidationResult passwordValidation = validationService.validatePassword( ValidationService.ValidationResult passwordValidation = validationService.validatePassword(
params.getPassword(), params.getPlayer().getName()); params.getPassword(), params.getPlayer().getName());
if (passwordValidation.hasError()) { if (passwordValidation.hasError()) {
commonService.send(params.getPlayer(), passwordValidation.getMessageKey(), passwordValidation.getArgs()); commonService.send(params.getPlayer(), passwordValidation.getMessageKey(), passwordValidation.getArgs());
return false; return false;
@ -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) {
@ -212,13 +221,13 @@ public class BukkitService implements SettingsDependent {
* Returns a task that will repeatedly run asynchronously until cancelled, * Returns a task that will repeatedly run asynchronously until cancelled,
* starting after the specified number of server ticks. * starting after the specified number of server ticks.
* *
* @param task the task to be run * @param task the task to be run
* @param delay the ticks to wait before running the task for the first * @param delay the ticks to wait before running the task for the first
* time * time
* @param period the ticks to wait between runs * @param period the ticks to wait between runs
* @return a BukkitTask that contains the id number * @return a BukkitTask that contains the id number
* @throws IllegalArgumentException if task is null * @throws IllegalArgumentException if task is null
* @throws IllegalStateException if this was already scheduled * @throws IllegalStateException if this was already scheduled
*/ */
public MyScheduledTask runTaskTimerAsynchronously(UniversalRunnable task, long delay, long period) { public MyScheduledTask runTaskTimerAsynchronously(UniversalRunnable task, long delay, long period) {
return task.runTaskTimerAsynchronously(authMe, delay, period); return task.runTaskTimerAsynchronously(authMe, delay, period);
@ -309,7 +318,7 @@ public class BukkitService implements SettingsDependent {
* *
* @param event Event details * @param event Event details
* @throws IllegalStateException Thrown when an asynchronous event is * @throws IllegalStateException Thrown when an asynchronous event is
* fired from synchronous code. * fired from synchronous code.
*/ */
public void callEvent(Event event) { public void callEvent(Event event) {
Bukkit.getPluginManager().callEvent(event); Bukkit.getPluginManager().callEvent(event);
@ -320,7 +329,7 @@ public class BukkitService implements SettingsDependent {
* *
* @param eventSupplier the event supplier: function taking a boolean specifying whether AuthMe is configured * @param eventSupplier the event supplier: function taking a boolean specifying whether AuthMe is configured
* in async mode or not * in async mode or not
* @param <E> the event type * @param <E> the event type
* @return the event that was created and emitted * @return the event that was created and emitted
*/ */
public <E extends Event> E createAndCallEvent(Function<Boolean, E> eventSupplier) { public <E extends Event> E createAndCallEvent(Function<Boolean, E> eventSupplier) {
@ -352,7 +361,7 @@ public class BukkitService implements SettingsDependent {
/** /**
* Dispatches a command on this server, and executes it if found. * Dispatches a command on this server, and executes it if found.
* *
* @param sender the apparent sender of the command * @param sender the apparent sender of the command
* @param commandLine the command + arguments. Example: <code>test abc 123</code> * @param commandLine the command + arguments. Example: <code>test abc 123</code>
* @return returns false if no target is found * @return returns false if no target is found
*/ */
@ -372,14 +381,14 @@ 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);
} }
/** /**
* Send the specified bytes to bungeecord using the specified player connection. * Send the specified bytes to bungeecord using the specified player connection.
* *
* @param player the player * @param player the player
* @param bytes the message * @param bytes the message
*/ */
public void sendBungeeMessage(Player player, byte[] bytes) { public void sendBungeeMessage(Player player, byte[] bytes) {
player.sendPluginMessage(authMe, "BungeeCord", bytes); player.sendPluginMessage(authMe, "BungeeCord", bytes);
@ -389,7 +398,7 @@ public class BukkitService implements SettingsDependent {
* Send the specified bytes to bungeecord using the specified player connection. * Send the specified bytes to bungeecord using the specified player connection.
* *
* @param player the player * @param player the player
* @param bytes the message * @param bytes the message
*/ */
public void sendVelocityMessage(Player player, byte[] bytes) { public void sendVelocityMessage(Player player, byte[] bytes) {
if (player != null) { if (player != null) {
@ -404,13 +413,13 @@ public class BukkitService implements SettingsDependent {
* Adds a ban to the list. If a previous ban exists, this will * Adds a ban to the list. If a previous ban exists, this will
* update the previous entry. * update the previous entry.
* *
* @param ip the ip of the ban * @param ip the ip of the ban
* @param reason reason for the ban, null indicates implementation default * @param reason reason for the ban, null indicates implementation default
* @param expires date for the ban's expiration (unban), or null to imply * @param expires date for the ban's expiration (unban), or null to imply
* forever * forever
* @param source source of the ban, null indicates implementation default * @param source source of the ban, null indicates implementation default
* @return the entry for the newly created ban, or the entry for the * @return the entry for the newly created ban, or the entry for the
* (updated) previous ban * (updated) previous ban
*/ */
public BanEntry banIp(String ip, String reason, Date expires, String source) { public BanEntry banIp(String ip, String reason, Date expires, String source) {
return Bukkit.getServer().getBanList(BanList.Type.IP).addBan(ip, reason, expires, source); return Bukkit.getServer().getBanList(BanList.Type.IP).addBan(ip, reason, expires, source);

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 + "'");
} }
} }
} }