diff --git a/src/main/java/fr/xephi/authme/service/ValidationService.java b/src/main/java/fr/xephi/authme/service/ValidationService.java index 725575bee..4e60d722b 100644 --- a/src/main/java/fr/xephi/authme/service/ValidationService.java +++ b/src/main/java/fr/xephi/authme/service/ValidationService.java @@ -157,8 +157,25 @@ public class ValidationService implements Reloadable { String ip = PlayerUtils.getPlayerIp(player); String domain = player.getAddress().getHostName(); - return restrictions.stream() - .anyMatch(restriction -> ip.equals(restriction) || domain.equalsIgnoreCase(restriction)); + for(String restriction : restrictions) { + if(restriction.startsWith("regex:")) { + restriction = restriction.replace("regex:", ""); + if(ip.matches(restriction)) { + return true; + } + if(domain.matches(restriction)) { + return true; + } + } else { + if(ip.equals(restriction)) { + return true; + } + if(domain.equalsIgnoreCase(restriction)) { + return true; + } + } + } + return false; } /** diff --git a/src/main/java/fr/xephi/authme/settings/properties/RestrictionSettings.java b/src/main/java/fr/xephi/authme/settings/properties/RestrictionSettings.java index 009fb59a0..1a3de299d 100644 --- a/src/main/java/fr/xephi/authme/settings/properties/RestrictionSettings.java +++ b/src/main/java/fr/xephi/authme/settings/properties/RestrictionSettings.java @@ -78,9 +78,11 @@ public final class RestrictionSettings implements SettingsHolder { @Comment({ "The restricted user feature will kick players listed below", "if they don't match the defined IP address. Names are case-insensitive.", + "Ip addresses support regex expressions (regex:127\\.0\\.0\\..*)", "Example:", " AllowedRestrictedUser:", - " - playername;127.0.0.1"}) + " - playername;127.0.0.1", + " - playername;regex:127\\.0\\.0\\..*"}) public static final Property> RESTRICTED_USERS = newLowercaseListProperty("settings.restrictions.AllowedRestrictedUser"); diff --git a/src/test/java/fr/xephi/authme/service/ValidationServiceTest.java b/src/test/java/fr/xephi/authme/service/ValidationServiceTest.java index 3953d4efd..147b547d1 100644 --- a/src/test/java/fr/xephi/authme/service/ValidationServiceTest.java +++ b/src/test/java/fr/xephi/authme/service/ValidationServiceTest.java @@ -350,21 +350,27 @@ public class ValidationServiceTest { // given given(settings.getProperty(RestrictionSettings.ENABLE_RESTRICTED_USERS)).willReturn(true); given(settings.getProperty(RestrictionSettings.RESTRICTED_USERS)) - .willReturn(Arrays.asList("Bobby;127.0.0.4", "Tamara;32.24.16.8")); + .willReturn(Arrays.asList("Bobby;127.0.0.4", "Tamara;32.24.16.8", "Gabriel;regex:93\\.23\\.44\\..*")); validationService.reload(); Player bobby = mockPlayer("bobby", "127.0.0.4"); Player tamara = mockPlayer("taMARA", "8.8.8.8"); + Player gabriel = mockPlayer("Gabriel", "93.23.44.65"); + Player gabriel2 = mockPlayer("Gabriel", "93.23.33.34"); Player notRestricted = mockPlayer("notRestricted", "0.0.0.0"); // when boolean isBobbyAdmitted = validationService.fulfillsNameRestrictions(bobby); boolean isTamaraAdmitted = validationService.fulfillsNameRestrictions(tamara); + boolean isGabrielAdmitted = validationService.fulfillsNameRestrictions(gabriel); + boolean isGabriel2Admitted = validationService.fulfillsNameRestrictions(gabriel2); boolean isNotRestrictedAdmitted = validationService.fulfillsNameRestrictions(notRestricted); // then assertThat(isBobbyAdmitted, equalTo(true)); assertThat(isTamaraAdmitted, equalTo(false)); + assertThat(isGabrielAdmitted, equalTo(true)); + assertThat(isGabriel2Admitted, equalTo(false)); assertThat(isNotRestrictedAdmitted, equalTo(true)); }