#761 Improve permissions group support
- Drop one auth group type in favor of three: logged in, registered but not logged in, and unregistered - Move properties to same parent path
This commit is contained in:
@@ -71,6 +71,7 @@ public class SettingsMigrationService extends PlainMigrationService {
|
||||
| hasOldHelpHeaderProperty(resource)
|
||||
| hasSupportOldPasswordProperty(resource)
|
||||
| convertToRegistrationType(resource)
|
||||
| mergeAndMovePermissionGroupSettings(resource)
|
||||
|| hasDeprecatedProperties(resource);
|
||||
}
|
||||
|
||||
@@ -251,6 +252,26 @@ public class SettingsMigrationService extends PlainMigrationService {
|
||||
return true;
|
||||
}
|
||||
|
||||
private static boolean mergeAndMovePermissionGroupSettings(PropertyResource resource) {
|
||||
boolean performedChanges;
|
||||
|
||||
// We have two old settings replaced by only one: move the first non-empty one
|
||||
Property<String> oldUnloggedInGroup = newProperty("settings.security.unLoggedinGroup", "");
|
||||
Property<String> oldRegisteredGroup = newProperty("GroupOptions.RegisteredPlayerGroup", "");
|
||||
if (!oldUnloggedInGroup.getValue(resource).isEmpty()) {
|
||||
performedChanges = moveProperty(oldUnloggedInGroup, PluginSettings.REGISTERED_GROUP, resource);
|
||||
} else {
|
||||
performedChanges = moveProperty(oldRegisteredGroup, PluginSettings.REGISTERED_GROUP, resource);
|
||||
}
|
||||
|
||||
// Move paths of other old options
|
||||
performedChanges |= moveProperty(newProperty("GroupOptions.UnregisteredPlayerGroup", ""),
|
||||
PluginSettings.UNREGISTERED_GROUP, resource);
|
||||
performedChanges |= moveProperty(newProperty("permission.EnablePermissionCheck", false),
|
||||
PluginSettings.ENABLE_PERMISSION_CHECK, resource);
|
||||
return performedChanges;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks for an old property path and moves it to a new path if present.
|
||||
*
|
||||
@@ -264,9 +285,10 @@ public class SettingsMigrationService extends PlainMigrationService {
|
||||
Property<T> newProperty,
|
||||
PropertyResource resource) {
|
||||
if (resource.contains(oldProperty.getPath())) {
|
||||
ConsoleLogger.info("Detected deprecated property " + oldProperty.getPath());
|
||||
if (!resource.contains(newProperty.getPath())) {
|
||||
ConsoleLogger.info("Renamed " + oldProperty.getPath() + " to " + newProperty.getPath());
|
||||
if (resource.contains(newProperty.getPath())) {
|
||||
ConsoleLogger.info("Detected deprecated property " + oldProperty.getPath());
|
||||
} else {
|
||||
ConsoleLogger.info("Renaming " + oldProperty.getPath() + " to " + newProperty.getPath());
|
||||
resource.setValue(newProperty.getPath(), oldProperty.getValue(resource));
|
||||
}
|
||||
return true;
|
||||
|
||||
@@ -58,13 +58,6 @@ public class HooksSettings implements SettingsHolder {
|
||||
public static final Property<String> WORDPRESS_TABLE_PREFIX =
|
||||
newProperty("ExternalBoardOptions.wordpressTablePrefix", "wp_");
|
||||
|
||||
@Comment("Unregistered permission group")
|
||||
public static final Property<String> UNREGISTERED_GROUP =
|
||||
newProperty("GroupOptions.UnregisteredPlayerGroup", "");
|
||||
|
||||
@Comment("Registered permission group")
|
||||
public static final Property<String> REGISTERED_GROUP =
|
||||
newProperty("GroupOptions.RegisteredPlayerGroup", "");
|
||||
|
||||
private HooksSettings() {
|
||||
}
|
||||
|
||||
@@ -44,13 +44,33 @@ public class PluginSettings implements SettingsHolder {
|
||||
newProperty("settings.messagesLanguage", "en");
|
||||
|
||||
@Comment({
|
||||
"Take care with this option; if you want",
|
||||
"to use group switching of AuthMe",
|
||||
"for unloggedIn players, set this setting to true.",
|
||||
"Default is false."
|
||||
"Enables switching a player to defined permission groups before they log in.",
|
||||
"See below for a detailed explanation."
|
||||
})
|
||||
public static final Property<Boolean> ENABLE_PERMISSION_CHECK =
|
||||
newProperty("permission.EnablePermissionCheck", false);
|
||||
newProperty("GroupOptions.enablePermissionCheck", false);
|
||||
|
||||
@Comment({
|
||||
"This is a very important option: if a registered player joins the server",
|
||||
"AuthMe will switch him to unLoggedInGroup. This should prevent all major exploits.",
|
||||
"You can set up your permission plugin with this special group to have no permissions,",
|
||||
"or only permission to chat (or permission to send private messages etc.).",
|
||||
"The better way is to set up this group with few permissions, so if a player",
|
||||
"tries to exploit an account they can do only what you've defined for the group.",
|
||||
"After login, the player will be moved to his correct permissions group!",
|
||||
"Please note that the group name is case-sensitive, so 'admin' is different from 'Admin'",
|
||||
"Otherwise your group will be wiped and the player will join in the default group []!",
|
||||
"Example: registeredPlayerGroup: 'NotLogged'"
|
||||
})
|
||||
public static final Property<String> REGISTERED_GROUP =
|
||||
newProperty("GroupOptions.registeredPlayerGroup", "");
|
||||
|
||||
@Comment({
|
||||
"Similar to above, unregistered players can be set to the following",
|
||||
"permissions group"
|
||||
})
|
||||
public static final Property<String> UNREGISTERED_GROUP =
|
||||
newProperty("GroupOptions.unregisteredPlayerGroup", "");
|
||||
|
||||
@Comment({
|
||||
"Log level: INFO, FINE, DEBUG. Use INFO for general messages,",
|
||||
|
||||
@@ -48,22 +48,6 @@ public class SecuritySettings implements SettingsHolder {
|
||||
public static final Property<Integer> MAX_PASSWORD_LENGTH =
|
||||
newProperty("settings.security.passwordMaxLength", 30);
|
||||
|
||||
@Comment({
|
||||
"This is a very important option: every time a player joins the server,",
|
||||
"if they are registered, AuthMe will switch him to unLoggedInGroup.",
|
||||
"This should prevent all major exploits.",
|
||||
"You can set up your permission plugin with this special group to have no permissions,",
|
||||
"or only permission to chat (or permission to send private messages etc.).",
|
||||
"The better way is to set up this group with few permissions, so if a player",
|
||||
"tries to exploit an account they can do only what you've defined for the group.",
|
||||
"After, a logged in player will be moved to his correct permissions group!",
|
||||
"Please note that the group name is case-sensitive, so 'admin' is different from 'Admin'",
|
||||
"Otherwise your group will be wiped and the player will join in the default group []!",
|
||||
"Example unLoggedinGroup: NotLogged"
|
||||
})
|
||||
public static final Property<String> UNLOGGEDIN_GROUP =
|
||||
newProperty("settings.security.unLoggedinGroup", "unLoggedinGroup");
|
||||
|
||||
@Comment({
|
||||
"Possible values: SHA256, BCRYPT, BCRYPT2Y, PBKDF2, SALTEDSHA512, WHIRLPOOL,",
|
||||
"MYBB, IPB3, PHPBB, PHPFUSION, SMF, XENFORO, XAUTH, JOOMLA, WBB3, WBB4, MD5VB,",
|
||||
|
||||
Reference in New Issue
Block a user