Always specify Locale on toLowerCase and toUpperCase usages, fixes AuthMe not working correctly on machines with turkish locale. ('I'.toLowerCase() => 'ı')
This commit is contained in:
@@ -28,6 +28,7 @@ import java.time.Instant;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -457,7 +458,7 @@ public class AuthMeApiTest {
|
||||
String name = "Marco";
|
||||
String password = "myP4ss";
|
||||
HashedPassword hashedPassword = new HashedPassword("0395872SLKDFJOWEIUTEJSD");
|
||||
given(passwordSecurity.computeHash(password, name.toLowerCase())).willReturn(hashedPassword);
|
||||
given(passwordSecurity.computeHash(password, name.toLowerCase(Locale.ROOT))).willReturn(hashedPassword);
|
||||
given(dataSource.saveAuth(any(PlayerAuth.class))).willReturn(true);
|
||||
|
||||
// when
|
||||
@@ -465,10 +466,10 @@ public class AuthMeApiTest {
|
||||
|
||||
// then
|
||||
assertThat(result, equalTo(true));
|
||||
verify(passwordSecurity).computeHash(password, name.toLowerCase());
|
||||
verify(passwordSecurity).computeHash(password, name.toLowerCase(Locale.ROOT));
|
||||
ArgumentCaptor<PlayerAuth> authCaptor = ArgumentCaptor.forClass(PlayerAuth.class);
|
||||
verify(dataSource).saveAuth(authCaptor.capture());
|
||||
assertThat(authCaptor.getValue().getNickname(), equalTo(name.toLowerCase()));
|
||||
assertThat(authCaptor.getValue().getNickname(), equalTo(name.toLowerCase(Locale.ROOT)));
|
||||
assertThat(authCaptor.getValue().getRealName(), equalTo(name));
|
||||
assertThat(authCaptor.getValue().getPassword(), equalTo(hashedPassword));
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.function.BiConsumer;
|
||||
@@ -90,7 +91,7 @@ public class CommandInitializerTest {
|
||||
@Override
|
||||
public void accept(CommandDescription command, Integer depth) {
|
||||
for (String label : command.getLabels()) {
|
||||
if (!label.equals(label.toLowerCase())) {
|
||||
if (!label.equals(label.toLowerCase(Locale.ROOT))) {
|
||||
fail("Label '" + label + "' should be lowercase");
|
||||
} else if (invalidPattern.matcher(label).matches()) {
|
||||
fail("Label '" + label + "' has whitespace");
|
||||
|
||||
@@ -17,6 +17,7 @@ import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
@@ -129,7 +130,7 @@ public class ConverterCommandTest {
|
||||
setBukkitServiceToRunTaskAsynchronously(bukkitService);
|
||||
|
||||
// when
|
||||
command.executeCommand(sender, Collections.singletonList(converterName.toUpperCase()));
|
||||
command.executeCommand(sender, Collections.singletonList(converterName.toUpperCase(Locale.ROOT)));
|
||||
|
||||
// then
|
||||
verify(converter).execute(sender);
|
||||
|
||||
+2
-1
@@ -12,6 +12,7 @@ import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
||||
import static com.google.common.collect.Sets.newHashSet;
|
||||
@@ -67,7 +68,7 @@ public class PurgeBannedPlayersCommandTest {
|
||||
private static Set<String> asLowerCaseSet(String... items) {
|
||||
Set<String> result = new HashSet<>(items.length);
|
||||
for (String item : items) {
|
||||
result.add(item.toLowerCase());
|
||||
result.add(item.toLowerCase(Locale.ROOT));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -11,6 +11,8 @@ import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import static fr.xephi.authme.service.BukkitServiceTestHelper.setBukkitServiceToRunTaskAsynchronously;
|
||||
import static fr.xephi.authme.service.BukkitServiceTestHelper.setBukkitServiceToRunTaskOptionallyAsync;
|
||||
import static java.util.Arrays.asList;
|
||||
@@ -71,7 +73,7 @@ public class PurgePlayerCommandTest {
|
||||
|
||||
// then
|
||||
verify(dataSource).isAuthAvailable(name);
|
||||
verify(purgeExecutor).executePurge(singletonList(player), singletonList(name.toLowerCase()));
|
||||
verify(purgeExecutor).executePurge(singletonList(player), singletonList(name.toLowerCase(Locale.ROOT)));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -87,6 +89,6 @@ public class PurgePlayerCommandTest {
|
||||
command.executeCommand(sender, asList(name, "force"));
|
||||
|
||||
// then
|
||||
verify(purgeExecutor).executePurge(singletonList(player), singletonList(name.toLowerCase()));
|
||||
verify(purgeExecutor).executePurge(singletonList(player), singletonList(name.toLowerCase(Locale.ROOT)));
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -21,6 +21,7 @@ import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Locale;
|
||||
|
||||
import static fr.xephi.authme.service.BukkitServiceTestHelper.setBukkitServiceToRunTaskOptionallyAsync;
|
||||
import static fr.xephi.authme.service.BukkitServiceTestHelper.setBukkitServiceToScheduleSyncTaskFromOptionallyAsyncTask;
|
||||
@@ -179,7 +180,7 @@ public class RegisterAdminCommandTest {
|
||||
|
||||
private void assertAuthHasInfo(PlayerAuth auth, String name, HashedPassword hashedPassword) {
|
||||
assertThat(auth.getRealName(), equalTo(name));
|
||||
assertThat(auth.getNickname(), equalTo(name.toLowerCase()));
|
||||
assertThat(auth.getNickname(), equalTo(name.toLowerCase(Locale.ROOT)));
|
||||
assertThat(auth.getPassword(), equalTo(hashedPassword));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@ import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
|
||||
import static com.google.common.base.Preconditions.checkArgument;
|
||||
import static java.util.Collections.emptyList;
|
||||
@@ -125,7 +126,7 @@ public class DebugCommandTest {
|
||||
|
||||
CommandSender sender = mock(CommandSender.class);
|
||||
given(permissionsManager.hasPermission(sender, section.getRequiredPermission())).willReturn(true);
|
||||
List<String> arguments = Arrays.asList(section.getName().toUpperCase(), "test", "toast");
|
||||
List<String> arguments = Arrays.asList(section.getName().toUpperCase(Locale.ROOT), "test", "toast");
|
||||
|
||||
// when
|
||||
command.executeCommand(sender, arguments);
|
||||
@@ -144,7 +145,7 @@ public class DebugCommandTest {
|
||||
|
||||
CommandSender sender = mock(CommandSender.class);
|
||||
given(permissionsManager.hasPermission(sender, section.getRequiredPermission())).willReturn(false);
|
||||
List<String> arguments = Arrays.asList(section.getName().toUpperCase(), "test");
|
||||
List<String> arguments = Arrays.asList(section.getName().toUpperCase(Locale.ROOT), "test");
|
||||
|
||||
// when
|
||||
command.executeCommand(sender, arguments);
|
||||
|
||||
@@ -22,6 +22,7 @@ import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Locale;
|
||||
|
||||
import static fr.xephi.authme.service.BukkitServiceTestHelper.setBukkitServiceToRunTaskAsynchronously;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
@@ -187,7 +188,7 @@ public class RecoverEmailCommandTest {
|
||||
setBukkitServiceToRunTaskAsynchronously(bukkitService);
|
||||
|
||||
// when
|
||||
command.executeCommand(sender, Collections.singletonList(email.toUpperCase()));
|
||||
command.executeCommand(sender, Collections.singletonList(email.toUpperCase(Locale.ROOT)));
|
||||
|
||||
// then
|
||||
verify(emailService).hasAllInformation();
|
||||
|
||||
@@ -23,6 +23,7 @@ import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static fr.xephi.authme.command.TestCommandsUtil.getCommandWithLabel;
|
||||
@@ -446,19 +447,19 @@ public class HelpProviderTest {
|
||||
given(helpMessagesService.buildLocalizedDescription(any(CommandDescription.class)))
|
||||
.willAnswer(new ReturnsArgumentAt(0));
|
||||
for (HelpMessage key : HelpMessage.values()) {
|
||||
String text = key.name().replace("_", " ").toLowerCase();
|
||||
String text = key.name().replace("_", " ").toLowerCase(Locale.ROOT);
|
||||
given(helpMessagesService.getMessage(key))
|
||||
.willReturn(text.substring(0, 1).toUpperCase() + text.substring(1));
|
||||
.willReturn(text.substring(0, 1).toUpperCase(Locale.ROOT) + text.substring(1));
|
||||
}
|
||||
for (DefaultPermission permission : DefaultPermission.values()) {
|
||||
String text = permission.name().replace("_", " ").toLowerCase();
|
||||
String text = permission.name().replace("_", " ").toLowerCase(Locale.ROOT);
|
||||
given(helpMessagesService.getMessage(permission))
|
||||
.willReturn(text.substring(0, 1).toUpperCase() + text.substring(1));
|
||||
.willReturn(text.substring(0, 1).toUpperCase(Locale.ROOT) + text.substring(1));
|
||||
}
|
||||
for (HelpSection section : HelpSection.values()) {
|
||||
String text = section.name().replace("_", " ").toLowerCase();
|
||||
String text = section.name().replace("_", " ").toLowerCase(Locale.ROOT);
|
||||
given(helpMessagesService.getMessage(section))
|
||||
.willReturn(text.substring(0, 1).toUpperCase() + text.substring(1));
|
||||
.willReturn(text.substring(0, 1).toUpperCase(Locale.ROOT) + text.substring(1));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -7,6 +7,8 @@ import fr.xephi.authme.util.expiring.TimedCounter;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Locale;
|
||||
|
||||
import static fr.xephi.authme.AuthMeMatchers.stringWithLength;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.hamcrest.Matchers.not;
|
||||
@@ -34,7 +36,7 @@ public class LoginCaptchaManagerTest {
|
||||
// then
|
||||
assertThat(manager.isCaptchaRequired(player), equalTo(false));
|
||||
manager.increaseLoginFailureCount(player);
|
||||
assertThat(manager.isCaptchaRequired(player.toUpperCase()), equalTo(true));
|
||||
assertThat(manager.isCaptchaRequired(player.toUpperCase(Locale.ROOT)), equalTo(true));
|
||||
assertThat(manager.isCaptchaRequired("otherPlayer"), equalTo(false));
|
||||
}
|
||||
|
||||
@@ -167,6 +169,6 @@ public class LoginCaptchaManagerTest {
|
||||
private static void assertHasCount(LoginCaptchaManager manager, String player, Integer count) {
|
||||
TimedCounter<String> playerCounts = ReflectionTestUtils
|
||||
.getFieldValue(LoginCaptchaManager.class, manager, "playerCounts");
|
||||
assertThat(playerCounts.get(player.toLowerCase()), equalTo(count));
|
||||
assertThat(playerCounts.get(player.toLowerCase(Locale.ROOT)), equalTo(count));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -27,6 +27,7 @@ import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
||||
import static com.google.common.collect.Sets.newHashSet;
|
||||
@@ -118,7 +119,7 @@ public class PasswordSecurityTest {
|
||||
HashedPassword password = new HashedPassword("$TEST$10$SOME_HASH", null);
|
||||
String playerName = "Tester";
|
||||
// Calls to EncryptionMethod are always with the lower-case version of the name
|
||||
String playerLowerCase = playerName.toLowerCase();
|
||||
String playerLowerCase = playerName.toLowerCase(Locale.ROOT);
|
||||
String clearTextPass = "myPassTest";
|
||||
|
||||
given(dataSource.getPassword(playerName)).willReturn(password);
|
||||
@@ -139,7 +140,7 @@ public class PasswordSecurityTest {
|
||||
// given
|
||||
HashedPassword password = new HashedPassword("$TEST$10$SOME_HASH", null);
|
||||
String playerName = "My_PLayer";
|
||||
String playerLowerCase = playerName.toLowerCase();
|
||||
String playerLowerCase = playerName.toLowerCase(Locale.ROOT);
|
||||
String clearTextPass = "passw0Rd1";
|
||||
|
||||
given(dataSource.getPassword(playerName)).willReturn(password);
|
||||
@@ -178,7 +179,7 @@ public class PasswordSecurityTest {
|
||||
HashedPassword password =
|
||||
new HashedPassword("$2y$10$2e6d2193f43501c926e25elvWlPmWczmrfrnbZV0dUZGITjYjnkkW");
|
||||
String playerName = "somePlayer";
|
||||
String playerLowerCase = playerName.toLowerCase();
|
||||
String playerLowerCase = playerName.toLowerCase(Locale.ROOT);
|
||||
String clearTextPass = "Test";
|
||||
// MD5 hash for "Test"
|
||||
HashedPassword newPassword = new HashedPassword("0cbc6611f5540bd0809a388dc95a615b");
|
||||
@@ -230,7 +231,7 @@ public class PasswordSecurityTest {
|
||||
// given
|
||||
String password = "MyP@ssword";
|
||||
String username = "theUserInTest";
|
||||
String usernameLowerCase = username.toLowerCase();
|
||||
String usernameLowerCase = username.toLowerCase(Locale.ROOT);
|
||||
HashedPassword hashedPassword = new HashedPassword("$T$est#Hash", "__someSalt__");
|
||||
given(method.computeHash(password, usernameLowerCase)).willReturn(hashedPassword);
|
||||
given(settings.getProperty(SecuritySettings.PASSWORD_HASH)).willReturn(HashAlgorithm.JOOMLA);
|
||||
|
||||
@@ -8,6 +8,7 @@ import org.junit.BeforeClass;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
@@ -154,13 +155,13 @@ public abstract class AbstractEncryptionMethodTest {
|
||||
method.comparePassword(password, hashedPassword, USERNAME));
|
||||
assumeThat(SKIP_LONG_TESTS, equalTo(false));
|
||||
|
||||
if (!password.equals(password.toLowerCase())) {
|
||||
if (!password.equals(password.toLowerCase(Locale.ROOT))) {
|
||||
assertFalse("Lower-case of '" + password + "' should not match generated hash '" + hash + "'",
|
||||
method.comparePassword(password.toLowerCase(), hashedPassword, USERNAME));
|
||||
method.comparePassword(password.toLowerCase(Locale.ROOT), hashedPassword, USERNAME));
|
||||
}
|
||||
if (!password.equals(password.toUpperCase())) {
|
||||
if (!password.equals(password.toUpperCase(Locale.ROOT))) {
|
||||
assertFalse("Upper-case of '" + password + "' should not match generated hash '" + hash + "'",
|
||||
method.comparePassword(password.toUpperCase(), hashedPassword, USERNAME));
|
||||
method.comparePassword(password.toUpperCase(Locale.ROOT), hashedPassword, USERNAME));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@ import org.mockito.Mock;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Locale;
|
||||
|
||||
import static fr.xephi.authme.AuthMeMatchers.equalToHash;
|
||||
import static org.hamcrest.Matchers.equalToIgnoringCase;
|
||||
@@ -118,7 +119,7 @@ public class MigrationServiceTest {
|
||||
private static void setSha256MockToUppercase(Sha256 sha256) {
|
||||
given(sha256.computeHash(anyString(), anyString())).willAnswer(invocation -> {
|
||||
String plainPassword = invocation.getArgument(0);
|
||||
return new HashedPassword(plainPassword.toUpperCase(), null);
|
||||
return new HashedPassword(plainPassword.toUpperCase(Locale.ROOT), null);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user