From ca6e301d46ed30e578b5db9b18f8c711436adfbf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 28 Oct 2022 03:05:07 +0000 Subject: [PATCH 01/32] Bump maven-shade-plugin from 3.4.0 to 3.4.1 Bumps [maven-shade-plugin](https://github.com/apache/maven-shade-plugin) from 3.4.0 to 3.4.1. - [Release notes](https://github.com/apache/maven-shade-plugin/releases) - [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.4.0...maven-shade-plugin-3.4.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-shade-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 581affd1..f78e74ca 100644 --- a/pom.xml +++ b/pom.xml @@ -289,7 +289,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.4.0 + 3.4.1 shaded-jar From 779e62674eabff10ec0ec335968223cee3e1fa5c Mon Sep 17 00:00:00 2001 From: ljacqu Date: Fri, 30 Dec 2022 08:27:51 +0100 Subject: [PATCH 02/32] #2661 Remove mocks of InetAddress (which is a sealed class in JDK 19) - Remove mocks of InetAddress in favor of using real InetAddress instances. This fixes test issues under JDK 19, where InetAddress has been changed to a sealed class --- .../authme/service/ValidationService.java | 9 +++++- src/test/java/fr/xephi/authme/TestHelper.java | 15 +++++---- .../executable/authme/GetIpCommandTest.java | 2 +- .../xephi/authme/data/TempbanManagerTest.java | 6 ++-- .../process/login/AsynchronousLoginTest.java | 16 +++++----- .../process/register/AsyncRegisterTest.java | 4 +-- .../executors/EmailRegisterExecutorTest.java | 2 +- .../PasswordRegisterExecutorTest.java | 2 +- .../PlayerAuthBuilderHelperTest.java | 2 +- .../service/PasswordRecoveryServiceTest.java | 10 +++--- .../authme/service/SessionServiceTest.java | 2 +- .../authme/service/ValidationServiceTest.java | 32 ++++++++++++------- .../WelcomeMessageConfigurationTest.java | 2 +- .../commandconfig/CommandManagerTest.java | 2 +- .../fr/xephi/authme/util/PlayerUtilsTest.java | 2 +- 15 files changed, 63 insertions(+), 45 deletions(-) diff --git a/src/main/java/fr/xephi/authme/service/ValidationService.java b/src/main/java/fr/xephi/authme/service/ValidationService.java index 536d2111..2b4e72f8 100644 --- a/src/main/java/fr/xephi/authme/service/ValidationService.java +++ b/src/main/java/fr/xephi/authme/service/ValidationService.java @@ -1,6 +1,7 @@ package fr.xephi.authme.service; import ch.jalu.configme.properties.Property; +import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import fr.xephi.authme.ConsoleLogger; @@ -23,6 +24,7 @@ import org.bukkit.entity.Player; import javax.annotation.PostConstruct; import javax.inject.Inject; +import java.net.InetSocketAddress; import java.util.Collection; import java.util.List; import java.util.Locale; @@ -156,7 +158,7 @@ public class ValidationService implements Reloadable { } String ip = PlayerUtils.getPlayerIp(player); - String domain = player.getAddress().getHostName(); + String domain = getHostName(player.getAddress()); for (String restriction : restrictions) { if (restriction.startsWith("regex:")) { restriction = restriction.replace("regex:", ""); @@ -173,6 +175,11 @@ public class ValidationService implements Reloadable { return false; } + @VisibleForTesting + protected String getHostName(InetSocketAddress inetSocketAddr) { + return inetSocketAddr.getHostName(); + } + /** * Verifies whether the given value is allowed according to the given whitelist and blacklist settings. * Whitelist has precedence over blacklist: if a whitelist is set, the value is rejected if not present diff --git a/src/test/java/fr/xephi/authme/TestHelper.java b/src/test/java/fr/xephi/authme/TestHelper.java index baab8ca6..ad50c511 100644 --- a/src/test/java/fr/xephi/authme/TestHelper.java +++ b/src/test/java/fr/xephi/authme/TestHelper.java @@ -11,13 +11,13 @@ import java.net.InetSocketAddress; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; +import java.net.UnknownHostException; import java.nio.file.Path; import java.nio.file.Paths; import java.util.logging.Logger; import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; -import static org.mockito.Mockito.mock; /** * AuthMe test utilities. @@ -98,11 +98,14 @@ public final class TestHelper { * @param player the player mock * @param ip the ip address it should return */ - public static void mockPlayerIp(Player player, String ip) { - InetAddress inetAddress = mock(InetAddress.class); - given(inetAddress.getHostAddress()).willReturn(ip); - InetSocketAddress inetSocketAddress = new InetSocketAddress(inetAddress, 8093); - given(player.getAddress()).willReturn(inetSocketAddress); + public static void mockIpAddressToPlayer(Player player, String ip) { + try { + InetAddress inetAddress = InetAddress.getByName(ip); + InetSocketAddress inetSocketAddress = new InetSocketAddress(inetAddress, 8093); + given(player.getAddress()).willReturn(inetSocketAddress); + } catch (UnknownHostException e) { + throw new IllegalStateException("Invalid IP address: " + ip, e); + } } /** diff --git a/src/test/java/fr/xephi/authme/command/executable/authme/GetIpCommandTest.java b/src/test/java/fr/xephi/authme/command/executable/authme/GetIpCommandTest.java index 758bc5f3..8fe65e90 100644 --- a/src/test/java/fr/xephi/authme/command/executable/authme/GetIpCommandTest.java +++ b/src/test/java/fr/xephi/authme/command/executable/authme/GetIpCommandTest.java @@ -100,7 +100,7 @@ public class GetIpCommandTest { private static Player mockPlayer(String name, String ip) { Player player = mock(Player.class); given(player.getName()).willReturn(name); - TestHelper.mockPlayerIp(player, ip); + TestHelper.mockIpAddressToPlayer(player, ip); return player; } } diff --git a/src/test/java/fr/xephi/authme/data/TempbanManagerTest.java b/src/test/java/fr/xephi/authme/data/TempbanManagerTest.java index 5c5264bd..a186920a 100644 --- a/src/test/java/fr/xephi/authme/data/TempbanManagerTest.java +++ b/src/test/java/fr/xephi/authme/data/TempbanManagerTest.java @@ -147,7 +147,7 @@ public class TempbanManagerTest { // given Player player = mock(Player.class); String ip = "123.45.67.89"; - TestHelper.mockPlayerIp(player, ip); + TestHelper.mockIpAddressToPlayer(player, ip); String banReason = "IP ban too many logins"; given(messages.retrieveSingle(player, MessageKey.TEMPBAN_MAX_LOGINS)).willReturn(banReason); Settings settings = mockSettings(2, 100, ""); @@ -175,7 +175,7 @@ public class TempbanManagerTest { Player player = mock(Player.class); given(player.getName()).willReturn("Bob"); String ip = "143.45.77.89"; - TestHelper.mockPlayerIp(player, ip); + TestHelper.mockIpAddressToPlayer(player, ip); String banCommand = "banip %ip% 15d IP ban too many logins"; Settings settings = mockSettings(2, 100, banCommand); TempbanManager manager = new TempbanManager(bukkitService, messages, settings); @@ -193,7 +193,7 @@ public class TempbanManagerTest { // given Player player = mock(Player.class); String ip = "22.44.66.88"; - TestHelper.mockPlayerIp(player, ip); + TestHelper.mockIpAddressToPlayer(player, ip); String banReason = "kick msg"; given(messages.retrieveSingle(player, MessageKey.TEMPBAN_MAX_LOGINS)).willReturn(banReason); Settings settings = mockSettings(10, 60, ""); diff --git a/src/test/java/fr/xephi/authme/process/login/AsynchronousLoginTest.java b/src/test/java/fr/xephi/authme/process/login/AsynchronousLoginTest.java index 40e3076e..673282a4 100644 --- a/src/test/java/fr/xephi/authme/process/login/AsynchronousLoginTest.java +++ b/src/test/java/fr/xephi/authme/process/login/AsynchronousLoginTest.java @@ -125,7 +125,7 @@ public class AsynchronousLoginTest { String name = "oscar"; String ip = "1.1.1.245"; Player player = mockPlayer(name); - TestHelper.mockPlayerIp(player, ip); + TestHelper.mockIpAddressToPlayer(player, ip); given(playerCache.isAuthenticated(name)).willReturn(false); PlayerAuth auth = PlayerAuth.builder().name(name).build(); given(dataSource.getAuth(name)).willReturn(auth); @@ -148,7 +148,7 @@ public class AsynchronousLoginTest { String name = "oscar"; String ip = "1.1.1.245"; Player player = mockPlayer(name); - TestHelper.mockPlayerIp(player, ip); + TestHelper.mockIpAddressToPlayer(player, ip); given(playerCache.isAuthenticated(name)).willReturn(false); PlayerAuth auth = PlayerAuth.builder().name(name).build(); given(dataSource.getAuth(name)).willReturn(auth); @@ -243,26 +243,26 @@ public class AsynchronousLoginTest { private void mockOnlinePlayersInBukkitService() { // 1.1.1.1: albania (online), brazil (offline) Player playerA = mockPlayer("albania"); - TestHelper.mockPlayerIp(playerA, "1.1.1.1"); + TestHelper.mockIpAddressToPlayer(playerA, "1.1.1.1"); given(dataSource.isLogged(playerA.getName())).willReturn(true); Player playerB = mockPlayer("brazil"); - TestHelper.mockPlayerIp(playerB, "1.1.1.1"); + TestHelper.mockIpAddressToPlayer(playerB, "1.1.1.1"); given(dataSource.isLogged(playerB.getName())).willReturn(false); // 2.2.2.2: congo (online), denmark (offline), ecuador (online) Player playerC = mockPlayer("congo"); - TestHelper.mockPlayerIp(playerC, "2.2.2.2"); + TestHelper.mockIpAddressToPlayer(playerC, "2.2.2.2"); given(dataSource.isLogged(playerC.getName())).willReturn(true); Player playerD = mockPlayer("denmark"); - TestHelper.mockPlayerIp(playerD, "2.2.2.2"); + TestHelper.mockIpAddressToPlayer(playerD, "2.2.2.2"); given(dataSource.isLogged(playerD.getName())).willReturn(false); Player playerE = mockPlayer("ecuador"); - TestHelper.mockPlayerIp(playerE, "2.2.2.2"); + TestHelper.mockIpAddressToPlayer(playerE, "2.2.2.2"); given(dataSource.isLogged(playerE.getName())).willReturn(true); // 3.3.3.3: france (offline) Player playerF = mockPlayer("france"); - TestHelper.mockPlayerIp(playerF, "3.3.3.3"); + TestHelper.mockIpAddressToPlayer(playerF, "3.3.3.3"); List onlinePlayers = Arrays.asList(playerA, playerB, playerC, playerD, playerE, playerF); given(bukkitService.getOnlinePlayers()).willReturn(onlinePlayers); diff --git a/src/test/java/fr/xephi/authme/process/register/AsyncRegisterTest.java b/src/test/java/fr/xephi/authme/process/register/AsyncRegisterTest.java index c61ed7f5..00e8be24 100644 --- a/src/test/java/fr/xephi/authme/process/register/AsyncRegisterTest.java +++ b/src/test/java/fr/xephi/authme/process/register/AsyncRegisterTest.java @@ -111,7 +111,7 @@ public class AsyncRegisterTest { // given String name = "edbert"; Player player = mockPlayerWithName(name); - TestHelper.mockPlayerIp(player, "33.44.55.66"); + TestHelper.mockIpAddressToPlayer(player, "33.44.55.66"); given(playerCache.isAuthenticated(name)).willReturn(false); given(commonService.getProperty(RegistrationSettings.IS_ENABLED)).willReturn(true); given(dataSource.isAuthAvailable(name)).willReturn(false); @@ -136,7 +136,7 @@ public class AsyncRegisterTest { // given String name = "edbert"; Player player = mockPlayerWithName(name); - TestHelper.mockPlayerIp(player, "33.44.55.66"); + TestHelper.mockIpAddressToPlayer(player, "33.44.55.66"); given(playerCache.isAuthenticated(name)).willReturn(false); given(commonService.getProperty(RegistrationSettings.IS_ENABLED)).willReturn(true); given(commonService.getProperty(RestrictionSettings.MAX_REGISTRATION_PER_IP)).willReturn(0); diff --git a/src/test/java/fr/xephi/authme/process/register/executors/EmailRegisterExecutorTest.java b/src/test/java/fr/xephi/authme/process/register/executors/EmailRegisterExecutorTest.java index c76c0fb3..a52b0075 100644 --- a/src/test/java/fr/xephi/authme/process/register/executors/EmailRegisterExecutorTest.java +++ b/src/test/java/fr/xephi/authme/process/register/executors/EmailRegisterExecutorTest.java @@ -110,7 +110,7 @@ public class EmailRegisterExecutorTest { given(passwordSecurity.computeHash(anyString(), anyString())).willAnswer( invocation -> new HashedPassword(invocation.getArgument(0))); Player player = mock(Player.class); - TestHelper.mockPlayerIp(player, "123.45.67.89"); + TestHelper.mockIpAddressToPlayer(player, "123.45.67.89"); given(player.getName()).willReturn("Veronica"); EmailRegisterParams params = EmailRegisterParams.of(player, "test@example.com"); diff --git a/src/test/java/fr/xephi/authme/process/register/executors/PasswordRegisterExecutorTest.java b/src/test/java/fr/xephi/authme/process/register/executors/PasswordRegisterExecutorTest.java index 6b41f2c1..7e2e5fd0 100644 --- a/src/test/java/fr/xephi/authme/process/register/executors/PasswordRegisterExecutorTest.java +++ b/src/test/java/fr/xephi/authme/process/register/executors/PasswordRegisterExecutorTest.java @@ -97,7 +97,7 @@ public class PasswordRegisterExecutorTest { given(passwordSecurity.computeHash(anyString(), anyString())).willAnswer( invocation -> new HashedPassword(invocation.getArgument(0))); Player player = mockPlayerWithName("S1m0N"); - TestHelper.mockPlayerIp(player, "123.45.67.89"); + TestHelper.mockIpAddressToPlayer(player, "123.45.67.89"); PasswordRegisterParams params = PasswordRegisterParams.of(player, "pass", "mail@example.org"); // when diff --git a/src/test/java/fr/xephi/authme/process/register/executors/PlayerAuthBuilderHelperTest.java b/src/test/java/fr/xephi/authme/process/register/executors/PlayerAuthBuilderHelperTest.java index 607ba8a4..cbe460df 100644 --- a/src/test/java/fr/xephi/authme/process/register/executors/PlayerAuthBuilderHelperTest.java +++ b/src/test/java/fr/xephi/authme/process/register/executors/PlayerAuthBuilderHelperTest.java @@ -25,7 +25,7 @@ public class PlayerAuthBuilderHelperTest { Player player = mock(Player.class); given(player.getName()).willReturn("Noah"); String ip = "192.168.34.47"; - TestHelper.mockPlayerIp(player, ip); + TestHelper.mockIpAddressToPlayer(player, ip); HashedPassword hashedPassword = new HashedPassword("myHash0001"); String email = "test@example.org"; diff --git a/src/test/java/fr/xephi/authme/service/PasswordRecoveryServiceTest.java b/src/test/java/fr/xephi/authme/service/PasswordRecoveryServiceTest.java index f0fc9b87..bf3dd083 100644 --- a/src/test/java/fr/xephi/authme/service/PasswordRecoveryServiceTest.java +++ b/src/test/java/fr/xephi/authme/service/PasswordRecoveryServiceTest.java @@ -78,15 +78,15 @@ public class PasswordRecoveryServiceTest { public void shouldKeepTrackOfSuccessfulRecoversByIp() { // given Player bobby = mock(Player.class); - TestHelper.mockPlayerIp(bobby, "192.168.8.8"); + TestHelper.mockIpAddressToPlayer(bobby, "192.168.8.8"); given(bobby.getName()).willReturn("bobby"); Player bobby2 = mock(Player.class); - TestHelper.mockPlayerIp(bobby2, "127.0.0.1"); + TestHelper.mockIpAddressToPlayer(bobby2, "127.0.0.1"); given(bobby2.getName()).willReturn("bobby"); Player other = mock(Player.class); - TestHelper.mockPlayerIp(other, "192.168.8.8"); + TestHelper.mockIpAddressToPlayer(other, "192.168.8.8"); given(other.getName()).willReturn("other"); // when @@ -102,12 +102,12 @@ public class PasswordRecoveryServiceTest { public void shouldRemovePlayerFromSuccessfulRecovers() { // given Player bobby = mock(Player.class); - TestHelper.mockPlayerIp(bobby, "192.168.8.8"); + TestHelper.mockIpAddressToPlayer(bobby, "192.168.8.8"); given(bobby.getName()).willReturn("bobby"); recoveryService.addSuccessfulRecovery(bobby); Player other = mock(Player.class); - TestHelper.mockPlayerIp(other, "8.8.8.8"); + TestHelper.mockIpAddressToPlayer(other, "8.8.8.8"); given(other.getName()).willReturn("other"); recoveryService.addSuccessfulRecovery(other); diff --git a/src/test/java/fr/xephi/authme/service/SessionServiceTest.java b/src/test/java/fr/xephi/authme/service/SessionServiceTest.java index ac2d6434..7153f149 100644 --- a/src/test/java/fr/xephi/authme/service/SessionServiceTest.java +++ b/src/test/java/fr/xephi/authme/service/SessionServiceTest.java @@ -240,7 +240,7 @@ public class SessionServiceTest { private static Player mockPlayerWithNameAndIp(String name, String ip) { Player player = mock(Player.class); given(player.getName()).willReturn(name); - TestHelper.mockPlayerIp(player, ip); + TestHelper.mockIpAddressToPlayer(player, ip); return player; } } diff --git a/src/test/java/fr/xephi/authme/service/ValidationServiceTest.java b/src/test/java/fr/xephi/authme/service/ValidationServiceTest.java index dafc8c3d..da8f1632 100644 --- a/src/test/java/fr/xephi/authme/service/ValidationServiceTest.java +++ b/src/test/java/fr/xephi/authme/service/ValidationServiceTest.java @@ -21,7 +21,9 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.Mock; +import org.mockito.Mockito; +import java.net.InetSocketAddress; import java.util.Collections; import java.util.logging.Logger; @@ -30,7 +32,9 @@ import static java.util.Arrays.asList; import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertThat; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.BDDMockito.given; +import static org.mockito.BDDMockito.willReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; @@ -358,18 +362,23 @@ public class ValidationServiceTest { Player gabriel2 = mockPlayer("Gabriel", "93.23.33.34"); Player emanuel = mockPlayer("emanuel", "94.65.24.10"); Player emanuel2 = mockPlayer("emanuel", "94.65.60.10"); - Player imyourisp = mockPlayer("imyourisp", "bazinga.yourisp.net"); + Player imYourIsp = mockPlayer("imyourisp", "65.65.65.65"); Player notRestricted = mockPlayer("notRestricted", "0.0.0.0"); + ValidationService validationServiceSpy = Mockito.spy(validationService); + willReturn("bogus.tld").given(validationServiceSpy).getHostName(any(InetSocketAddress.class)); + InetSocketAddress imYourIspSocketAddr = imYourIsp.getAddress(); + willReturn("bazinga.yourisp.net").given(validationServiceSpy).getHostName(imYourIspSocketAddr); + // when - boolean isBobbyAdmitted = validationService.fulfillsNameRestrictions(bobby); - boolean isTamaraAdmitted = validationService.fulfillsNameRestrictions(tamara); - boolean isGabrielAdmitted = validationService.fulfillsNameRestrictions(gabriel); - boolean isGabriel2Admitted = validationService.fulfillsNameRestrictions(gabriel2); - boolean isEmanuelAdmitted = validationService.fulfillsNameRestrictions(emanuel); - boolean isEmanuel2Admitted = validationService.fulfillsNameRestrictions(emanuel2); - boolean isImyourispAdmitted = validationService.fulfillsNameRestrictions(imyourisp); - boolean isNotRestrictedAdmitted = validationService.fulfillsNameRestrictions(notRestricted); + boolean isBobbyAdmitted = validationServiceSpy.fulfillsNameRestrictions(bobby); + boolean isTamaraAdmitted = validationServiceSpy.fulfillsNameRestrictions(tamara); + boolean isGabrielAdmitted = validationServiceSpy.fulfillsNameRestrictions(gabriel); + boolean isGabriel2Admitted = validationServiceSpy.fulfillsNameRestrictions(gabriel2); + boolean isEmanuelAdmitted = validationServiceSpy.fulfillsNameRestrictions(emanuel); + boolean isEmanuel2Admitted = validationServiceSpy.fulfillsNameRestrictions(emanuel2); + boolean isImYourIspAdmitted = validationServiceSpy.fulfillsNameRestrictions(imYourIsp); + boolean isNotRestrictedAdmitted = validationServiceSpy.fulfillsNameRestrictions(notRestricted); // then assertThat(isBobbyAdmitted, equalTo(true)); @@ -378,7 +387,7 @@ public class ValidationServiceTest { assertThat(isGabriel2Admitted, equalTo(false)); assertThat(isEmanuelAdmitted, equalTo(true)); assertThat(isEmanuel2Admitted, equalTo(false)); - assertThat(isImyourispAdmitted, equalTo(true)); + assertThat(isImYourIspAdmitted, equalTo(true)); assertThat(isNotRestrictedAdmitted, equalTo(true)); } @@ -402,8 +411,7 @@ public class ValidationServiceTest { private static Player mockPlayer(String name, String ip) { Player player = mock(Player.class); given(player.getName()).willReturn(name); - TestHelper.mockPlayerIp(player, ip); - given(player.getAddress().getHostName()).willReturn("--"); + TestHelper.mockIpAddressToPlayer(player, ip); return player; } diff --git a/src/test/java/fr/xephi/authme/settings/WelcomeMessageConfigurationTest.java b/src/test/java/fr/xephi/authme/settings/WelcomeMessageConfigurationTest.java index 0be553d7..3415a950 100644 --- a/src/test/java/fr/xephi/authme/settings/WelcomeMessageConfigurationTest.java +++ b/src/test/java/fr/xephi/authme/settings/WelcomeMessageConfigurationTest.java @@ -92,7 +92,7 @@ public class WelcomeMessageConfigurationTest { Player player = mock(Player.class); given(player.getName()).willReturn("Bobby"); - TestHelper.mockPlayerIp(player, "123.45.66.77"); + TestHelper.mockIpAddressToPlayer(player, "123.45.66.77"); given(geoIpService.getCountryName("123.45.66.77")).willReturn("Syldavia"); given(service.getProperty(PluginSettings.SERVER_NAME)).willReturn("CrazyServer"); diff --git a/src/test/java/fr/xephi/authme/settings/commandconfig/CommandManagerTest.java b/src/test/java/fr/xephi/authme/settings/commandconfig/CommandManagerTest.java index a42a83a3..2a586c57 100644 --- a/src/test/java/fr/xephi/authme/settings/commandconfig/CommandManagerTest.java +++ b/src/test/java/fr/xephi/authme/settings/commandconfig/CommandManagerTest.java @@ -313,7 +313,7 @@ public class CommandManagerTest { given(player.getName()).willReturn("Bobby"); given(player.getDisplayName()).willReturn("bob"); String ip = "127.0.0.3"; - TestHelper.mockPlayerIp(player, ip); + TestHelper.mockIpAddressToPlayer(player, ip); given(geoIpService.getCountryName(ip)).willReturn("Syldavia"); return player; } diff --git a/src/test/java/fr/xephi/authme/util/PlayerUtilsTest.java b/src/test/java/fr/xephi/authme/util/PlayerUtilsTest.java index 124011c7..69d7b1f0 100644 --- a/src/test/java/fr/xephi/authme/util/PlayerUtilsTest.java +++ b/src/test/java/fr/xephi/authme/util/PlayerUtilsTest.java @@ -25,7 +25,7 @@ public class PlayerUtilsTest { // given Player player = mock(Player.class); String ip = "124.86.248.62"; - TestHelper.mockPlayerIp(player, ip); + TestHelper.mockIpAddressToPlayer(player, ip); // when String result = PlayerUtils.getPlayerIp(player); From 9fd532d798850de56d6455df2002547876790ac2 Mon Sep 17 00:00:00 2001 From: ljacqu Date: Fri, 30 Dec 2022 08:44:29 +0100 Subject: [PATCH 03/32] Minor: Rename StringUtils#isEmpty to #isBlank - Better fits the naming used by other tools and also the JDK (String#isBlank as of JDK 11) --- .../authme/command/CommandDescription.java | 4 +-- .../xephi/authme/command/CommandHandler.java | 2 +- .../authme/debug/PlayerAuthViewer.java | 2 +- .../xephi/authme/listener/OnJoinVerifier.java | 2 +- .../fr/xephi/authme/mail/SendMailSsl.java | 4 +-- .../authme/permission/PermissionsManager.java | 2 +- .../authme/service/JoinMessageService.java | 2 +- .../settings/SettingsMigrationService.java | 2 +- .../fr/xephi/authme/settings/SpawnLoader.java | 4 +-- .../fr/xephi/authme/util/StringUtils.java | 28 ++++++++----------- src/main/java/fr/xephi/authme/util/Utils.java | 2 +- .../command/CommandInitializerTest.java | 4 +-- .../authme/ConverterCommandTest.java | 2 +- ...pMessageAndHelpSectionConsistencyTest.java | 4 +-- .../xephi/authme/message/MessageKeyTest.java | 2 +- .../message/MessagesFileConsistencyTest.java | 2 +- .../message/YamlTextFileCheckerTest.java | 2 +- .../HashAlgorithmIntegrationTest.java | 4 +-- .../fr/xephi/authme/util/StringUtilsTest.java | 12 ++++---- .../tools/messages/VerifyMessagesTask.java | 2 +- 20 files changed, 42 insertions(+), 46 deletions(-) diff --git a/src/main/java/fr/xephi/authme/command/CommandDescription.java b/src/main/java/fr/xephi/authme/command/CommandDescription.java index e195c475..040894f9 100644 --- a/src/main/java/fr/xephi/authme/command/CommandDescription.java +++ b/src/main/java/fr/xephi/authme/command/CommandDescription.java @@ -226,8 +226,8 @@ public class CommandDescription { */ public CommandDescription build() { checkArgument(!Utils.isCollectionEmpty(labels), "Labels may not be empty"); - checkArgument(!StringUtils.isEmpty(description), "Description may not be empty"); - checkArgument(!StringUtils.isEmpty(detailedDescription), "Detailed description may not be empty"); + checkArgument(!StringUtils.isBlank(description), "Description may not be empty"); + checkArgument(!StringUtils.isBlank(detailedDescription), "Detailed description may not be empty"); checkArgument(executableCommand != null, "Executable command must be set"); // parents and permissions may be null; arguments may be empty diff --git a/src/main/java/fr/xephi/authme/command/CommandHandler.java b/src/main/java/fr/xephi/authme/command/CommandHandler.java index 27445e02..08629c6f 100644 --- a/src/main/java/fr/xephi/authme/command/CommandHandler.java +++ b/src/main/java/fr/xephi/authme/command/CommandHandler.java @@ -131,7 +131,7 @@ public class CommandHandler { private static List skipEmptyArguments(String[] args) { List cleanArguments = new ArrayList<>(); for (String argument : args) { - if (!StringUtils.isEmpty(argument)) { + if (!StringUtils.isBlank(argument)) { cleanArguments.add(argument); } } diff --git a/src/main/java/fr/xephi/authme/command/executable/authme/debug/PlayerAuthViewer.java b/src/main/java/fr/xephi/authme/command/executable/authme/debug/PlayerAuthViewer.java index ae314e09..99115cfe 100644 --- a/src/main/java/fr/xephi/authme/command/executable/authme/debug/PlayerAuthViewer.java +++ b/src/main/java/fr/xephi/authme/command/executable/authme/debug/PlayerAuthViewer.java @@ -89,7 +89,7 @@ class PlayerAuthViewer implements DebugSection { * or empty string if the string is null or empty */ private static String safeSubstring(String str, int length) { - if (StringUtils.isEmpty(str)) { + if (StringUtils.isBlank(str)) { return ""; } else if (str.length() < length) { return str.substring(0, str.length() / 2) + "..."; diff --git a/src/main/java/fr/xephi/authme/listener/OnJoinVerifier.java b/src/main/java/fr/xephi/authme/listener/OnJoinVerifier.java index 9ceccbaf..b125bf0a 100644 --- a/src/main/java/fr/xephi/authme/listener/OnJoinVerifier.java +++ b/src/main/java/fr/xephi/authme/listener/OnJoinVerifier.java @@ -160,7 +160,7 @@ public class OnJoinVerifier implements Reloadable { if (auth != null && settings.getProperty(RegistrationSettings.PREVENT_OTHER_CASE)) { String realName = auth.getRealName(); // might be null or "Player" - if (StringUtils.isEmpty(realName) || "Player".equals(realName)) { + if (StringUtils.isBlank(realName) || "Player".equals(realName)) { dataSource.updateRealName(connectingName.toLowerCase(Locale.ROOT), connectingName); } else if (!realName.equals(connectingName)) { throw new FailedVerificationException(MessageKey.INVALID_NAME_CASE, realName, connectingName); diff --git a/src/main/java/fr/xephi/authme/mail/SendMailSsl.java b/src/main/java/fr/xephi/authme/mail/SendMailSsl.java index 8c7e1bff..b7e9fd41 100644 --- a/src/main/java/fr/xephi/authme/mail/SendMailSsl.java +++ b/src/main/java/fr/xephi/authme/mail/SendMailSsl.java @@ -51,11 +51,11 @@ public class SendMailSsl { * @throws EmailException if the mail is invalid */ public HtmlEmail initializeMail(String emailAddress) throws EmailException { - String senderMail = StringUtils.isEmpty(settings.getProperty(EmailSettings.MAIL_ADDRESS)) + String senderMail = StringUtils.isBlank(settings.getProperty(EmailSettings.MAIL_ADDRESS)) ? settings.getProperty(EmailSettings.MAIL_ACCOUNT) : settings.getProperty(EmailSettings.MAIL_ADDRESS); - String senderName = StringUtils.isEmpty(settings.getProperty(EmailSettings.MAIL_SENDER_NAME)) + String senderName = StringUtils.isBlank(settings.getProperty(EmailSettings.MAIL_SENDER_NAME)) ? senderMail : settings.getProperty(EmailSettings.MAIL_SENDER_NAME); String mailPassword = settings.getProperty(EmailSettings.MAIL_PASSWORD); diff --git a/src/main/java/fr/xephi/authme/permission/PermissionsManager.java b/src/main/java/fr/xephi/authme/permission/PermissionsManager.java index 113393d2..7399d0ca 100644 --- a/src/main/java/fr/xephi/authme/permission/PermissionsManager.java +++ b/src/main/java/fr/xephi/authme/permission/PermissionsManager.java @@ -324,7 +324,7 @@ public class PermissionsManager implements Reloadable { * False is also returned if this feature isn't supported for the current permissions system. */ public boolean addGroup(OfflinePlayer player, UserGroup groupName) { - if (!isEnabled() || StringUtils.isEmpty(groupName.getGroupName())) { + if (!isEnabled() || StringUtils.isBlank(groupName.getGroupName())) { return false; } return handler.addToGroup(player, groupName); diff --git a/src/main/java/fr/xephi/authme/service/JoinMessageService.java b/src/main/java/fr/xephi/authme/service/JoinMessageService.java index 29f2caa0..d4c5b4c6 100644 --- a/src/main/java/fr/xephi/authme/service/JoinMessageService.java +++ b/src/main/java/fr/xephi/authme/service/JoinMessageService.java @@ -38,7 +38,7 @@ public class JoinMessageService { */ public void sendMessage(String playerName) { String joinMessage = joinMessages.remove(playerName); - if (!StringUtils.isEmpty(joinMessage)) { + if (!StringUtils.isBlank(joinMessage)) { bukkitService.broadcastMessage(joinMessage); } } diff --git a/src/main/java/fr/xephi/authme/settings/SettingsMigrationService.java b/src/main/java/fr/xephi/authme/settings/SettingsMigrationService.java index 2152baf5..fe035a8b 100644 --- a/src/main/java/fr/xephi/authme/settings/SettingsMigrationService.java +++ b/src/main/java/fr/xephi/authme/settings/SettingsMigrationService.java @@ -114,7 +114,7 @@ public class SettingsMigrationService extends PlainMigrationService { // Old other accounts // -------- public boolean hasOldOtherAccountsCommand() { - return !StringUtils.isEmpty(oldOtherAccountsCommand); + return !StringUtils.isBlank(oldOtherAccountsCommand); } public String getOldOtherAccountsCommand() { diff --git a/src/main/java/fr/xephi/authme/settings/SpawnLoader.java b/src/main/java/fr/xephi/authme/settings/SpawnLoader.java index 6a8b7fa7..47e9711d 100644 --- a/src/main/java/fr/xephi/authme/settings/SpawnLoader.java +++ b/src/main/java/fr/xephi/authme/settings/SpawnLoader.java @@ -293,7 +293,7 @@ public class SpawnLoader implements Reloadable { String prefix = pathPrefix + "."; String worldName = configuration.getString(prefix + "world"); World world = Bukkit.getWorld(worldName); - if (!StringUtils.isEmpty(worldName) && world != null) { + if (!StringUtils.isBlank(worldName) && world != null) { return new Location(world, configuration.getDouble(prefix + "x"), configuration.getDouble(prefix + "y"), configuration.getDouble(prefix + "z"), getFloat(configuration, prefix + "yaw"), getFloat(configuration, prefix + "pitch")); @@ -315,7 +315,7 @@ public class SpawnLoader implements Reloadable { String prefix = pathPrefix + "."; String worldName = configuration.getString(prefix + "World"); World world = Bukkit.getWorld(worldName); - if (!StringUtils.isEmpty(worldName) && world != null) { + if (!StringUtils.isBlank(worldName) && world != null) { return new Location(world, configuration.getDouble(prefix + "X"), configuration.getDouble(prefix + "Y"), configuration.getDouble(prefix + "Z"), getFloat(configuration, prefix + "Yaw"), getFloat(configuration, prefix + "Pitch")); diff --git a/src/main/java/fr/xephi/authme/util/StringUtils.java b/src/main/java/fr/xephi/authme/util/StringUtils.java index 5c861300..8a863678 100644 --- a/src/main/java/fr/xephi/authme/util/StringUtils.java +++ b/src/main/java/fr/xephi/authme/util/StringUtils.java @@ -14,12 +14,11 @@ public final class StringUtils { } /** - * Get the difference of two strings. + * Calculates the difference of two strings. * - * @param first First string - * @param second Second string - * - * @return The difference value + * @param first first string + * @param second second string + * @return the difference value */ public static double getDifference(String first, String second) { // Make sure the strings are valid. @@ -35,12 +34,11 @@ public final class StringUtils { } /** - * Return whether the given string contains any of the provided elements. + * Returns whether the given string contains any of the provided elements. * - * @param str The string to analyze - * @param pieces The items to check the string for - * - * @return True if the string contains at least one of the items + * @param str the string to analyze + * @param pieces the items to check the string for + * @return true if the string contains at least one of the items */ public static boolean containsAny(String str, Iterable pieces) { if (str == null) { @@ -58,21 +56,19 @@ public final class StringUtils { * Null-safe method for checking whether a string is empty. Note that the string * is trimmed, so this method also considers a string with whitespace as empty. * - * @param str The string to verify - * - * @return True if the string is empty, false otherwise + * @param str the string to verify + * @return true if the string is empty, false otherwise */ - public static boolean isEmpty(String str) { + public static boolean isBlank(String str) { return str == null || str.trim().isEmpty(); } /** - * Check that the given needle is in the middle of the haystack, i.e. that the haystack + * Checks that the given needle is in the middle of the haystack, i.e. that the haystack * contains the needle and that it is not at the very start or end. * * @param needle the needle to search for * @param haystack the haystack to search in - * * @return true if the needle is in the middle of the word, false otherwise */ // Note ljacqu 20170314: `needle` is restricted to char type intentionally because something like diff --git a/src/main/java/fr/xephi/authme/util/Utils.java b/src/main/java/fr/xephi/authme/util/Utils.java index 74c3088e..4165b007 100644 --- a/src/main/java/fr/xephi/authme/util/Utils.java +++ b/src/main/java/fr/xephi/authme/util/Utils.java @@ -105,6 +105,6 @@ public final class Utils { * @return true if the email is empty */ public static boolean isEmailEmpty(String email) { - return StringUtils.isEmpty(email) || "your@email.com".equalsIgnoreCase(email); + return StringUtils.isBlank(email) || "your@email.com".equalsIgnoreCase(email); } } diff --git a/src/test/java/fr/xephi/authme/command/CommandInitializerTest.java b/src/test/java/fr/xephi/authme/command/CommandInitializerTest.java index 964192f3..5cac2462 100644 --- a/src/test/java/fr/xephi/authme/command/CommandInitializerTest.java +++ b/src/test/java/fr/xephi/authme/command/CommandInitializerTest.java @@ -138,11 +138,11 @@ public class CommandInitializerTest { String forCommandText = " for command with labels '" + command.getLabels() + "'"; assertThat("has description" + forCommandText, - StringUtils.isEmpty(command.getDescription()), equalTo(false)); + StringUtils.isBlank(command.getDescription()), equalTo(false)); assertThat("short description doesn't end in '.'" + forCommandText, command.getDescription().endsWith("."), equalTo(false)); assertThat("has detailed description" + forCommandText, - StringUtils.isEmpty(command.getDetailedDescription()), equalTo(false)); + StringUtils.isBlank(command.getDetailedDescription()), equalTo(false)); assertThat("detailed description ends in '.'" + forCommandText, command.getDetailedDescription().endsWith("."), equalTo(true)); } diff --git a/src/test/java/fr/xephi/authme/command/executable/authme/ConverterCommandTest.java b/src/test/java/fr/xephi/authme/command/executable/authme/ConverterCommandTest.java index 22533acd..cad80f9f 100644 --- a/src/test/java/fr/xephi/authme/command/executable/authme/ConverterCommandTest.java +++ b/src/test/java/fr/xephi/authme/command/executable/authme/ConverterCommandTest.java @@ -93,7 +93,7 @@ public class ConverterCommandTest { // when / then for (Map.Entry> entry : ConverterCommand.CONVERTERS.entrySet()) { assertThat("Name is not null or empty", - StringUtils.isEmpty(entry.getKey()), equalTo(false)); + StringUtils.isBlank(entry.getKey()), equalTo(false)); assertThat("Converter class is unique for each entry", classes.add(entry.getValue()), equalTo(true)); diff --git a/src/test/java/fr/xephi/authme/command/help/HelpMessageAndHelpSectionConsistencyTest.java b/src/test/java/fr/xephi/authme/command/help/HelpMessageAndHelpSectionConsistencyTest.java index c0841139..02a42ba9 100644 --- a/src/test/java/fr/xephi/authme/command/help/HelpMessageAndHelpSectionConsistencyTest.java +++ b/src/test/java/fr/xephi/authme/command/help/HelpMessageAndHelpSectionConsistencyTest.java @@ -23,14 +23,14 @@ public class HelpMessageAndHelpSectionConsistencyTest { // when / then for (HelpMessage message : HelpMessage.values()) { assertThat("Key for message '" + message + "' is empty", - StringUtils.isEmpty(message.getKey()), equalTo(false)); + StringUtils.isBlank(message.getKey()), equalTo(false)); if (!keys.add(message.getKey())) { fail("Key for message '" + message + "' is already used elsewhere"); } } for (HelpSection section : HelpSection.values()) { assertThat("Key for section '" + section + "' is empty", - StringUtils.isEmpty(section.getKey()), equalTo(false)); + StringUtils.isBlank(section.getKey()), equalTo(false)); if (!keys.add(section.getKey())) { fail("Key for section '" + section + "' is already used elsewhere"); } diff --git a/src/test/java/fr/xephi/authme/message/MessageKeyTest.java b/src/test/java/fr/xephi/authme/message/MessageKeyTest.java index b2811634..c60305d6 100644 --- a/src/test/java/fr/xephi/authme/message/MessageKeyTest.java +++ b/src/test/java/fr/xephi/authme/message/MessageKeyTest.java @@ -27,7 +27,7 @@ public class MessageKeyTest { String key = messageKey.getKey(); if (!keys.add(key)) { fail("Found key '" + messageKey.getKey() + "' twice!"); - } else if (StringUtils.isEmpty(key)) { + } else if (StringUtils.isBlank(key)) { fail("Key for message key '" + messageKey + "' is empty"); } } diff --git a/src/test/java/fr/xephi/authme/message/MessagesFileConsistencyTest.java b/src/test/java/fr/xephi/authme/message/MessagesFileConsistencyTest.java index 1679e9ac..5243528f 100644 --- a/src/test/java/fr/xephi/authme/message/MessagesFileConsistencyTest.java +++ b/src/test/java/fr/xephi/authme/message/MessagesFileConsistencyTest.java @@ -40,7 +40,7 @@ public class MessagesFileConsistencyTest { final String key = messageKey.getKey(); final String message = reader.getString(key); - if (StringUtils.isEmpty(message)) { + if (StringUtils.isBlank(message)) { errors.add("Messages file should have message for key '" + key + "'"); return; } diff --git a/src/test/java/fr/xephi/authme/message/YamlTextFileCheckerTest.java b/src/test/java/fr/xephi/authme/message/YamlTextFileCheckerTest.java index 98a87e75..59c7b1b5 100644 --- a/src/test/java/fr/xephi/authme/message/YamlTextFileCheckerTest.java +++ b/src/test/java/fr/xephi/authme/message/YamlTextFileCheckerTest.java @@ -81,7 +81,7 @@ public class YamlTextFileCheckerTest { private void checkFile(File file, String mandatoryKey, List errors) { try { PropertyReader reader = new YamlFileReader(file); - if (StringUtils.isEmpty(reader.getString(mandatoryKey))) { + if (StringUtils.isBlank(reader.getString(mandatoryKey))) { errors.add("Message for '" + mandatoryKey + "' is empty"); } } catch (Exception e) { diff --git a/src/test/java/fr/xephi/authme/security/HashAlgorithmIntegrationTest.java b/src/test/java/fr/xephi/authme/security/HashAlgorithmIntegrationTest.java index e59dae64..8ebcbda1 100644 --- a/src/test/java/fr/xephi/authme/security/HashAlgorithmIntegrationTest.java +++ b/src/test/java/fr/xephi/authme/security/HashAlgorithmIntegrationTest.java @@ -74,9 +74,9 @@ public class HashAlgorithmIntegrationTest { } HashedPassword hashedPassword = method.computeHash("pwd", "name"); assertThat("Salt should not be null if method.hasSeparateSalt(), and vice versa. Method: '" - + method + "'", StringUtils.isEmpty(hashedPassword.getSalt()), equalTo(!method.hasSeparateSalt())); + + method + "'", StringUtils.isBlank(hashedPassword.getSalt()), equalTo(!method.hasSeparateSalt())); assertThat("Hash should not be empty for method '" + method + "'", - StringUtils.isEmpty(hashedPassword.getHash()), equalTo(false)); + StringUtils.isBlank(hashedPassword.getHash()), equalTo(false)); } } } diff --git a/src/test/java/fr/xephi/authme/util/StringUtilsTest.java b/src/test/java/fr/xephi/authme/util/StringUtilsTest.java index 39a3eb93..fcd000d9 100644 --- a/src/test/java/fr/xephi/authme/util/StringUtilsTest.java +++ b/src/test/java/fr/xephi/authme/util/StringUtilsTest.java @@ -49,15 +49,15 @@ public class StringUtilsTest { } @Test - public void shouldCheckIsEmptyUtil() { + public void shouldCheckIfIsBlankString() { // Should be true for null/empty/whitespace - assertTrue(StringUtils.isEmpty(null)); - assertTrue(StringUtils.isEmpty("")); - assertTrue(StringUtils.isEmpty(" \t")); + assertTrue(StringUtils.isBlank(null)); + assertTrue(StringUtils.isBlank("")); + assertTrue(StringUtils.isBlank(" \t")); // Should be false if string has content - assertFalse(StringUtils.isEmpty("P")); - assertFalse(StringUtils.isEmpty(" test")); + assertFalse(StringUtils.isBlank("P")); + assertFalse(StringUtils.isBlank(" test")); } @Test diff --git a/src/test/java/tools/messages/VerifyMessagesTask.java b/src/test/java/tools/messages/VerifyMessagesTask.java index 5b8407c7..04e17bba 100644 --- a/src/test/java/tools/messages/VerifyMessagesTask.java +++ b/src/test/java/tools/messages/VerifyMessagesTask.java @@ -44,7 +44,7 @@ public final class VerifyMessagesTask implements ToolTask { boolean addMissingKeys = "y".equalsIgnoreCase(scanner.nextLine()); List messageFiles; - if (StringUtils.isEmpty(inputFile)) { + if (StringUtils.isBlank(inputFile)) { messageFiles = getMessagesFiles(); } else { File customFile = new File(MAIN_RESOURCES_ROOT, MessagePathHelper.createMessageFilePath(inputFile)); From c4d1c41059c8e120f12b7ac978f089bf61e47c84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8C=AB=E5=8F=88=E3=81=8A=E3=81=AB=E3=81=8E=E3=82=8A?= Date: Wed, 3 May 2023 13:37:12 +0800 Subject: [PATCH 04/32] Update messages_zhtw.yml --- src/main/resources/messages/messages_zhtw.yml | 172 +++++++++--------- 1 file changed, 86 insertions(+), 86 deletions(-) diff --git a/src/main/resources/messages/messages_zhtw.yml b/src/main/resources/messages/messages_zhtw.yml index db18e4ad..104839ad 100644 --- a/src/main/resources/messages/messages_zhtw.yml +++ b/src/main/resources/messages/messages_zhtw.yml @@ -7,132 +7,132 @@ # Registration registration: - disabled: '&b【AuthMe】&6已關閉註冊功能' - name_taken: '&b【AuthMe】&6這個帳號已經被註冊過了!' + disabled: '&b【AuthMe】&6已關閉註冊功能。' + name_taken: '&b【AuthMe】&6這個帳號已經被註冊過了!' register_request: '&b【AuthMe】&6請使用 "&c/register <密碼> <確認密碼>" 來註冊。' command_usage: '&b【AuthMe】&6用法: &c"/register <密碼> <確認密碼>"' - reg_only: '&b【AuthMe】&6請到下列網站 :「 https://example.tw 」 進行註冊' - success: '&b【AuthMe】&6您已成功註冊' - kicked_admin_registered: '&b【AuthMe】&6管理員已協助您註冊,請重新登入' + reg_only: '&b【AuthMe】&6請到下列網站:「 https://example.tw 」進行註冊。' + success: '&b【AuthMe】&6您已成功註冊!' + kicked_admin_registered: '&b【AuthMe】&6管理員已協助您註冊,請重新登入。' # Password errors on registration password: - match_error: '&b【AuthMe】&6兩次輸入的密碼不一致!' - name_in_password: '&b【AuthMe】&6您不可以用您的 ID (遊戲名稱) 來當作密碼 !' - unsafe_password: '&b【AuthMe】&6您不可以使用這個不安全的密碼' - forbidden_characters: '&b【AuthMe】&c密碼包含非法字符. 可使用: %valid_chars' + match_error: '&b【AuthMe】&6兩次輸入的密碼不一致!' + name_in_password: '&b【AuthMe】&6您不可以用您的 ID (遊戲名稱) 來當作密碼!' + unsafe_password: '&b【AuthMe】&6您不可以使用這個不安全的密碼!' + forbidden_characters: '&b【AuthMe】&c密碼包含非法字符,可使用:%valid_chars' wrong_length: '&b【AuthMe】&6您的密碼 超過最大字數 / 小於最小字數' # Login login: command_usage: '&b【AuthMe】&6用法: &c"/login <密碼>"' - wrong_password: '&b【AuthMe】&6密碼錯誤!' - success: '&b【AuthMe】&6密碼正確,您已成功登入!' + wrong_password: '&b【AuthMe】&6密碼錯誤!' + success: '&b【AuthMe】&6密碼正確,您已成功登入!' login_request: '&b【AuthMe】&6請使用 &c"/login <密碼>" &6來登入。' - timeout_error: '&b【AuthMe】&6超過登入時間,請稍後再試一次' + timeout_error: '&b【AuthMe】&6超過登入時間,請稍後再試一次。' # Errors error: - denied_command: '&b【AuthMe】&c使用指令之前必須通過驗證!' - denied_chat: '&b【AuthMe】&c說話之前必須通過驗證!' - unregistered_user: '&b【AuthMe】&6這個帳號還沒有註冊過' - not_logged_in: '&b【AuthMe】&6您還沒有登入!' + denied_command: '&b【AuthMe】&c使用指令之前必須通過驗證!' + denied_chat: '&b【AuthMe】&c說話之前必須通過驗證!' + unregistered_user: '&b【AuthMe】&6這個帳號還沒有註冊過。' + not_logged_in: '&b【AuthMe】&6您還沒有登入!' no_permission: '&b【AuthMe】&6您沒有使用該指令的權限。' unexpected_error: '&b【AuthMe】&6發生錯誤,請聯繫管理員' - max_registration: '&b【AuthMe】&6您的 IP 位置所註冊的帳號數量已經達到最大。' - logged_in: '&b【AuthMe】&6您已經登入了!' - kick_for_vip: '&b【AuthMe】&6您已經被請出。&c原因 : 有 VIP 玩家登入伺服器' - # TODO kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!' - tempban_max_logins: '&b【AuthMe】&c您已被暫時封鎖IP位置,因為您登入失敗太多次.' + max_registration: '&b【AuthMe】&6您的 IP 位置所註冊的帳號數量已經達到最大限制。' + logged_in: '&b【AuthMe】&6您已經登入了!' + kick_for_vip: '&b【AuthMe】&6您已經被請出。&c原因:有 VIP 玩家登入伺服器' + kick_unresolved_hostname: '&b【AuthMe】&6無法解析玩家主機名稱。' + tempban_max_logins: '&b【AuthMe】&c您已被暫時封鎖IP位置,因為您登入失敗太多次。' # AntiBot antibot: kick_antibot: '&b【AuthMe】&cAntiBotMod 正在啟用中,請稍後再嘗試登入吧!' - auto_enabled: '&b【AuthMe】&6AntiBotMod 已自動啟用!' - auto_disabled: '&b【AuthMe】&6AntiBotMod 將會於 &c%m &6分鐘後自動關閉' + auto_enabled: '&b【AuthMe】&6AntiBotMod 已自動啟用!' + auto_disabled: '&b【AuthMe】&6AntiBotMod 將於 &c%m &6分鐘後自動關閉' # Unregister unregister: success: '&b【AuthMe】&6您已經成功註銷。' - command_usage: '&b【AuthMe】&6用法: &c"/unregister <密碼>"' + command_usage: '&b【AuthMe】&6用法:&c"/unregister <密碼>"' # Other messages misc: - account_not_activated: '&b【AuthMe】&6您的帳號還沒有經過驗證! 檢查看看您的電子信箱 (Email) 吧!' - password_changed: '&b【AuthMe】&6密碼變更成功!' - logout: '&b【AuthMe】&6您已成功登出' - reload: '&b【AuthMe】&6已重新讀取設定檔及資料庫' - usage_change_password: '&b【AuthMe】&6用法: &c"/changepassword <舊密碼> <新密碼>"' - accounts_owned_self: '&b【AuthMe】&6您擁有 %count 個帳號:' - accounts_owned_other: '&b【AuthMe】&6玩家 %name 擁有 %count 個帳號:' + account_not_activated: '&b【AuthMe】&6您的帳號還沒有經過驗證!檢查看看您的電子郵件 (Email) 吧!' + password_changed: '&b【AuthMe】&6密碼變更成功!' + logout: '&b【AuthMe】&6您已成功登出。' + reload: '&b【AuthMe】&6已重新讀取設定檔及資料庫。' + usage_change_password: '&b【AuthMe】&6用法:&c"/changepassword <舊密碼> <新密碼>"' + accounts_owned_self: '&b【AuthMe】&6您擁有 %count 個帳號:' + accounts_owned_other: '&b【AuthMe】&6玩家 %name 擁有 %count 個帳號:' # Session messages session: - valid_session: '&b【AuthMe】&6您已經成功登入!' - invalid_session: '&b【AuthMe】&6Session驗證不相符!' + valid_session: '&b【AuthMe】&6您已經成功登入!' + invalid_session: '&b【AuthMe】&6Session驗證不相符!' # Error messages when joining on_join_validation: - same_ip_online: '&b【AuthMe】&6同樣IP玩家在線上!' - same_nick_online: '&b【AuthMe】&6有同樣帳號的玩家在線上!' - name_length: '&b【AuthMe】&6您的暱稱 太長 / 太短 了!' + same_ip_online: '&b【AuthMe】&6相同IP玩家在線上!' + same_nick_online: '&b【AuthMe】&6有同樣帳號的玩家在線上!' + name_length: '&b【AuthMe】&6您的暱稱 太長 / 太短 了!' characters_in_name: '&b【AuthMe】&6暱稱裡能使用的字符為: %valid_chars' - kick_full_server: '&b【AuthMe】&6伺服器已經滿了,請等等再試一次' - country_banned: '&b【AuthMe】&6您所在的地區無法進入此伺服器' + kick_full_server: '&b【AuthMe】&6伺服器已經滿了,請等等再試一次。' + country_banned: '&b【AuthMe】&6您所在的地區無法進入此伺服器。' not_owner_error: '&b【AuthMe】&4警告!&c您並不是此帳戶持有人,請立即登出。' invalid_name_case: '&b【AuthMe】&4警告!&c您應該使用「%valid」而並非「%invalid」登入遊戲。' - # TODO quick_command: 'You used a command too fast! Please, join the server again and wait more before using any command.' + quick_command: '&b【AuthMe】&4指令使用過快,請加入伺服器後稍等一下再使用指令。' # Email email: - add_email_request: '&b【AuthMe】&6請使用 &c"/email add <您的Email> <再次輸入您的Email>" &6來添加 Email' - usage_email_add: '&b【AuthMe】&6用法: &c"/email add <您的Email> <重複Email>"' - usage_email_change: '&b【AuthMe】&6用法: &c"/email change <舊的Email> <新的Email>"' - new_email_invalid: '&b【AuthMe】&6新的Email無效!' - old_email_invalid: '&b【AuthMe】&6舊的Email無效!' - invalid: '&b【AuthMe】&6無效的Email!' - added: '&b【AuthMe】&6已添加Email!' - # TODO add_not_allowed: '&cAdding email was not allowed' - request_confirmation: '&b【AuthMe】&6請驗證您的Email!' - changed: '&b【AuthMe】&6Email已變更!' - # TODO change_not_allowed: '&cChanging email was not allowed' - email_show: '&b【AuthMe】&2目前的電子郵件: &f%email' - no_email_for_account: '&b【AuthMe】&2您目前沒有設置電子郵件.' - already_used: '&b【AuthMe】&4這個電郵地址已被使用。' - incomplete_settings: '&b【AuthMe】&4因為電子郵件設定無完整導致無法傳送,請聯絡管理員.' - send_failure: '&b【AuthMe】&4無法傳送電子郵件,請聯絡管理員.' - change_password_expired: '&b【AuthMe】&6您現在不能使用這個指令變更密碼了.' - email_cooldown_error: '&b【AuthMe】&c電子郵件已經寄出了. 您只能在 %time 後才能傳送.' + add_email_request: '&b【AuthMe】&6請使用 &c"/email add <電子郵件> <再次輸入電子郵件>" &6來新增電子郵件' + usage_email_add: '&b【AuthMe】&6用法: &c"/email add <電子郵件> <再次輸入電子郵件>"' + usage_email_change: '&b【AuthMe】&6用法: &c"/email change <舊的電子郵件> <新的電子郵件>"' + new_email_invalid: '&b【AuthMe】&6新的電子郵件無效!' + old_email_invalid: '&b【AuthMe】&6舊的電子郵件無效!' + invalid: '&b【AuthMe】&6無效的電子郵件!' + added: '&b【AuthMe】&6已新增電子郵件!' + add_not_allowed: '&b【AuthMe】&c不允許新增電子郵件' + request_confirmation: '&b【AuthMe】&6請驗證您的電子郵件!' + changed: '&b【AuthMe】&6電子郵件已變更!' + change_not_allowed: '&b【AuthMe】&c不允許變更電子郵件' + email_show: '&b【AuthMe】&2目前的電子郵件:&f%email' + no_email_for_account: '&b【AuthMe】&2您目前沒有設定電子郵件。' + already_used: '&b【AuthMe】&4這個電子郵件已被使用。' + incomplete_settings: '&b【AuthMe】&4因為電子郵件設定不完整導致無法傳送,請聯絡管理員。' + send_failure: '&b【AuthMe】&4無法傳送電子郵件,請聯絡管理員。' + change_password_expired: '&b【AuthMe】&6您現在不能使用這個指令變更密碼了。' + email_cooldown_error: '&b【AuthMe】&c電子郵件已經寄出了,您只能在 %time 後才能傳送。' # Password recovery by email recovery: - forgot_password_hint: '&b【AuthMe】&6忘記密碼了嗎? 使用 &c"/email recovery <您的Email>"' - command_usage: '&b【AuthMe】&6用法: &c"/email recovery <您的Email>"' - email_sent: '&b【AuthMe】&6已經送出重設密碼要求至您的Email , 請查收。' + forgot_password_hint: '&b【AuthMe】&6忘記密碼了嗎?使用 &c"/email recovery <電子郵件>"' + command_usage: '&b【AuthMe】&6用法: &c"/email recovery <電子郵件>"' + email_sent: '&b【AuthMe】&6已經送出重設密碼要求至您的電子郵件,請查收。' code: - code_sent: '&b【AuthMe】&6忘記密碼的恢復密碼電子郵件已傳送至您的信箱中.' - incorrect: '&b【AuthMe】&6恢復密碼錯誤! 您剩餘 %count 次嘗試機會.' - tries_exceeded: '&b【AuthMe】&6恢復密碼過多次數錯誤. 使用 "/email recovery [email]" 取得新的恢復密碼.' - correct: '&b【AuthMe】&6恢復密碼正確!' - change_password: '&b【AuthMe】&6請使用 "/email setpassword <新密碼>" 變更您的密碼.' + code_sent: '&b【AuthMe】&6忘記密碼的恢復密碼電子郵件已傳送至您的信箱中。' + incorrect: '&b【AuthMe】&6恢復密碼錯誤!您剩餘 %count 次嘗試機會。' + tries_exceeded: '&b【AuthMe】&6恢復密碼過多次數錯誤。使用 "/email recovery [電子郵件]" 取得新的恢復密碼。' + correct: '&b【AuthMe】&6恢復密碼正確!' + change_password: '&b【AuthMe】&6請使用 "/email setpassword <新密碼>" 變更您的密碼。' # Captcha captcha: - usage_captcha: '&b【AuthMe】&6請用 &c"/captcha %captcha_code" &6來輸入您的驗證碼.' - wrong_captcha: '&b【AuthMe】&6錯誤的驗證碼,請使用 "/captcha %captcha_code" 再試一次.' - valid_captcha: '&b【AuthMe】&6驗證碼無效!' - # TODO captcha_for_registration: 'To register you have to solve a captcha first, please use the command: /captcha %captcha_code' - # TODO register_captcha_valid: '&2Valid captcha! You may now register with /register' + usage_captcha: '&b【AuthMe】&6請用 &c"/captcha %captcha_code" &6來輸入您的驗證碼。' + wrong_captcha: '&b【AuthMe】&6錯誤的驗證碼,請使用 "/captcha %captcha_code" 再試一次。' + valid_captcha: '&b【AuthMe】&6驗證碼無效。' + captcha_for_registration: '&b【AuthMe】&6註冊前必須先提供驗證碼,使用 /captcha %captcha_code 來驗證。' + register_captcha_valid: '&b【AuthMe】&2驗證已通過,現在可以使用 /register 來進行註冊了。' # Verification code verification: - code_required: '&b【AuthMe】&3敏感指令,需要電子郵件驗證後才能執行,請檢查電子郵件.' - command_usage: '&b【AuthMe】&c用法: /verification <驗證碼>' + code_required: '&b【AuthMe】&3敏感指令,需要電子郵件驗證後才能執行,請檢查電子郵件。' + command_usage: '&b【AuthMe】&c用法:/verification <驗證碼>' incorrect_code: '&b【AuthMe】&c驗證碼錯誤,請在聊天室使用 "/verification <驗證碼>" 電子郵件收到的驗證碼' - success: '&b【AuthMe】&2身分已驗證,您現在可以使用所有指令!' - already_verified: '&b【AuthMe】&2您已經可以使用所有指令!' - code_expired: '&b【AuthMe】&3驗證碼已過期,請使用其他敏感指令來取得新的驗證碼!' - email_needed: '&b【AuthMe】&3若需要身分驗證,請先添加電子郵件!!' + success: '&b【AuthMe】&2身分已驗證,您現在可以使用所有指令!' + already_verified: '&b【AuthMe】&2您已經可以使用所有指令!' + code_expired: '&b【AuthMe】&3驗證碼已過期,請使用其他敏感指令來取得新的驗證碼!' + email_needed: '&b【AuthMe】&3若需要身分驗證,請先新增電子郵件!' # Time units time: @@ -147,13 +147,13 @@ time: # Two-factor authentication two_factor: - code_created: '&b【AuthMe - 兩步驗證碼】&b您的登入金鑰為&9「%c%code&9」&b,掃描連結為:&c %url' - # TODO confirmation_required: 'Please confirm your code with /2fa confirm ' - # TODO code_required: 'Please submit your two-factor authentication code with /2fa code ' - # TODO already_enabled: 'Two-factor authentication is already enabled for your account!' - # TODO enable_error_no_code: 'No 2fa key has been generated for you or it has expired. Please run /2fa add' - # TODO enable_success: 'Successfully enabled two-factor authentication for your account' - # TODO enable_error_wrong_code: 'Wrong code or code has expired. Please run /2fa add' - # TODO not_enabled_error: 'Two-factor authentication is not enabled for your account. Run /2fa add' - # TODO removed_success: 'Successfully removed two-factor auth from your account' - # TODO invalid_code: 'Invalid code!' + code_created: '&b【AuthMe】&b您的登入金鑰為&9「%c%code&9」&b,掃描連結為:&c %url' + confirmation_required: '&b【AuthMe】&6請使用 /2fa confirm <驗證碼> 來確認雙重驗證。' + code_required: '&b【AuthMe】&c請使用 /2fa code <驗證碼> 來完成驗證。' + already_enabled: '&b【AuthMe】&c雙重驗證已經開啟。' + enable_error_no_code: '&b【AuthMe】&6雙重驗證代碼不存在或失效,使用 /2fa add 來新增。' + enable_success: '&b【AuthMe】&6雙重驗證已開啟!' + enable_error_wrong_code: '&b【AuthMe】&6雙重驗證代碼錯誤或失效,使用 /2fa add 來新增。' + not_enabled_error: '&b【AuthMe】&6雙重驗證尚未開啟,使用 /2fa add 來開啟。' + removed_success: '&b【AuthMe】&6雙重驗證已成功移除!' + invalid_code: '&b【AuthMe】&c驗證碼錯誤。' From db04fd2a5b80e47664ceae38a2e6587160230787 Mon Sep 17 00:00:00 2001 From: ljacqu Date: Tue, 20 Jun 2023 17:03:06 +0200 Subject: [PATCH 05/32] Avoid setting field with reflection on a JDK class - fails on newer JDK versions --- .../fr/xephi/authme/util/ExceptionUtilsTest.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/test/java/fr/xephi/authme/util/ExceptionUtilsTest.java b/src/test/java/fr/xephi/authme/util/ExceptionUtilsTest.java index e6931b08..b42fa97f 100644 --- a/src/test/java/fr/xephi/authme/util/ExceptionUtilsTest.java +++ b/src/test/java/fr/xephi/authme/util/ExceptionUtilsTest.java @@ -40,10 +40,10 @@ public class ExceptionUtilsTest { @Test public void shouldHandleCircularCausesGracefully() { // given - IllegalStateException ise = new IllegalStateException(); - UnsupportedOperationException uoe = new UnsupportedOperationException(ise); + ExceptionWithSettableCause exceptionWithSettableCause = new ExceptionWithSettableCause(); + UnsupportedOperationException uoe = new UnsupportedOperationException(exceptionWithSettableCause); ReflectiveOperationException roe = new ReflectiveOperationException(uoe); - ReflectionTestUtils.setField(Throwable.class, ise, "cause", roe); + exceptionWithSettableCause.cause = roe; // when NullPointerException resultNpe = ExceptionUtils.findThrowableInCause(NullPointerException.class, uoe); @@ -65,4 +65,14 @@ public class ExceptionUtilsTest { // then assertThat(result, equalTo("[MalformedURLException]: Unrecognized URL format")); } + + private static final class ExceptionWithSettableCause extends Exception { + + Exception cause; + + @Override + public synchronized Throwable getCause() { + return cause; + } + } } From df6931d4b1c6526acbb79df712dfb65960dd0702 Mon Sep 17 00:00:00 2001 From: Ramune Date: Wed, 21 Jun 2023 19:00:21 +0900 Subject: [PATCH 06/32] Add Japanese (#2719) --- src/main/resources/messages/help_ja.yml | 45 ++++++ src/main/resources/messages/messages_ja.yml | 156 ++++++++++++++++++++ 2 files changed, 201 insertions(+) create mode 100644 src/main/resources/messages/help_ja.yml create mode 100644 src/main/resources/messages/messages_ja.yml diff --git a/src/main/resources/messages/help_ja.yml b/src/main/resources/messages/help_ja.yml new file mode 100644 index 00000000..830275e4 --- /dev/null +++ b/src/main/resources/messages/help_ja.yml @@ -0,0 +1,45 @@ +# Translation config for the AuthMe help, e.g. when /authme help or /authme help register is called + +# ------------------------------------------------------- +# List of texts used in the help section +common: + header: '==========[ AuthMeReloaded ヘルプ ]==========' + optional: 'オプション' + hasPermission: '権限を持っています' + noPermission: '権限がありません' + default: 'デフォルト' + result: '結果' + defaultPermissions: + notAllowed: '権限がありません' + opOnly: 'OPのみ' + allowed: '全員に許可' + +# ------------------------------------------------------- +# Titles of the individual help sections +# Set the translation text to empty text to disable the section, e.g. to hide alternatives: +# alternatives: '' +section: + command: 'コマンド' + description: '簡単な説明' + detailedDescription: '詳細な説明' + arguments: '引数' + permissions: '権限' + alternatives: '代替' + children: 'コマンド' + +# ------------------------------------------------------- +# You can translate the data for all commands using the below pattern. +# For example to translate /authme reload, create a section "authme.reload", or "login" for /login +# If the command has arguments, you can use arg1 as below to translate the first argument, and so forth +# Translations don't need to be complete; any missing section will be taken from the default silently +# Important: Put main commands like "authme" before their children (e.g. "authme.reload") +commands: + authme.register: + description: 'プレイヤーを登録します' + detailedDescription: '指定されたプレイヤーを指定されたパスワードで登録します。' + arg1: + label: 'プレイヤー名' + description: 'プレイヤー名' + arg2: + label: 'パスワード' + description: 'パスワード' diff --git a/src/main/resources/messages/messages_ja.yml b/src/main/resources/messages/messages_ja.yml new file mode 100644 index 00000000..409f8c80 --- /dev/null +++ b/src/main/resources/messages/messages_ja.yml @@ -0,0 +1,156 @@ +# List of global tags: +# %nl% - Goes to new line. +# %username% - Replaces the username of the player receiving the message. +# %displayname% - Replaces the nickname (and colors) of the player receiving the message. + +# Registration +registration: + register_request: '&3サーバーに登録するには、次のコマンドを使用してください: /register <パスワード> <パスワードの確認>' + command_usage: '&c使用方法: /register <パスワード> <パスワードの確認>' + reg_only: '&4登録済みのユーザーのみサーバーに参加できます! 自分自身を登録するには、http://example.com にアクセスしてください!' + kicked_admin_registered: '管理者があなたを登録しました。再度ログインしてください。' + success: '&2登録が完了しました!' + disabled: '&cゲーム内での登録は無効になっています!' + name_taken: '&cこのユーザー名はすでに登録されています!' + +# Password errors on registration +password: + match_error: '&cパスワードが一致しません。もう一度確認してください!' + name_in_password: '&cパスワードには自分の名前を使用することはできません。別のパスワードを選択してください...' + unsafe_password: '&c選択したパスワードは安全ではありません。別のパスワードを選択してください...' + forbidden_characters: '&4パスワードに不正な文字が含まれています。許可されている文字: %valid_chars' + wrong_length: '&cパスワードが短すぎるか長すぎます!別のパスワードを試してください!' + +# Login +login: + command_usage: '&c使用方法: /login <パスワード>' + wrong_password: '&cパスワードが間違っています!' + success: '&2ログインが成功しました!' + login_request: '&c次のコマンドを使用してログインしてください: /login <パスワード>' + timeout_error: '&4ログインのタイムアウトが発生しました。サーバーからキックされました。もう一度試してください!' + +# Errors +error: + unregistered_user: '&cこのユーザーは登録されていません!' + denied_command: '&cこのコマンドを使用するには認証が必要です!' + denied_chat: '&cチャットするには認証が必要です!' + not_logged_in: '&cログインしていません!' + tempban_max_logins: '&cログインに失敗した回数が多すぎるため、一時的にアクセスが制限されています。' + max_registration: '&c接続ごとの登録数が最大値を超えています(%reg_count/%max_acc %reg_names)!' + no_permission: '&4この操作を実行する権限がありません!' + unexpected_error: '&4予期しないエラーが発生しました。管理者に連絡してください!' + kick_for_vip: '&3VIPプレイヤーがサーバーが満員の状態で参加しました!' + logged_in: '&cすでにログイン済みです!' + kick_unresolved_hostname: '&cエラーが発生しました:解決できないプレイヤーのホスト名!' + +# AntiBot +antibot: + kick_antibot: 'AntiBot保護モードが有効です!サーバーに参加するまでにしばらくお待ちください。' + auto_enabled: '&4[AntiBotService] 接続数が非常に多いため、AntiBotが有効になりました!' + auto_disabled: '&2[AntiBotService] %m 分後にAntiBotが無効になりました!' + +unregister: + success: '&c登録が正常に解除されました!' + command_usage: '&c使用方法: /unregister <パスワード>' + +# Other messages +misc: + accounts_owned_self: '所持しているアカウント数:%count 個' + accounts_owned_other: 'プレイヤー %name のアカウント数:%count 個' + account_not_activated: '&cアカウントはまだ有効化されていません。メールを確認してください!' + password_changed: '&2パスワードが正常に変更されました!' + logout: '&2正常にログアウトしました!' + reload: '&2設定とデータベースが正常に再読み込みされました!' + usage_change_password: '&c使用方法: /changepassword <旧パスワード> <新パスワード>' + +# Session messages +session: + invalid_session: '&cIPアドレスが変更され、セッションのデータが期限切れです!' + valid_session: '&2セッションの再接続によるログインです。' + +# Error messages when joining +on_join_validation: + name_length: '&4ユーザー名が短すぎるか長すぎます!' + characters_in_name: '&4ユーザー名に無効な文字が含まれています。許可される文字:%valid_chars' + country_banned: '&4このサーバーへのアクセスは、お使いの国から制限されています!' + not_owner_error: 'このアカウントの所有者ではありません。別の名前を選択してください!' + kick_full_server: '&4サーバーが満員です。後でもう一度お試しください!' + same_nick_online: '&4同じユーザー名のプレイヤーが既にサーバーでプレイしています!' + invalid_name_case: '正しいユーザー名は %valid です。%invalid ではなく、このユーザー名で参加してください。' + same_ip_online: '同じIPアドレスを持つプレイヤーが既にゲーム内にいます!' + quick_command: 'コマンドを速すぎる速度で使用しました!もう一度サーバーに参加してから、コマンドを使用する前にしばらくお待ちください。' + +# Email +email: + usage_email_add: '&c使用方法:/email add <メールアドレス> <メールアドレスの確認>' + usage_email_change: '&c使用方法:/email change <古いメールアドレス> <新しいメールアドレス>' + new_email_invalid: '&c無効な新しいメールアドレスです。もう一度やり直してください!' + old_email_invalid: '&c無効な古いメールアドレスです。もう一度やり直してください!' + invalid: '&c無効なメールアドレスです。もう一度やり直してください!' + added: '&2メールアドレスがアカウントに正常に追加されました!' + request_confirmation: '&cメールアドレスを確認してください!' + changed: '&2メールアドレスが正しく変更されました!' + email_show: '&2現在のメールアドレスは:%email' + incomplete_settings: 'エラー:メールの送信に必要なすべての設定が設定されていません。管理者に連絡してください。' + already_used: '&4そのメールアドレスは既に使用されています' + send_failure: 'メールを送信できませんでした。管理者に連絡してください。' + no_email_for_account: '&2現在、このアカウントに関連付けられたメールアドレスはありません。' + add_email_request: '&3コマンド「/email add <あなたのメールアドレス> <確認用メールアドレス>」を使用して、アカウントにメールアドレスを追加してください。' + change_password_expired: 'このコマンドを使用してパスワードを変更することはできません。' + email_cooldown_error: '&c最近すでにメールが送信されています。新しいメールを送信する前に、%time 待つ必要があります。' + add_not_allowed: '&cメールアドレスの追加は許可されていません。' + change_not_allowed: '&cメールアドレスの変更は許可されていません。' + +# Password recovery by email +recovery: + forgot_password_hint: '&3パスワードを忘れましたか?次のコマンドを使用してください:/email recovery <あなたのメールアドレス>' + command_usage: '&c使用方法:/email recovery <メールアドレス>' + email_sent: '&2パスワードの回復メールが正常に送信されました!メールの受信トレイを確認してください!' + code: + code_sent: 'パスワードをリセットするための回復コードがメールで送信されました。' + incorrect: '回復コードが正しくありません!残りの試行回数:%count' + tries_exceeded: '回復コードの入力試行回数が上限を超えました。新しいコードを生成するには、"/email recovery [メールアドレス]" を実行してください。' + correct: '回復コードが正しく入力されました!' + change_password: '即座にパスワードを変更するには、コマンド「/email setpassword <新しいパスワード>」を使用してください。' + +# Captcha +captcha: + usage_captcha: '&3ログインするには、Captchaコードを解決する必要があります。次のコマンドを使用してください:/captcha %captcha_code' + wrong_captcha: '&cCaptchaコードが間違っています。チャットに「/captcha %captcha_code」と入力してください!' + valid_captcha: '&2Captchaコードが正しく解決されました!' + captcha_for_registration: '登録するには、まずCaptchaを解決する必要があります。次のコマンドを使用してください:/captcha %captcha_code' + register_captcha_valid: '&2有効なCaptchaです!/register を使用して登録できます' + +# Verification code +verification: + code_required: '&3このコマンドはセンシティブな操作であり、メールの認証が必要です!受信トレイを確認し、メールの指示に従ってください。' + command_usage: '&c使用方法:/verification <コード>' + incorrect_code: '&cコードが正しくありません。メールで受け取ったコードを使用して、「/verification <コード>」とチャットに入力してください。' + success: '&2身元が確認されました!現在のセッション内ですべてのコマンドを実行できます!' + already_verified: '&2現在のセッションでは、既にすべてのセンシティブなコマンドを実行できます!' + code_expired: '&3コードの有効期限が切れています!新しいコードを取得するには、別のセンシティブなコマンドを実行してください!' + email_needed: '&3アカウントにはメールアドレスのリンクが必要です。身元を確認するためにはメールアドレスを関連付けてください!' + +# Two-factor authentication +two_factor: + code_created: '&2秘密コードは %code です。こちらからスキャンできます:%url' + confirmation_required: 'コードを確認するには、/2fa confirm <コード> を使用してください' + code_required: '二要素認証コードを提出するには、/2fa code <コード> を使用してください' + already_enabled: 'アカウントで既に二要素認証が有効になっています!' + enable_error_no_code: '2要素認証キーが生成されていないか、期限が切れています。/2fa add を実行してください' + enable_success: 'アカウントでの二要素認証が正常に有効になりました' + enable_error_wrong_code: 'コードが間違っているか、期限が切れています。/2fa add を実行してください' + not_enabled_error: 'アカウントでは二要素認証が有効になっていません。/2fa add を実行してください' + removed_success: 'アカウントから二要素認証が正常に削除されました' + invalid_code: '無効なコードです!' + +# Time units +time: + second: '秒' + seconds: '秒' + minute: '分' + minutes: '分' + hour: '時間' + hours: '時間' + day: '日' + days: '日' From f24d6c5b5fd9ffc2fd86d1ca5dfdf662a188bf66 Mon Sep 17 00:00:00 2001 From: ljacqu Date: Wed, 21 Jun 2023 12:12:34 +0200 Subject: [PATCH 07/32] Update translation doc page, add comment for missing entries, fix verifyMessages task --- docs/translations.md | 13 ++++---- .../updater/MigraterYamlFileResource.java | 8 +++++ src/main/resources/messages/messages_si.yml | 30 +++++++++---------- .../TranslationPageGenerator.java | 1 + 4 files changed, 31 insertions(+), 21 deletions(-) diff --git a/docs/translations.md b/docs/translations.md index 7cf499d7..fc8251e6 100644 --- a/docs/translations.md +++ b/docs/translations.md @@ -1,5 +1,5 @@ - + # AuthMe Translations The following translations are available in AuthMe. Set `messagesLanguage` to the language code @@ -22,10 +22,11 @@ Code | Language | Translated |   [hu](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_hu.yml) | Hungarian | 99% | 99 [id](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_id.yml) | Indonesian | 93% | 93 [it](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_it.yml) | Italian | 100% | 100 +[ja](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_ja.yml) | Japanese | 100% | 100 [ko](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_ko.yml) | Korean | 99% | 99 -[lt](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_lt.yml) | Lithuanian | 36% | 36 +[lt](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_lt.yml) | Lithuanian | 100% | 100 [nl](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_nl.yml) | Dutch | 100% | 100 -[pl](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_pl.yml) | Polish | 99% | 99 +[pl](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_pl.yml) | Polish | 100% | 100 [pt](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_pt.yml) | Portuguese | 100% | 100 [ro](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_ro.yml) | Romanian | 100% | 100 [ru](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_ru.yml) | Russian | 100% | 100 @@ -34,13 +35,13 @@ Code | Language | Translated |   [sr](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_sr.yml) | Serbian | 99% | 99 [tr](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_tr.yml) | Turkish | 100% | 100 [uk](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_uk.yml) | Ukrainian | 100% | 100 -[vn](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_vn.yml) | Vietnamese | 77% | 77 +[vn](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_vn.yml) | Vietnamese | 100% | 100 [zhcn](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_zhcn.yml) | Chinese (China) | 100% | 100 [zhhk](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_zhhk.yml) | Chinese (Hong Kong) | 99% | 99 [zhmc](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_zhmc.yml) | Chinese (Macau) | 64% | 64 -[zhtw](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_zhtw.yml) | Chinese (Taiwan) | 86% | 86 +[zhtw](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_zhtw.yml) | Chinese (Taiwan) | 100% | 100 --- -This page was automatically generated on the [AuthMe/AuthMeReloaded repository](https://github.com/AuthMe/AuthMeReloaded/tree/master/docs/) on Sun Apr 04 21:31:44 CEST 2021 +This page was automatically generated on the [AuthMe/AuthMeReloaded repository](https://github.com/AuthMe/AuthMeReloaded/tree/master/docs/) on Wed Jun 21 12:14:29 CEST 2023 diff --git a/src/main/java/fr/xephi/authme/message/updater/MigraterYamlFileResource.java b/src/main/java/fr/xephi/authme/message/updater/MigraterYamlFileResource.java index c8b6755b..b0122215 100644 --- a/src/main/java/fr/xephi/authme/message/updater/MigraterYamlFileResource.java +++ b/src/main/java/fr/xephi/authme/message/updater/MigraterYamlFileResource.java @@ -36,4 +36,12 @@ public class MigraterYamlFileResource extends YamlFileResource { } return singleQuoteYaml; } + + // Because we set the YAML object to put strings in single quotes, this method by default uses that YAML object + // and also puts all paths as single quotes. Override to just always return the same string since we know those + // are only message names (so never any conflicting strings like "true" or "0"). + @Override + protected String escapePathElementIfNeeded(String path) { + return path; + } } diff --git a/src/main/resources/messages/messages_si.yml b/src/main/resources/messages/messages_si.yml index db922a6b..74bbfe68 100644 --- a/src/main/resources/messages/messages_si.yml +++ b/src/main/resources/messages/messages_si.yml @@ -5,13 +5,13 @@ # Registration registration: + disabled: '&cRegistracija v igri je onemogočena!' + name_taken: '&cTo uporabniško ime ste ze registrirali!' register_request: '&3Registrirajte se z ukazom "/register "' command_usage: '&cUporaba: /register ' reg_only: '&4Samo registrirani uporabniki se lahko povezejo! Obiscite http://example.com , da se registrirate!' - kicked_admin_registered: 'Administrator vas je registriral; prosimo, da se prijavite.' success: '&2Uspešno registriran!' - disabled: '&cRegistracija v igri je onemogočena!' - name_taken: '&cTo uporabniško ime ste ze registrirali!' + kicked_admin_registered: 'Administrator vas je registriral; prosimo, da se prijavite.' # Password errors on registration password: @@ -40,6 +40,7 @@ error: max_registration: '&cPresegli ste največjo stevilo registracij (%reg_count/%max_acc %reg_names) za vašo povezavo!' logged_in: '&cSte že povezani!' kick_for_vip: '&3VIP igralec se je pridruzil serverju, ko je bil poln!' + # TODO kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!' tempban_max_logins: '&cBil si začasno izločen zaradi preveč neuspešnih prijav.' # AntiBot @@ -131,6 +132,17 @@ verification: code_expired: '&3Your code has expired! Execute another sensitive command to get a new code!' email_needed: '&3To verify your identity you need to link an email address with your account!' +# Time units +time: + second: 'sekunda' + seconds: 'sekund' + minute: 'minuta' + minutes: 'minut' + hour: 'ur' + hours: 'ure' + day: 'dan' + days: 'dni' + # Two-factor authentication two_factor: code_created: '&2Vasa skrivna koda je %code. Lahko je skenirate tu %url!' @@ -143,15 +155,3 @@ two_factor: not_enabled_error: 'Dvo stopična prijava ni vključena za vaš račun. Uporabite /2fa add' removed_success: 'Usprešno ste odstranili dvo stopično prijavo za vaš račun.' invalid_code: 'Nepravilna koda!' - -# Time units -time: - second: 'sekunda' - seconds: 'sekund' - minute: 'minuta' - minutes: 'minut' - hour: 'ur' - hours: 'ure' - day: 'dan' - days: 'dni' - \ No newline at end of file diff --git a/src/test/java/tools/docs/translations/TranslationPageGenerator.java b/src/test/java/tools/docs/translations/TranslationPageGenerator.java index 8997765f..f55cfd76 100644 --- a/src/test/java/tools/docs/translations/TranslationPageGenerator.java +++ b/src/test/java/tools/docs/translations/TranslationPageGenerator.java @@ -121,6 +121,7 @@ public class TranslationPageGenerator implements AutoToolTask { .put("hu", "Hungarian") .put("id", "Indonesian") .put("it", "Italian") + .put("ja", "Japanese") .put("ko", "Korean") .put("lt", "Lithuanian") .put("nl", "Dutch") From 642ff72ee05eac5e909f14d0165c2ab0e4fc20d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Jul 2023 19:22:03 +0200 Subject: [PATCH 08/32] Bump postgresql from 42.5.0 to 42.6.0 (#2711) Bumps [postgresql](https://github.com/pgjdbc/pgjdbc) from 42.5.0 to 42.6.0. - [Release notes](https://github.com/pgjdbc/pgjdbc/releases) - [Changelog](https://github.com/pgjdbc/pgjdbc/blob/master/CHANGELOG.md) - [Commits](https://github.com/pgjdbc/pgjdbc/compare/REL42.5.0...REL42.6.0) --- updated-dependencies: - dependency-name: org.postgresql:postgresql dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f78e74ca..5a1666f5 100644 --- a/pom.xml +++ b/pom.xml @@ -997,7 +997,7 @@ org.postgresql postgresql - 42.5.0 + 42.6.0 true From b6bf9dabccef11d77e580ada8951f11a9406545c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Jul 2023 19:22:13 +0200 Subject: [PATCH 09/32] Bump sqlite-jdbc from 3.39.3.0 to 3.42.0.0 (#2712) Bumps [sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.39.3.0 to 3.42.0.0. - [Release notes](https://github.com/xerial/sqlite-jdbc/releases) - [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG) - [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.39.3.0...3.42.0.0) --- updated-dependencies: - dependency-name: org.xerial:sqlite-jdbc dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5a1666f5..37425336 100644 --- a/pom.xml +++ b/pom.xml @@ -1048,7 +1048,7 @@ org.xerial sqlite-jdbc - 3.39.3.0 + 3.42.0.0 test From 974e6780a58bdd8e3fb7e60e51540fea0ee96b09 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Jul 2023 19:22:23 +0200 Subject: [PATCH 10/32] Bump EssentialsX from 2.19.7 to 2.20.0 (#2713) Bumps [EssentialsX](https://github.com/EssentialsX/Essentials) from 2.19.7 to 2.20.0. - [Release notes](https://github.com/EssentialsX/Essentials/releases) - [Commits](https://github.com/EssentialsX/Essentials/compare/2.19.7...2.20.0) --- updated-dependencies: - dependency-name: net.essentialsx:EssentialsX dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 37425336..c11f5a73 100644 --- a/pom.xml +++ b/pom.xml @@ -925,7 +925,7 @@ net.essentialsx EssentialsX - 2.19.7 + 2.20.0 provided From abcd2640bb5325332acc9ef51179ce3f28adc58e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Jul 2023 19:22:43 +0200 Subject: [PATCH 11/32] Bump mysql-connector-j from 8.0.31 to 8.0.33 (#2717) Bumps [mysql-connector-j](https://github.com/mysql/mysql-connector-j) from 8.0.31 to 8.0.33. - [Changelog](https://github.com/mysql/mysql-connector-j/blob/release/8.0/CHANGES) - [Commits](https://github.com/mysql/mysql-connector-j/compare/8.0.31...8.0.33) --- updated-dependencies: - dependency-name: com.mysql:mysql-connector-j dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c11f5a73..b4f91469 100644 --- a/pom.xml +++ b/pom.xml @@ -686,7 +686,7 @@ com.mysql mysql-connector-j - 8.0.31 + 8.0.33 true From e11f36412f09dabc8987eca1419f674bc34c6d4b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Jul 2023 19:22:56 +0200 Subject: [PATCH 12/32] Bump mariadb-java-client from 3.0.8 to 3.1.4 (#2718) Bumps [mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j) from 3.0.8 to 3.1.4. - [Release notes](https://github.com/mariadb-corporation/mariadb-connector-j/releases) - [Changelog](https://github.com/mariadb-corporation/mariadb-connector-j/blob/master/CHANGELOG.md) - [Commits](https://github.com/mariadb-corporation/mariadb-connector-j/compare/3.0.8...3.1.4) --- updated-dependencies: - dependency-name: org.mariadb.jdbc:mariadb-java-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b4f91469..4b96a7d7 100644 --- a/pom.xml +++ b/pom.xml @@ -692,7 +692,7 @@ org.mariadb.jdbc mariadb-java-client - 3.0.8 + 3.1.4 true From 7a76050cc7e1902a7eb7ee83b02ff8d86a2e6ba7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 16 Jul 2023 19:23:27 +0200 Subject: [PATCH 13/32] Bump h2 from 2.1.214 to 2.2.220 (#2726) Bumps [h2](https://github.com/h2database/h2database) from 2.1.214 to 2.2.220. - [Release notes](https://github.com/h2database/h2database/releases) - [Commits](https://github.com/h2database/h2database/compare/version-2.1.214...version-2.2.220) --- updated-dependencies: - dependency-name: com.h2database:h2 dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 4b96a7d7..133ce99a 100644 --- a/pom.xml +++ b/pom.xml @@ -1054,7 +1054,7 @@ com.h2database h2 - 2.1.214 + 2.2.220 test From 44b255512d73ebb96faf7adc87f3e8a9053cfdd2 Mon Sep 17 00:00:00 2001 From: ljacqu Date: Tue, 25 Jul 2023 21:38:12 +0200 Subject: [PATCH 14/32] Remove myself from plugin authors list - I'm still around :) but don't need my username to be part of the log when a MC server crashes :) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 133ce99a..a3f870e8 100644 --- a/pom.xml +++ b/pom.xml @@ -79,7 +79,7 @@ ${project.outputName} ${project.versionCode} ${project.groupId}.${project.artifactId}.${pluginDescription.name} - sgdc3, ljacqu, games647, Hex3l, krusic22 + sgdc3, games647, Hex3l, krusic22 From 7bfb79f4dd37001807b2463a2d522642ea7ffc6c Mon Sep 17 00:00:00 2001 From: Obydux Date: Sun, 30 Jul 2023 17:54:08 +0300 Subject: [PATCH 15/32] Actually finish the Lithuanian translation --- src/main/resources/messages/help_lt.yml | 45 +++++ src/main/resources/messages/messages_lt.yml | 198 ++++++++++---------- 2 files changed, 144 insertions(+), 99 deletions(-) create mode 100644 src/main/resources/messages/help_lt.yml diff --git a/src/main/resources/messages/help_lt.yml b/src/main/resources/messages/help_lt.yml new file mode 100644 index 00000000..ee141497 --- /dev/null +++ b/src/main/resources/messages/help_lt.yml @@ -0,0 +1,45 @@ +# Translation config for the AuthMe help, e.g. when /authme help or /authme help register is called + +# ------------------------------------------------------- +# List of texts used in the help section +common: + header: '==========[ AuthMeReloaded PAGALBA ]==========' + optional: 'Neprivaloma' + hasPermission: 'Jūs turite leidimą' + noPermission: 'Jūs neturite leidimo' + default: 'Numatytas' + result: 'Rezultatas' + defaultPermissions: + notAllowed: 'Nėra leidimo' + opOnly: 'Tik OP' + allowed: 'Visiems leistina' + +# ------------------------------------------------------- +# Titles of the individual help sections +# Set the translation text to empty text to disable the section, e.g. to hide alternatives: +# alternatives: '' +section: + command: 'Komanda' + description: 'Trumpas aprašas' + detailedDescription: 'Detalus aprašas' + arguments: 'Argumentai' + permissions: 'Leidimai' + alternatives: 'Alternatyvos' + children: 'Komandos' + +# ------------------------------------------------------- +# You can translate the data for all commands using the below pattern. +# For example to translate /authme reload, create a section "authme.reload", or "login" for /login +# If the command has arguments, you can use arg1 as below to translate the first argument, and so forth +# Translations don't need to be complete; any missing section will be taken from the default silently +# Important: Put main commands like "authme" before their children (e.g. "authme.reload") +commands: + authme.register: + description: 'Užregistruoti žaidėją' + detailedDescription: 'Užregistruokite nurodytą žaidėją su nurodytu slaptažodžiu.' + arg1: + label: 'žaidėjas' + description: 'Žaidėjo vardas' + arg2: + label: 'slaptažodis' + description: 'Slaptažodis' diff --git a/src/main/resources/messages/messages_lt.yml b/src/main/resources/messages/messages_lt.yml index f8606b01..7ce7ae51 100644 --- a/src/main/resources/messages/messages_lt.yml +++ b/src/main/resources/messages/messages_lt.yml @@ -5,153 +5,153 @@ # Registration registration: - disabled: '&6Registracija yra isjungta' - name_taken: '&cVartotojo vardas jau uzregistruotas' - register_request: '&ePrasome prisiregistruoti: /register slaptazodis pakartotiSlaptazodi' - command_usage: '&eNaudojimas: /register slaptazodis pakartotiSlaptazodi' - reg_only: '&cTik prisiregistravusiem zaidejams: apsilankykite: http://example.com tam kad uzsiregistruoti.' - success: '&aSekmingai prisiregistravote.' - kicked_admin_registered: 'Administatorius jus uzregistravo. Prisijunkite isnaujo' + disabled: '&6Registracija yra išjungta' + name_taken: '&cVartotojo vardas jau užregistruotas' + register_request: '&ePrašome prisiregistruoti: /register slaptažodis pakartotiSlaptažodį' + command_usage: '&eNaudojimas: /register slaptažodis pakartotiSlaptažodį' + reg_only: '&cTik prisiregistravusiems žaidėjams: apsilankykite: http://example.com tam, kad užsiregistruoti.' + success: '&aSėkmingai prisiregistravote.' + kicked_admin_registered: 'Administatorius Jus užregistravo. Prisijunkite iš naujo' # Password errors on registration password: - match_error: '&cSlaptazodziai nesutampa' - name_in_password: '&cJus negalite naudoti savo varda slaptazodyje' - unsafe_password: '&cSi slaptazodi lengva nulausti, pasirinkite kita slaptazodi' - forbidden_characters: '&4Jusus slaptazodis turi netinkamu simboliu. Leidziami simboliai: %valid_chars' - wrong_length: '&cJusu slaptazodis buvo per ilgas arba per trumpas.' + match_error: '&cSlaptažodžiai nesutampa' + name_in_password: '&cJūs negalite naudoti savo vardo slaptažodyje' + unsafe_password: '&cŠį Slaptažodį lengva nulaužti, pasirinkite kitą slaptažodį' + forbidden_characters: '&4Jūsų slaptažodis turi netinkamų simbolių. Leidžiami simboliai: %valid_chars' + wrong_length: '&cJūsų pasirinktas slaptažodis per ilgas arba per trumpas.' # Login login: - command_usage: '&eKomandos panaudojimas: /login slaptazodis' - wrong_password: '&cNeteisingas slaptazosdis' - success: '&aSekmingai prisijungete' - login_request: '&ePrasome prisijungti: /login slaptazodis' - timeout_error: '&cNespejote prisijungti' + command_usage: '&eKomandos panaudojimas: /login slaptažodis' + wrong_password: '&cNeteisingas Slaptažosdis' + success: '&aSėkmingai prisijungėte' + login_request: '&ePrašome prisijungti: /login slaptažodis' + timeout_error: '&cNespėjote prisijungti' # Errors error: - denied_command: '&cKad galetumete naudoti sia komanda turite buti prisijunge!' - denied_chat: '&cKad galetumete kalbeti jus turite buti prisijunge!' - unregistered_user: '&cVartotojas neprisiregistraves' - not_logged_in: '&cTu neprisijunges!' - no_permission: '&cNera leidimo' - unexpected_error: '&cAtsirado klaida, praneskite adminstratoriui.' - max_registration: '&cJus pasiekete maksimalu registraciju skaiciu.' - logged_in: '&cTu jau prisijunges!' - kick_for_vip: '&cA VIP prisijunge i pilna serveri!' - kick_unresolved_hostname: '&cIvyko klaida: Ivyko klaida su zaidejo adresu!' - tempban_max_logins: '&cJus laikinai uzblokuotas nes kelis kartus neteisingai suvedete salptazodi.' + denied_command: '&cKad galetumėte naudoti šią komandą turite būti prisijungę!' + denied_chat: '&cKad galetumėte kalbėti Jūs turite būti prisijungę!' + unregistered_user: '&cVartotojas neprisiregistravęs' + not_logged_in: '&cJūs neprisijungę!' + no_permission: '&cNėra leidimo' + unexpected_error: '&cAtsirado klaida, praneškite adminstratoriui.' + max_registration: '&cJūs pasiekėte maksimalų registracijų skaičių.' + logged_in: '&cTu jau prisijungęs!' + kick_for_vip: '&cRėmėjas prisijungė į pilną serverį!' + kick_unresolved_hostname: '&cĮvyko klaida su žaidejo adresu!' + tempban_max_logins: '&cJūs laikinai užblokuotas, nes kelis kartus neteisingai suvedėte slaptažodį.' # AntiBot antibot: - kick_antibot: 'AntiBot prevencija ijungta! Palaukite pries prisijungiant.' - auto_enabled: '&4[AntiBotService] AntiBot prevencija pajungta del didelio kiekio prisijungimu!' - auto_disabled: '&2[AntiBotService] AntiBot isjungtas po: %m minutes!' + kick_antibot: 'AntiBot prevencija įjungta! Palaukite prieš prisijungiant.' + auto_enabled: '&4[AntiBotService] AntiBot prevencija pajungta dėl didelio kiekio prisijungimų!' + auto_disabled: '&2[AntiBotService] AntiBot bus išjungtas po %m minučių!' # Unregister unregister: - success: '&aSekmingai issiregistravote!' - command_usage: '&ePanaikinti registracija: "/unregister slaptazodis"' + success: '&aSėkmingai išsiregistravote!' + command_usage: '&ePanaikinti registraciją: "/unregister slaptažodis"' # Other messages misc: - account_not_activated: '&aJusu vartotojas nera patvirtintas, patikrinkite el.pasta.' - password_changed: '&aSlaptazodis pakeistas' - logout: '&aSekmingai atsijungete' - reload: '&aNustatymai ir duomenu baze buvo perkrauta.' - usage_change_password: '&ePanaudojimas: /changepassword senasSlaptazodis naujasSlaptazodis' - accounts_owned_self: 'Jus turite %count paskyra(-s):' - accounts_owned_other: 'Zaidejas %name turi %count paskyra(-s):' + account_not_activated: '&aJūsų vartotojas nėra patvirtintas, pasitikrinkite el.paštą.' + password_changed: '&aSlaptažodis pakeistas' + logout: '&aSėkmingai atsijungėte' + reload: '&aNustatymai ir duomenų bazė buvo perkrauta.' + usage_change_password: '&ePanaudojimas: /changepassword senasSlaptažodis naujasSlaptažodis' + accounts_owned_self: 'Jūs turite %count paskyrą(-s):' + accounts_owned_other: 'Žaidejas %name turi %count paskyrą(-s):' # Session messages session: - valid_session: '&aSesijos prisijungimas' - invalid_session: '&cSesijos laikai nesutampa, prasome palaukti kol secija baigsis.' + valid_session: '&aAutomatinis sesijos prisijungimas' + invalid_session: '&cSesijos laikai nesutampa. Prašome palaukti kol sesija baigsis.' # Error messages when joining on_join_validation: - same_ip_online: 'Zaidejas su tuo paciu ip jau yra zaidime!' - same_nick_online: '&cKazkas situo vardu jau zaidzia.' - name_length: '&cJusu varsdas yra per ilgas arba per trumpas.' - characters_in_name: '&cJusu varde yra neledziamu simboliu, leidziami: %valid_chars' - kick_full_server: '&cServeris yra pilnas, Atsiprasome.' - country_banned: '&4Jusu salis yra uzblokuota siame serveryje!' - not_owner_error: 'Tu neesi sios paskyros savininkas, pasirinkite kita varda!' - invalid_name_case: 'Turetumete prisijungti su vardu: %valid, o ne su: %invalid.' - quick_command: 'Tu panaudojai komanda per greitai! Prisijunkite isnaujo ir siek tiek palaukite pries naudojant komandas.' + same_ip_online: 'Žaidejas su tuo pačiu IP adresu jau yra žaidime!' + same_nick_online: '&cKažkas šituo vardu jau žaidžia.' + name_length: '&cJūsų vardas yra per ilgas arba per trumpas.' + characters_in_name: '&cJūsų varde yra neledziamų simbolių. Leidžiami: %valid_chars' + kick_full_server: '&cServeris yra pilnas, atsiprašome.' + country_banned: '&4Jūsų šalis yra užblokuota šiame serveryje!' + not_owner_error: 'J0s nesate šios paskyros savininkas, pasirinkite kitą vardą!' + invalid_name_case: 'Turėtumėte prisijungti su vardu %valid, o ne su: %invalid.' + quick_command: 'Jūs panaudojote komandą per greitai! Prisijunkite iš naujo ir šiek tiek palaukite prieš naudojant komandas.' # Email email: - add_email_request: '&ePrasau pridekite savo el.pasta : /email add ' - usage_email_add: '&cNaudojimas: /email add ' + add_email_request: '&ePrašome jūsų pridėti savo el.paštą : /email add ' + usage_email_add: '&cNaudojimas: /email add ' usage_email_change: '&cNaudojimas: /email change ' - new_email_invalid: '&cNeteisingas el.pastas, bandykite isnaujo!' - old_email_invalid: '&cNeteisingas senas el.pastas, bandykite isnaujo!' - invalid: '&cNeteisingas el.pastas, bandykite isnaujo!' - added: '&2El.pastas sekmingai pridetas!' - add_not_allowed: '&cNaujo el.pasto pridejimas nera galimas' - request_confirmation: '&cPatvirtinkite savo el.pasta!' - changed: '&2El.pasta pakeistas sekmingai!' - change_not_allowed: '&cEl.pasto keitimas nera galimas' - email_show: '&2Jusu dabartinis el.pasto adresas: &f%email' - no_email_for_account: '&2Siuo metu jus neturite prideja jokio el.pasto adreso.' - already_used: '&4Jis el.pasto adresas jau yra naudojamas' - incomplete_settings: 'Klaidas: Nevisi nustatymai yra nustatyti laisko siuntimui. Susikietite su administratorium.' - send_failure: 'El.pasto laiskas nebuvo issiustas. Susikietite su administratorium.' - change_password_expired: 'Jus nebegalite pakeisti savo slaptazodzio naudojant sia komanda.' - email_cooldown_error: '&cEl.pasto laiskas jau buvo issiustas. Palaukite %time pries siunciant nauja.' + new_email_invalid: '&cNeteisingas el.paštas, bandykite iš naujo!' + old_email_invalid: '&cNeteisingas senas el.paštas, bandykite iš naujo!' + invalid: '&cNeteisingas el.paštas, bandykite iš naujo!' + added: '&2El.paštas sėkmingai pridėtas!' + add_not_allowed: '&cNaujo el.pašto pridejimas nėra galimas' + request_confirmation: '&cPatvirtinkite savo el.paštą!' + changed: '&2El.paštą pakeistas sėkmingai!' + change_not_allowed: '&cEl.pašto keitimas nėra galimas' + email_show: '&2Jūsų dabartinis el.pašto adresas: &f%email' + no_email_for_account: '&2Šiuo metu Jūs neturite pridėję jokio el.pašto adreso.' + already_used: '&4Jis el.pašto adresas jau yra naudojamas' + incomplete_settings: 'Klaida: Ne visi nustatymai yra nustatyti laiško siuntimui. Susikietite su administratoriumi.' + send_failure: 'El.pašto laiškas nebuvo išsiųstas. Susikietite su administratoriumi.' + change_password_expired: 'Jūs nebegalite pakeisti savo slaptažodzio naudojant šią komandą.' + email_cooldown_error: '&cEl.pašto laiškas jau buvo išsiųstas. Palaukite %time prieš šiunčiant naują.' # Password recovery by email recovery: - forgot_password_hint: '&cPamirsote slaptazodi? Rasykite: /email recovery el.pastas' - command_usage: '&cNaudojimas: /email recovery el.pastas' - email_sent: '&2Laiskas i jusu pasto adresa buvo issiustas!' + forgot_password_hint: '&cPamiršote savo slaptažodį? Rašykite: /email recovery el.paštas' + command_usage: '&cNaudojimas: /email recovery el.paštas' + email_sent: '&2Laiškas į Jūsų el.pašto adresą buvo išsiųstas!' code: - code_sent: 'Kodas slaptazodzio atstatymui buvo issiustas i jusu pasta.' - incorrect: 'Kodas neteisingas! jums liko %count bandymai(-as).' - tries_exceeded: 'Jus isnaudojote visus bandymus. Naudokite "/email recovery el.pastas" kad gauti nauja koda.' - correct: 'Kodas ivestas sekmingai!' - change_password: 'Naudokite /email setpassword kad pasikeistumete slaptazodi.' + code_sent: 'Kodas slaptažodžio atstatymui buvo išsiųstas į Jūsų el.paštą.' + incorrect: 'Kodas neteisingas! Jums liko %count bandymai(-as).' + tries_exceeded: 'Jūs išnaudojote visus bandymus. Naudokite "/email recovery el.paštas", kad gauti naują kodą.' + correct: 'Kodas įvestas sėkmingai!' + change_password: 'Naudokite /email setpassword , kad pasikeistumėte slaptažodį.' # Captcha captcha: usage_captcha: '&cPanaudojimas: /captcha %captcha_code' - wrong_captcha: '&cNeteisinga Captcha, naudokite : /captcha %captcha_code' - valid_captcha: '&cJusu captcha Teisinga!' - captcha_for_registration: 'Kad prisiregistruotumete turite ivygdyti captcha, rasykite: /captcha %captcha_code' - register_captcha_valid: '&2Captcha Teisinga! Galite naudoti /register' + wrong_captcha: '&cNeteisinga captcha, naudokite : /captcha %captcha_code' + valid_captcha: '&cJūsų captcha teisinga!' + captcha_for_registration: 'Kad prisiregistruotumėte turite įvygdyti captchą. Rašykite: /captcha %captcha_code' + register_captcha_valid: '&2Captcha teisinga! Galite naudoti /register' # Verification code verification: - code_required: '&3Kad naudotumete sia komanda turi patvirtinti savo pasto adresa! Sekite instrukcijas savo el.paste.' + code_required: '&3Kad naudotumete šią komanda turi patvirtinti savo el.pašto adresą! Sekite instrukcijas savo el.pašte.' command_usage: '&cNaudojimas: /verification ' - incorrect_code: '&cNeteisingas kodas, naudokite "/verification " ivesdami koda gauta savo el.paste' - success: '&2Jusu paskyra patvirtinta! Jus galite naudoti visas komandas!' - already_verified: '&2Jus jau esate patvirtintas ir galite naudoti visas komandas!' - code_expired: '&3Jusu kodo galiojimas baigesi! Panaudokite komanda isnaujo kad gauti nauja koda!' - email_needed: '&3Kad patvirtinti savo paskyra turite prideti el.pasto adresa!' + incorrect_code: '&cNeteisingas kodas, naudokite "/verification " įvesdami kodą gautą savo el.pašte' + success: '&2Jūsų paskyra patvirtinta! Jūs galite naudoti visas komandas!' + already_verified: '&2Jūs jau esate patvirtinę savo paskyrą ir galite naudoti visas komandas!' + code_expired: '&3Jūsų kodo galiojimas baigėsi! Panaudokite komandą iš naujo, kad gautumėte naują kodą!' + email_needed: '&3Kad patvirtinti savo paskyra turite pridėti el.pašto adresą!' # Time units time: - second: 'sekunde' + second: 'sekundę' seconds: 'sekundes' - minute: 'minute' + minute: 'minutę' minutes: 'minutes' - hour: 'valanda' + hour: 'valandą' hours: 'valandas' - day: 'diena' + day: 'dieną' days: 'dienas' # Two-factor authentication two_factor: - code_created: '&2Tavo slaptas kodas yra %code. Ji gali nuskenuoti cia: %url' - confirmation_required: 'Patvirtinkite savo koda su: /2fa confirm ' - code_required: 'Patvirkinkite savo koda su: /2fa code ' - already_enabled: 'Jus jau turite dvieju faktoriu autentifikacija!' - enable_error_no_code: 'Jus neturite dvieju faktoriu autentifikacijos arba ji pasibaige. Rasykite /2fa add' - enable_success: 'Dvieju faktoriu autentifikacija sekmingai ijungta' - enable_error_wrong_code: 'Wrong code or code has expired. Please run /2fa add' - not_enabled_error: 'Two-factor authentication is not enabled for your account. Run /2fa add' - removed_success: 'Successfully removed two-factor auth from your account' + code_created: '&2Jūsų slaptas kodas yra %code. Jį galite nuskenuoti čia: %url' + confirmation_required: 'Patvirtinkite savo kodą su: /2fa confirm ' + code_required: 'Patvirkinkite savo kodą su: /2fa code ' + already_enabled: 'Jūs jau turite dviejų faktorių autentifikaciją!' + enable_error_no_code: 'Jūs neturite dviejų faktorių autentifikacijos arba ji pasibaigė. Rašykite /2fa add' + enable_success: 'Dviejų faktorių autentifikacija sėkmingai įjungta' + enable_error_wrong_code: 'Neteisingas arba pasibaigęs kodas. Rašykite /2fa add' + not_enabled_error: 'Dviejų faktorių autentifikavimas nėra įjungtas ant jūsų paskyros. Rašykite /2fa add' + removed_success: 'Dviejų faktorių autentifikavimas sėkmingai pašalintas iš jūsų paskyros.' invalid_code: 'Neteisingas kodas!' From 550b3a1b6975e88e150f0dcdc686f458d55f0b4f Mon Sep 17 00:00:00 2001 From: Obydux Date: Sun, 30 Jul 2023 18:43:11 +0300 Subject: [PATCH 16/32] Minor spelling mistake --- src/main/resources/messages/messages_lt.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/messages/messages_lt.yml b/src/main/resources/messages/messages_lt.yml index 7ce7ae51..b90ebc73 100644 --- a/src/main/resources/messages/messages_lt.yml +++ b/src/main/resources/messages/messages_lt.yml @@ -124,7 +124,7 @@ captcha: # Verification code verification: - code_required: '&3Kad naudotumete šią komanda turi patvirtinti savo el.pašto adresą! Sekite instrukcijas savo el.pašte.' + code_required: '&3Kad galėtumėte naudoti šią komandą turite patvirtinti savo el.pašto adresą! Sekite instrukcijas savo el.pašte.' command_usage: '&cNaudojimas: /verification ' incorrect_code: '&cNeteisingas kodas, naudokite "/verification " įvesdami kodą gautą savo el.pašte' success: '&2Jūsų paskyra patvirtinta! Jūs galite naudoti visas komandas!' From f098cc0762b40f5312fd58bba76ccaecde47c93a Mon Sep 17 00:00:00 2001 From: ljacqu Date: Wed, 23 Aug 2023 06:30:31 +0200 Subject: [PATCH 17/32] Dependabot: Ignore Mockito 5 updates - Mockito 5 requires Java 11, which we're not yet using --- .github/dependabot.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 240dd9bb..dbc38fbb 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,3 +10,7 @@ updates: - dependency-name: com.google.guava:guava - dependency-name: org.apache.logging.log4j:log4j-core - dependency-name: com.zaxxer:HikariCP + - dependency-name: "org.mockito:mockito-core" # Mockito 5 requires Java 11 + versions: ">= 5" + - dependency-name: "org.mockito:mockito-junit-jupiter" # Mockito 5 requires Java 11 + versions: ">= 5" From 80c1c2edacf9d6c5fbe7618e37b94d9dc340fe09 Mon Sep 17 00:00:00 2001 From: ljacqu Date: Wed, 23 Aug 2023 06:33:36 +0200 Subject: [PATCH 18/32] Dependabot: Remove ignore entry for unused dependency - The previous commit specified to ignore mockito-junit-jupiter, which is not used by this project -> remove entry --- .github/dependabot.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index dbc38fbb..51a5ca89 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -12,5 +12,3 @@ updates: - dependency-name: com.zaxxer:HikariCP - dependency-name: "org.mockito:mockito-core" # Mockito 5 requires Java 11 versions: ">= 5" - - dependency-name: "org.mockito:mockito-junit-jupiter" # Mockito 5 requires Java 11 - versions: ">= 5" From 79309c3c050e222406ccfd8504df7b66a13026c9 Mon Sep 17 00:00:00 2001 From: ljacqu Date: Wed, 23 Aug 2023 06:29:11 +0200 Subject: [PATCH 19/32] Update to ConfigMe 1.4.0 --- pom.xml | 2 +- .../updater/MessageKeyConfigurationData.java | 11 +++-- .../MessageMigraterPropertyReader.java | 8 +-- .../message/updater/MessageUpdater.java | 7 ++- .../updater/MigraterYamlFileResource.java | 49 ++++++++++++------- 5 files changed, 47 insertions(+), 30 deletions(-) diff --git a/pom.xml b/pom.xml index a3f870e8..33861bb5 100644 --- a/pom.xml +++ b/pom.xml @@ -760,7 +760,7 @@ ch.jalu configme - 1.3.0 + 1.4.0 true diff --git a/src/main/java/fr/xephi/authme/message/updater/MessageKeyConfigurationData.java b/src/main/java/fr/xephi/authme/message/updater/MessageKeyConfigurationData.java index cf3c1c78..48cea6aa 100644 --- a/src/main/java/fr/xephi/authme/message/updater/MessageKeyConfigurationData.java +++ b/src/main/java/fr/xephi/authme/message/updater/MessageKeyConfigurationData.java @@ -5,6 +5,7 @@ import ch.jalu.configme.properties.Property; import ch.jalu.configme.properties.convertresult.PropertyValue; import ch.jalu.configme.resource.PropertyReader; import fr.xephi.authme.message.MessageKey; +import fr.xephi.authme.message.updater.MessageUpdater.MessageKeyProperty; import java.util.List; import java.util.Map; @@ -39,15 +40,19 @@ public class MessageKeyConfigurationData extends ConfigurationDataImpl { } @SuppressWarnings("unchecked") - public List> getAllMessageProperties() { + public List getAllMessageProperties() { return (List) getProperties(); } public String getMessage(MessageKey messageKey) { - return getValue(new MessageUpdater.MessageKeyProperty(messageKey)); + return getValue(new MessageKeyProperty(messageKey)); + } + + public String getMessage(MessageKeyProperty property) { + return (String) getValues().get(property.getPath()); } public void setMessage(MessageKey messageKey, String message) { - setValue(new MessageUpdater.MessageKeyProperty(messageKey), message); + setValue(new MessageKeyProperty(messageKey), message); } } diff --git a/src/main/java/fr/xephi/authme/message/updater/MessageMigraterPropertyReader.java b/src/main/java/fr/xephi/authme/message/updater/MessageMigraterPropertyReader.java index a994df89..1c7e5961 100644 --- a/src/main/java/fr/xephi/authme/message/updater/MessageMigraterPropertyReader.java +++ b/src/main/java/fr/xephi/authme/message/updater/MessageMigraterPropertyReader.java @@ -4,13 +4,13 @@ import ch.jalu.configme.exception.ConfigMeException; import ch.jalu.configme.resource.PropertyReader; import org.yaml.snakeyaml.Yaml; -import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,8 +36,8 @@ final class MessageMigraterPropertyReader implements PropertyReader { * @param file the file to load * @return the created property reader */ - public static MessageMigraterPropertyReader loadFromFile(File file) { - try (InputStream is = new FileInputStream(file)) { + public static MessageMigraterPropertyReader loadFromFile(Path file) { + try (InputStream is = Files.newInputStream(file)) { return loadFromStream(is); } catch (IOException e) { throw new IllegalStateException("Error while reading file '" + file + "'", e); diff --git a/src/main/java/fr/xephi/authme/message/updater/MessageUpdater.java b/src/main/java/fr/xephi/authme/message/updater/MessageUpdater.java index 77fc996b..aeca297e 100644 --- a/src/main/java/fr/xephi/authme/message/updater/MessageUpdater.java +++ b/src/main/java/fr/xephi/authme/message/updater/MessageUpdater.java @@ -2,7 +2,6 @@ package fr.xephi.authme.message.updater; import ch.jalu.configme.configurationdata.ConfigurationData; import ch.jalu.configme.configurationdata.PropertyListBuilder; -import ch.jalu.configme.properties.Property; import ch.jalu.configme.properties.StringProperty; import ch.jalu.configme.properties.convertresult.ConvertErrorRecorder; import ch.jalu.configme.resource.PropertyReader; @@ -10,8 +9,8 @@ import ch.jalu.configme.resource.PropertyResource; import com.google.common.collect.ImmutableMap; import com.google.common.io.Files; import fr.xephi.authme.ConsoleLogger; -import fr.xephi.authme.output.ConsoleLoggerFactory; import fr.xephi.authme.message.MessageKey; +import fr.xephi.authme.output.ConsoleLoggerFactory; import fr.xephi.authme.util.FileUtils; import java.io.File; @@ -102,9 +101,9 @@ public class MessageUpdater { private boolean addMissingKeys(JarMessageSource jarMessageSource, MessageKeyConfigurationData configurationData) { List addedKeys = new ArrayList<>(); - for (Property property : configurationData.getAllMessageProperties()) { + for (MessageKeyProperty property : configurationData.getAllMessageProperties()) { final String key = property.getPath(); - if (configurationData.getValue(property) == null) { + if (configurationData.getMessage(property) == null) { configurationData.setValue(property, jarMessageSource.getMessageFromJar(property)); addedKeys.add(key); } diff --git a/src/main/java/fr/xephi/authme/message/updater/MigraterYamlFileResource.java b/src/main/java/fr/xephi/authme/message/updater/MigraterYamlFileResource.java index b0122215..94230b9f 100644 --- a/src/main/java/fr/xephi/authme/message/updater/MigraterYamlFileResource.java +++ b/src/main/java/fr/xephi/authme/message/updater/MigraterYamlFileResource.java @@ -2,8 +2,14 @@ package fr.xephi.authme.message.updater; import ch.jalu.configme.resource.PropertyReader; import ch.jalu.configme.resource.YamlFileResource; +import ch.jalu.configme.resource.yaml.SnakeYamlNodeBuilder; +import ch.jalu.configme.resource.yaml.SnakeYamlNodeBuilderImpl; +import org.jetbrains.annotations.NotNull; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.Yaml; +import org.yaml.snakeyaml.nodes.Node; +import org.yaml.snakeyaml.nodes.ScalarNode; +import org.yaml.snakeyaml.nodes.Tag; import java.io.File; @@ -12,36 +18,43 @@ import java.io.File; */ public class MigraterYamlFileResource extends YamlFileResource { - private Yaml singleQuoteYaml; - public MigraterYamlFileResource(File file) { super(file); } @Override public PropertyReader createReader() { - return MessageMigraterPropertyReader.loadFromFile(getFile()); + return MessageMigraterPropertyReader.loadFromFile(getPath()); } @Override protected Yaml createNewYaml() { - if (singleQuoteYaml == null) { - DumperOptions options = new DumperOptions(); - options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - options.setAllowUnicode(true); - options.setDefaultScalarStyle(DumperOptions.ScalarStyle.SINGLE_QUOTED); - // Overridden setting: don't split lines - options.setSplitLines(false); - singleQuoteYaml = new Yaml(options); - } - return singleQuoteYaml; + DumperOptions options = new DumperOptions(); + options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); + options.setAllowUnicode(true); + options.setProcessComments(true); + options.setIndent(4); + // Overridden setting: don't split lines + options.setSplitLines(false); + return new Yaml(options); } - // Because we set the YAML object to put strings in single quotes, this method by default uses that YAML object - // and also puts all paths as single quotes. Override to just always return the same string since we know those - // are only message names (so never any conflicting strings like "true" or "0"). @Override - protected String escapePathElementIfNeeded(String path) { - return path; + protected @NotNull SnakeYamlNodeBuilder createNodeBuilder() { + return new MigraterYamlNodeBuilder(); + } + + /** Extended to represent all strings with single quotes in the YAML. */ + private static final class MigraterYamlNodeBuilder extends SnakeYamlNodeBuilderImpl { + + @Override + protected @NotNull Node createStringNode(@NotNull String value) { + return new ScalarNode(Tag.STR, value, null, null, DumperOptions.ScalarStyle.SINGLE_QUOTED); + } + + @Override + public @NotNull Node createKeyNode(@NotNull String key) { + return super.createStringNode(key); // no single quotes + } } } From 2de4a60f3a2472bba771dc234aa4bd9dbb535e6d Mon Sep 17 00:00:00 2001 From: ljacqu Date: Thu, 24 Aug 2023 15:09:08 +0200 Subject: [PATCH 20/32] Revert "Update to ConfigMe 1.4.0" - ConfigMe uses a different version from SnakeYAML, causing issues because it uses a newer configuration. For now, we stay on 1.3 as a quick fix. This reverts commit 79309c3c050e222406ccfd8504df7b66a13026c9. --- pom.xml | 2 +- .../updater/MessageKeyConfigurationData.java | 11 ++--- .../MessageMigraterPropertyReader.java | 8 +-- .../message/updater/MessageUpdater.java | 7 +-- .../updater/MigraterYamlFileResource.java | 49 +++++++------------ 5 files changed, 30 insertions(+), 47 deletions(-) diff --git a/pom.xml b/pom.xml index 33861bb5..a3f870e8 100644 --- a/pom.xml +++ b/pom.xml @@ -760,7 +760,7 @@ ch.jalu configme - 1.4.0 + 1.3.0 true diff --git a/src/main/java/fr/xephi/authme/message/updater/MessageKeyConfigurationData.java b/src/main/java/fr/xephi/authme/message/updater/MessageKeyConfigurationData.java index 48cea6aa..cf3c1c78 100644 --- a/src/main/java/fr/xephi/authme/message/updater/MessageKeyConfigurationData.java +++ b/src/main/java/fr/xephi/authme/message/updater/MessageKeyConfigurationData.java @@ -5,7 +5,6 @@ import ch.jalu.configme.properties.Property; import ch.jalu.configme.properties.convertresult.PropertyValue; import ch.jalu.configme.resource.PropertyReader; import fr.xephi.authme.message.MessageKey; -import fr.xephi.authme.message.updater.MessageUpdater.MessageKeyProperty; import java.util.List; import java.util.Map; @@ -40,19 +39,15 @@ public class MessageKeyConfigurationData extends ConfigurationDataImpl { } @SuppressWarnings("unchecked") - public List getAllMessageProperties() { + public List> getAllMessageProperties() { return (List) getProperties(); } public String getMessage(MessageKey messageKey) { - return getValue(new MessageKeyProperty(messageKey)); - } - - public String getMessage(MessageKeyProperty property) { - return (String) getValues().get(property.getPath()); + return getValue(new MessageUpdater.MessageKeyProperty(messageKey)); } public void setMessage(MessageKey messageKey, String message) { - setValue(new MessageKeyProperty(messageKey), message); + setValue(new MessageUpdater.MessageKeyProperty(messageKey), message); } } diff --git a/src/main/java/fr/xephi/authme/message/updater/MessageMigraterPropertyReader.java b/src/main/java/fr/xephi/authme/message/updater/MessageMigraterPropertyReader.java index 1c7e5961..a994df89 100644 --- a/src/main/java/fr/xephi/authme/message/updater/MessageMigraterPropertyReader.java +++ b/src/main/java/fr/xephi/authme/message/updater/MessageMigraterPropertyReader.java @@ -4,13 +4,13 @@ import ch.jalu.configme.exception.ConfigMeException; import ch.jalu.configme.resource.PropertyReader; import org.yaml.snakeyaml.Yaml; +import java.io.File; +import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; -import java.nio.file.Files; -import java.nio.file.Path; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -36,8 +36,8 @@ final class MessageMigraterPropertyReader implements PropertyReader { * @param file the file to load * @return the created property reader */ - public static MessageMigraterPropertyReader loadFromFile(Path file) { - try (InputStream is = Files.newInputStream(file)) { + public static MessageMigraterPropertyReader loadFromFile(File file) { + try (InputStream is = new FileInputStream(file)) { return loadFromStream(is); } catch (IOException e) { throw new IllegalStateException("Error while reading file '" + file + "'", e); diff --git a/src/main/java/fr/xephi/authme/message/updater/MessageUpdater.java b/src/main/java/fr/xephi/authme/message/updater/MessageUpdater.java index aeca297e..77fc996b 100644 --- a/src/main/java/fr/xephi/authme/message/updater/MessageUpdater.java +++ b/src/main/java/fr/xephi/authme/message/updater/MessageUpdater.java @@ -2,6 +2,7 @@ package fr.xephi.authme.message.updater; import ch.jalu.configme.configurationdata.ConfigurationData; import ch.jalu.configme.configurationdata.PropertyListBuilder; +import ch.jalu.configme.properties.Property; import ch.jalu.configme.properties.StringProperty; import ch.jalu.configme.properties.convertresult.ConvertErrorRecorder; import ch.jalu.configme.resource.PropertyReader; @@ -9,8 +10,8 @@ import ch.jalu.configme.resource.PropertyResource; import com.google.common.collect.ImmutableMap; import com.google.common.io.Files; import fr.xephi.authme.ConsoleLogger; -import fr.xephi.authme.message.MessageKey; import fr.xephi.authme.output.ConsoleLoggerFactory; +import fr.xephi.authme.message.MessageKey; import fr.xephi.authme.util.FileUtils; import java.io.File; @@ -101,9 +102,9 @@ public class MessageUpdater { private boolean addMissingKeys(JarMessageSource jarMessageSource, MessageKeyConfigurationData configurationData) { List addedKeys = new ArrayList<>(); - for (MessageKeyProperty property : configurationData.getAllMessageProperties()) { + for (Property property : configurationData.getAllMessageProperties()) { final String key = property.getPath(); - if (configurationData.getMessage(property) == null) { + if (configurationData.getValue(property) == null) { configurationData.setValue(property, jarMessageSource.getMessageFromJar(property)); addedKeys.add(key); } diff --git a/src/main/java/fr/xephi/authme/message/updater/MigraterYamlFileResource.java b/src/main/java/fr/xephi/authme/message/updater/MigraterYamlFileResource.java index 94230b9f..b0122215 100644 --- a/src/main/java/fr/xephi/authme/message/updater/MigraterYamlFileResource.java +++ b/src/main/java/fr/xephi/authme/message/updater/MigraterYamlFileResource.java @@ -2,14 +2,8 @@ package fr.xephi.authme.message.updater; import ch.jalu.configme.resource.PropertyReader; import ch.jalu.configme.resource.YamlFileResource; -import ch.jalu.configme.resource.yaml.SnakeYamlNodeBuilder; -import ch.jalu.configme.resource.yaml.SnakeYamlNodeBuilderImpl; -import org.jetbrains.annotations.NotNull; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.nodes.Node; -import org.yaml.snakeyaml.nodes.ScalarNode; -import org.yaml.snakeyaml.nodes.Tag; import java.io.File; @@ -18,43 +12,36 @@ import java.io.File; */ public class MigraterYamlFileResource extends YamlFileResource { + private Yaml singleQuoteYaml; + public MigraterYamlFileResource(File file) { super(file); } @Override public PropertyReader createReader() { - return MessageMigraterPropertyReader.loadFromFile(getPath()); + return MessageMigraterPropertyReader.loadFromFile(getFile()); } @Override protected Yaml createNewYaml() { - DumperOptions options = new DumperOptions(); - options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - options.setAllowUnicode(true); - options.setProcessComments(true); - options.setIndent(4); - // Overridden setting: don't split lines - options.setSplitLines(false); - return new Yaml(options); + if (singleQuoteYaml == null) { + DumperOptions options = new DumperOptions(); + options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); + options.setAllowUnicode(true); + options.setDefaultScalarStyle(DumperOptions.ScalarStyle.SINGLE_QUOTED); + // Overridden setting: don't split lines + options.setSplitLines(false); + singleQuoteYaml = new Yaml(options); + } + return singleQuoteYaml; } + // Because we set the YAML object to put strings in single quotes, this method by default uses that YAML object + // and also puts all paths as single quotes. Override to just always return the same string since we know those + // are only message names (so never any conflicting strings like "true" or "0"). @Override - protected @NotNull SnakeYamlNodeBuilder createNodeBuilder() { - return new MigraterYamlNodeBuilder(); - } - - /** Extended to represent all strings with single quotes in the YAML. */ - private static final class MigraterYamlNodeBuilder extends SnakeYamlNodeBuilderImpl { - - @Override - protected @NotNull Node createStringNode(@NotNull String value) { - return new ScalarNode(Tag.STR, value, null, null, DumperOptions.ScalarStyle.SINGLE_QUOTED); - } - - @Override - public @NotNull Node createKeyNode(@NotNull String key) { - return super.createStringNode(key); // no single quotes - } + protected String escapePathElementIfNeeded(String path) { + return path; } } From 65a272d6cba5f1cca6d84883b8ec42268731f03e Mon Sep 17 00:00:00 2001 From: 3meraldK Date: Sun, 24 Sep 2023 17:26:16 +0200 Subject: [PATCH 21/32] Config option to disable GeoIP database #2720 --- docs/config.md | 2 ++ .../fr/xephi/authme/service/GeoIpService.java | 15 +++++++++++++++ .../settings/properties/ProtectionSettings.java | 4 ++++ 3 files changed, 21 insertions(+) diff --git a/docs/config.md b/docs/config.md index dfe816b8..1c86eaf7 100644 --- a/docs/config.md +++ b/docs/config.md @@ -403,6 +403,8 @@ Protection: # Apply the protection also to registered usernames enableProtectionRegistered: true geoIpDatabase: + # Enable GeoIp database + enabled: true # The MaxMind clientId used to download the GeoIp database, # get one at https://www.maxmind.com/en/accounts/current/license-key # The EssentialsX project has a very useful tutorial on how to generate diff --git a/src/main/java/fr/xephi/authme/service/GeoIpService.java b/src/main/java/fr/xephi/authme/service/GeoIpService.java index d2e7324f..40c3aa1e 100644 --- a/src/main/java/fr/xephi/authme/service/GeoIpService.java +++ b/src/main/java/fr/xephi/authme/service/GeoIpService.java @@ -64,6 +64,8 @@ public class GeoIpService { private GeoIp2Provider databaseReader; private volatile boolean downloading; + private boolean enabled = true; + @Inject GeoIpService(@DataFolder File dataFolder, BukkitService bukkitService, Settings settings) { this.bukkitService = bukkitService; @@ -89,6 +91,13 @@ public class GeoIpService { * @return True if the data is available, false otherwise. */ private synchronized boolean isDataAvailable() { + + // If this feature is disabled, just stop + if (!settings.getProperty(ProtectionSettings.ENABLE_GEOIP)) { + enabled = false; + return false; + } + if (downloading) { // we are currently downloading the database return false; @@ -280,6 +289,9 @@ public class GeoIpService { * or "--" if it cannot be fetched. */ public String getCountryCode(String ip) { + if (!enabled) { + return "--"; + } if (InternetProtocolUtils.isLocalAddress(ip)) { return "LOCALHOST"; } @@ -293,6 +305,9 @@ public class GeoIpService { * @return The name of the country, "LocalHost" for local addresses, or "N/A" if it cannot be fetched. */ public String getCountryName(String ip) { + if (!enabled) { + return "N/A"; + } if (InternetProtocolUtils.isLocalAddress(ip)) { return "LocalHost"; } diff --git a/src/main/java/fr/xephi/authme/settings/properties/ProtectionSettings.java b/src/main/java/fr/xephi/authme/settings/properties/ProtectionSettings.java index f8b891d0..2c4f3431 100644 --- a/src/main/java/fr/xephi/authme/settings/properties/ProtectionSettings.java +++ b/src/main/java/fr/xephi/authme/settings/properties/ProtectionSettings.java @@ -20,6 +20,10 @@ public final class ProtectionSettings implements SettingsHolder { public static final Property ENABLE_PROTECTION_REGISTERED = newProperty("Protection.enableProtectionRegistered", true); + @Comment("Enable GeoIp database") + public static final Property ENABLE_GEOIP = + newProperty("Protection.geoIpDatabase.enabled", true); + @Comment({"The MaxMind clientId used to download the GeoIp database,", "get one at https://www.maxmind.com/en/accounts/current/license-key", "The EssentialsX project has a very useful tutorial on how to generate", From 9b93e0e4b67e38d58eeb4a30b0775cb6063b8315 Mon Sep 17 00:00:00 2001 From: ljacqu Date: Sun, 24 Sep 2023 18:23:55 +0200 Subject: [PATCH 22/32] Disable GeoIP with config: remove field, fix tests --- .../fr/xephi/authme/service/GeoIpService.java | 9 ------ .../authme/service/GeoIpServiceTest.java | 30 ++++++++++++++----- 2 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/main/java/fr/xephi/authme/service/GeoIpService.java b/src/main/java/fr/xephi/authme/service/GeoIpService.java index 40c3aa1e..ef0d00b6 100644 --- a/src/main/java/fr/xephi/authme/service/GeoIpService.java +++ b/src/main/java/fr/xephi/authme/service/GeoIpService.java @@ -64,8 +64,6 @@ public class GeoIpService { private GeoIp2Provider databaseReader; private volatile boolean downloading; - private boolean enabled = true; - @Inject GeoIpService(@DataFolder File dataFolder, BukkitService bukkitService, Settings settings) { this.bukkitService = bukkitService; @@ -94,7 +92,6 @@ public class GeoIpService { // If this feature is disabled, just stop if (!settings.getProperty(ProtectionSettings.ENABLE_GEOIP)) { - enabled = false; return false; } @@ -289,9 +286,6 @@ public class GeoIpService { * or "--" if it cannot be fetched. */ public String getCountryCode(String ip) { - if (!enabled) { - return "--"; - } if (InternetProtocolUtils.isLocalAddress(ip)) { return "LOCALHOST"; } @@ -305,9 +299,6 @@ public class GeoIpService { * @return The name of the country, "LocalHost" for local addresses, or "N/A" if it cannot be fetched. */ public String getCountryName(String ip) { - if (!enabled) { - return "N/A"; - } if (InternetProtocolUtils.isLocalAddress(ip)) { return "LocalHost"; } diff --git a/src/test/java/fr/xephi/authme/service/GeoIpServiceTest.java b/src/test/java/fr/xephi/authme/service/GeoIpServiceTest.java index 8654ec8b..351049a8 100644 --- a/src/test/java/fr/xephi/authme/service/GeoIpServiceTest.java +++ b/src/test/java/fr/xephi/authme/service/GeoIpServiceTest.java @@ -3,12 +3,8 @@ package fr.xephi.authme.service; import com.maxmind.db.GeoIp2Provider; import com.maxmind.db.model.Country; import com.maxmind.db.model.CountryResponse; - -import java.io.File; -import java.io.IOException; -import java.net.InetAddress; - import fr.xephi.authme.settings.Settings; +import fr.xephi.authme.settings.properties.ProtectionSettings; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -17,14 +13,18 @@ import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.BDDMockito.given; +import java.io.File; +import java.io.IOException; +import java.net.InetAddress; import static org.hamcrest.Matchers.equalTo; import static org.junit.Assert.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.BDDMockito.given; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoInteractions; /** * Test for {@link GeoIpService}. @@ -65,6 +65,7 @@ public class GeoIpServiceTest { CountryResponse response = mock(CountryResponse.class); given(response.getCountry()).willReturn(country); given(lookupService.getCountry(ip)).willReturn(response); + given(settings.getProperty(ProtectionSettings.ENABLE_GEOIP)).willReturn(true); // when String result = geoIpService.getCountryCode(ip.getHostAddress()); @@ -99,6 +100,7 @@ public class GeoIpServiceTest { CountryResponse response = mock(CountryResponse.class); given(response.getCountry()).willReturn(country); given(lookupService.getCountry(ip)).willReturn(response); + given(settings.getProperty(ProtectionSettings.ENABLE_GEOIP)).willReturn(true); // when String result = geoIpService.getCountryName(ip.getHostAddress()); @@ -120,4 +122,18 @@ public class GeoIpServiceTest { assertThat(result, equalTo("LocalHost")); verify(lookupService, never()).getCountry(ip); } + + @Test + public void shouldNotLookUpCountryNameIfDisabled() throws Exception { + // given + InetAddress ip = InetAddress.getByName("24.45.167.89"); + given(settings.getProperty(ProtectionSettings.ENABLE_GEOIP)).willReturn(false); + + // when + String result = geoIpService.getCountryName(ip.getHostAddress()); + + // then + assertThat(result, equalTo("N/A")); + verifyNoInteractions(lookupService); + } } From 95726cc7f9980e7f3d9dcb4fa7a610b527daab6f Mon Sep 17 00:00:00 2001 From: DGun Otto Date: Thu, 22 Feb 2024 18:36:18 +0800 Subject: [PATCH 23/32] Update PostgreSQL to silence CVE-2024-1597 warning (#2778) --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a3f870e8..72ab7e3f 100644 --- a/pom.xml +++ b/pom.xml @@ -997,7 +997,7 @@ org.postgresql postgresql - 42.6.0 + 42.7.2 true From caf0d3f8ed01ad2ff17b84d8b95fd0b692ba3b38 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Feb 2024 11:40:56 +0100 Subject: [PATCH 24/32] Bump org.xerial:sqlite-jdbc from 3.42.0.0 to 3.44.0.0 (#2766) Bumps [org.xerial:sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.42.0.0 to 3.44.0.0. - [Release notes](https://github.com/xerial/sqlite-jdbc/releases) - [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG) - [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.42.0.0...3.44.0.0) --- updated-dependencies: - dependency-name: org.xerial:sqlite-jdbc dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 72ab7e3f..95291b49 100644 --- a/pom.xml +++ b/pom.xml @@ -1048,7 +1048,7 @@ org.xerial sqlite-jdbc - 3.42.0.0 + 3.44.0.0 test From 72bbb4ebaa92ed6538dc1160ca427b12968a06d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Feb 2024 11:41:57 +0100 Subject: [PATCH 25/32] Bump org.mariadb.jdbc:mariadb-java-client from 3.1.4 to 3.3.0 (#2765) Bumps [org.mariadb.jdbc:mariadb-java-client](https://github.com/mariadb-corporation/mariadb-connector-j) from 3.1.4 to 3.3.0. - [Release notes](https://github.com/mariadb-corporation/mariadb-connector-j/releases) - [Changelog](https://github.com/mariadb-corporation/mariadb-connector-j/blob/master/CHANGELOG.md) - [Commits](https://github.com/mariadb-corporation/mariadb-connector-j/compare/3.1.4...3.3.0) --- updated-dependencies: - dependency-name: org.mariadb.jdbc:mariadb-java-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 95291b49..2aa9df05 100644 --- a/pom.xml +++ b/pom.xml @@ -692,7 +692,7 @@ org.mariadb.jdbc mariadb-java-client - 3.1.4 + 3.3.0 true From d5dbc7e5c797a12b518573efcd5084556a836ddb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Feb 2024 11:42:17 +0100 Subject: [PATCH 26/32] Bump org.checkerframework:checker-qual from 3.26.0 to 3.40.0 (#2764) Bumps [org.checkerframework:checker-qual](https://github.com/typetools/checker-framework) from 3.26.0 to 3.40.0. - [Release notes](https://github.com/typetools/checker-framework/releases) - [Changelog](https://github.com/typetools/checker-framework/blob/master/docs/CHANGELOG.md) - [Commits](https://github.com/typetools/checker-framework/compare/checker-framework-3.26.0...checker-framework-3.40.0) --- updated-dependencies: - dependency-name: org.checkerframework:checker-qual dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2aa9df05..0ece3398 100644 --- a/pom.xml +++ b/pom.xml @@ -1040,7 +1040,7 @@ org.checkerframework checker-qual - 3.26.0 + 3.40.0 test From 93f1385c7afaa0b4b6c737b0bcaeb28868e1725c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Feb 2024 11:42:40 +0100 Subject: [PATCH 27/32] Bump com.mysql:mysql-connector-j from 8.0.33 to 8.2.0 (#2761) Bumps [com.mysql:mysql-connector-j](https://github.com/mysql/mysql-connector-j) from 8.0.33 to 8.2.0. - [Changelog](https://github.com/mysql/mysql-connector-j/blob/release/8.x/CHANGES) - [Commits](https://github.com/mysql/mysql-connector-j/compare/8.0.33...8.2.0) --- updated-dependencies: - dependency-name: com.mysql:mysql-connector-j dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0ece3398..fcc6bdac 100644 --- a/pom.xml +++ b/pom.xml @@ -686,7 +686,7 @@ com.mysql mysql-connector-j - 8.0.33 + 8.2.0 true From 54bae76d27fefe62010435562963d34275e89bf4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Feb 2024 11:42:54 +0100 Subject: [PATCH 28/32] Bump org.jacoco:jacoco-maven-plugin from 0.8.8 to 0.8.11 (#2756) Bumps [org.jacoco:jacoco-maven-plugin](https://github.com/jacoco/jacoco) from 0.8.8 to 0.8.11. - [Release notes](https://github.com/jacoco/jacoco/releases) - [Commits](https://github.com/jacoco/jacoco/compare/v0.8.8...v0.8.11) --- updated-dependencies: - dependency-name: org.jacoco:jacoco-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fcc6bdac..375971ee 100644 --- a/pom.xml +++ b/pom.xml @@ -212,7 +212,7 @@ org.jacoco jacoco-maven-plugin - 0.8.8 + 0.8.11 pre-unit-test From ad64370bf13d170750fae46b91606a309d22d56f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Feb 2024 11:43:07 +0100 Subject: [PATCH 29/32] Bump net.essentialsx:EssentialsX from 2.20.0 to 2.20.1 (#2737) Bumps [net.essentialsx:EssentialsX](https://github.com/EssentialsX/Essentials) from 2.20.0 to 2.20.1. - [Release notes](https://github.com/EssentialsX/Essentials/releases) - [Commits](https://github.com/EssentialsX/Essentials/compare/2.20.0...2.20.1) --- updated-dependencies: - dependency-name: net.essentialsx:EssentialsX dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 375971ee..7772602d 100644 --- a/pom.xml +++ b/pom.xml @@ -925,7 +925,7 @@ net.essentialsx EssentialsX - 2.20.0 + 2.20.1 provided From 9380efdd3d803c1fa302a472477d9b4ca41c8d8b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Feb 2024 11:43:17 +0100 Subject: [PATCH 30/32] Bump bcrypt from 0.9.0 to 0.10.2 (#2729) Bumps [bcrypt](https://github.com/patrickfav/bcrypt) from 0.9.0 to 0.10.2. - [Release notes](https://github.com/patrickfav/bcrypt/releases) - [Changelog](https://github.com/patrickfav/bcrypt/blob/main/CHANGELOG) - [Commits](https://github.com/patrickfav/bcrypt/compare/v0.9.0...v0.10.2) --- updated-dependencies: - dependency-name: at.favre.lib:bcrypt dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 7772602d..fd746b5b 100644 --- a/pom.xml +++ b/pom.xml @@ -975,7 +975,7 @@ at.favre.lib bcrypt - 0.9.0 + 0.10.2 true From a57382f269f5fb7cae2e47d3286881d0deea2505 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Feb 2024 11:43:48 +0100 Subject: [PATCH 31/32] Bump maven-enforcer-plugin from 3.1.0 to 3.2.1 (#2681) Bumps [maven-enforcer-plugin](https://github.com/apache/maven-enforcer) from 3.1.0 to 3.2.1. - [Release notes](https://github.com/apache/maven-enforcer/releases) - [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.1.0...enforcer-3.2.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-enforcer-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fd746b5b..5dc76ccd 100644 --- a/pom.xml +++ b/pom.xml @@ -164,7 +164,7 @@ org.apache.maven.plugins maven-enforcer-plugin - 3.1.0 + 3.2.1 enforce-environment From f56a23f4b728494a0af01bbd760de925cdbd02ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Feb 2024 11:44:00 +0100 Subject: [PATCH 32/32] Bump maven-install-plugin from 3.0.1 to 3.1.0 (#2643) Bumps [maven-install-plugin](https://github.com/apache/maven-install-plugin) from 3.0.1 to 3.1.0. - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.0.1...maven-install-plugin-3.1.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5dc76ccd..85442ead 100644 --- a/pom.xml +++ b/pom.xml @@ -467,7 +467,7 @@ org.apache.maven.plugins maven-install-plugin - 3.0.1 + 3.1.0