Change password task to async process
- Perform async change password task just like other async processes: via Management - Remove legacy setting - Remove now unused service getter (#736)
This commit is contained in:
parent
15886fb517
commit
ac484345a2
@ -736,15 +736,6 @@ public class AuthMe extends JavaPlugin {
|
|||||||
// Service getters (deprecated)
|
// Service getters (deprecated)
|
||||||
// Use @Inject fields instead
|
// Use @Inject fields instead
|
||||||
// -------------
|
// -------------
|
||||||
/**
|
|
||||||
* @return Plugin's messages.
|
|
||||||
* @deprecated should be used in API classes only (temporarily)
|
|
||||||
*/
|
|
||||||
@Deprecated
|
|
||||||
public Messages getMessages() {
|
|
||||||
return messages;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return NewSetting
|
* @return NewSetting
|
||||||
* @deprecated should be used in API classes only (temporarily)
|
* @deprecated should be used in API classes only (temporarily)
|
||||||
|
|||||||
@ -1,13 +1,10 @@
|
|||||||
package fr.xephi.authme.command.executable.changepassword;
|
package fr.xephi.authme.command.executable.changepassword;
|
||||||
|
|
||||||
import fr.xephi.authme.AuthMe;
|
|
||||||
import fr.xephi.authme.cache.auth.PlayerCache;
|
import fr.xephi.authme.cache.auth.PlayerCache;
|
||||||
import fr.xephi.authme.command.CommandService;
|
import fr.xephi.authme.command.CommandService;
|
||||||
import fr.xephi.authme.command.PlayerCommand;
|
import fr.xephi.authme.command.PlayerCommand;
|
||||||
import fr.xephi.authme.output.MessageKey;
|
import fr.xephi.authme.output.MessageKey;
|
||||||
import fr.xephi.authme.security.PasswordSecurity;
|
import fr.xephi.authme.process.Management;
|
||||||
import fr.xephi.authme.task.ChangePasswordTask;
|
|
||||||
import fr.xephi.authme.util.BukkitService;
|
|
||||||
import fr.xephi.authme.util.ValidationService;
|
import fr.xephi.authme.util.ValidationService;
|
||||||
import fr.xephi.authme.util.ValidationService.ValidationResult;
|
import fr.xephi.authme.util.ValidationService.ValidationResult;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -26,15 +23,11 @@ public class ChangePasswordCommand extends PlayerCommand {
|
|||||||
@Inject
|
@Inject
|
||||||
private PlayerCache playerCache;
|
private PlayerCache playerCache;
|
||||||
|
|
||||||
@Inject
|
|
||||||
private BukkitService bukkitService;
|
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private ValidationService validationService;
|
private ValidationService validationService;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
// TODO ljacqu 20160531: Remove this once change password task runs as a process (via Management)
|
private Management management;
|
||||||
private PasswordSecurity passwordSecurity;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void runCommand(Player player, List<String> arguments) {
|
public void runCommand(Player player, List<String> arguments) {
|
||||||
@ -54,9 +47,7 @@ public class ChangePasswordCommand extends PlayerCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
AuthMe plugin = AuthMe.getInstance();
|
|
||||||
// TODO ljacqu 20160117: Call async task via Management
|
// TODO ljacqu 20160117: Call async task via Management
|
||||||
bukkitService.runTaskAsynchronously(
|
management.performPasswordChange(player, oldPassword, newPassword);
|
||||||
new ChangePasswordTask(plugin, player, oldPassword, newPassword, passwordSecurity));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package fr.xephi.authme.process;
|
package fr.xephi.authme.process;
|
||||||
|
|
||||||
|
import fr.xephi.authme.process.changepassword.AsyncChangePassword;
|
||||||
import fr.xephi.authme.process.email.AsyncAddEmail;
|
import fr.xephi.authme.process.email.AsyncAddEmail;
|
||||||
import fr.xephi.authme.process.email.AsyncChangeEmail;
|
import fr.xephi.authme.process.email.AsyncChangeEmail;
|
||||||
import fr.xephi.authme.process.join.AsynchronousJoin;
|
import fr.xephi.authme.process.join.AsynchronousJoin;
|
||||||
@ -36,9 +37,12 @@ public class Management {
|
|||||||
private AsynchronousLogin asynchronousLogin;
|
private AsynchronousLogin asynchronousLogin;
|
||||||
@Inject
|
@Inject
|
||||||
private AsynchronousUnregister asynchronousUnregister;
|
private AsynchronousUnregister asynchronousUnregister;
|
||||||
|
@Inject
|
||||||
|
private AsyncChangePassword asyncChangePassword;
|
||||||
|
|
||||||
Management() { }
|
Management() { }
|
||||||
|
|
||||||
|
|
||||||
public void performLogin(final Player player, final String password, final boolean forceLogin) {
|
public void performLogin(final Player player, final String password, final boolean forceLogin) {
|
||||||
runTask(new Runnable() {
|
runTask(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
@ -111,6 +115,15 @@ public class Management {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void performPasswordChange(final Player player, final String oldPassword, final String newPassword) {
|
||||||
|
runTask(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
asyncChangePassword.changePassword(player, oldPassword, newPassword);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private void runTask(Runnable runnable) {
|
private void runTask(Runnable runnable) {
|
||||||
bukkitService.runTaskAsynchronously(runnable);
|
bukkitService.runTaskAsynchronously(runnable);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
package fr.xephi.authme.task;
|
package fr.xephi.authme.process.changepassword;
|
||||||
|
|
||||||
import com.google.common.io.ByteArrayDataOutput;
|
import com.google.common.io.ByteArrayDataOutput;
|
||||||
import com.google.common.io.ByteStreams;
|
import com.google.common.io.ByteStreams;
|
||||||
@ -6,52 +6,60 @@ import fr.xephi.authme.AuthMe;
|
|||||||
import fr.xephi.authme.ConsoleLogger;
|
import fr.xephi.authme.ConsoleLogger;
|
||||||
import fr.xephi.authme.cache.auth.PlayerAuth;
|
import fr.xephi.authme.cache.auth.PlayerAuth;
|
||||||
import fr.xephi.authme.cache.auth.PlayerCache;
|
import fr.xephi.authme.cache.auth.PlayerCache;
|
||||||
|
import fr.xephi.authme.datasource.DataSource;
|
||||||
import fr.xephi.authme.output.MessageKey;
|
import fr.xephi.authme.output.MessageKey;
|
||||||
import fr.xephi.authme.output.Messages;
|
import fr.xephi.authme.process.AsynchronousProcess;
|
||||||
|
import fr.xephi.authme.process.ProcessService;
|
||||||
import fr.xephi.authme.security.PasswordSecurity;
|
import fr.xephi.authme.security.PasswordSecurity;
|
||||||
import fr.xephi.authme.security.crypts.HashedPassword;
|
import fr.xephi.authme.security.crypts.HashedPassword;
|
||||||
import fr.xephi.authme.settings.Settings;
|
import fr.xephi.authme.settings.properties.HooksSettings;
|
||||||
|
import fr.xephi.authme.util.BukkitService;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public class ChangePasswordTask implements Runnable {
|
import javax.inject.Inject;
|
||||||
|
|
||||||
private final AuthMe plugin;
|
public class AsyncChangePassword implements AsynchronousProcess {
|
||||||
private final Player player;
|
|
||||||
private final String oldPassword;
|
|
||||||
private final String newPassword;
|
|
||||||
private final PasswordSecurity passwordSecurity;
|
|
||||||
|
|
||||||
public ChangePasswordTask(AuthMe plugin, Player player, String oldPassword, String newPassword,
|
@Inject
|
||||||
PasswordSecurity passwordSecurity) {
|
private AuthMe plugin;
|
||||||
this.plugin = plugin;
|
|
||||||
this.player = player;
|
|
||||||
this.oldPassword = oldPassword;
|
|
||||||
this.newPassword = newPassword;
|
|
||||||
this.passwordSecurity = passwordSecurity;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Inject
|
||||||
public void run() {
|
private DataSource dataSource;
|
||||||
Messages m = plugin.getMessages();
|
|
||||||
|
@Inject
|
||||||
|
private ProcessService processService;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private PasswordSecurity passwordSecurity;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private PlayerCache playerCache;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private BukkitService bukkitService;
|
||||||
|
|
||||||
|
AsyncChangePassword() { }
|
||||||
|
|
||||||
|
|
||||||
|
public void changePassword(final Player player, String oldPassword, String newPassword) {
|
||||||
final String name = player.getName().toLowerCase();
|
final String name = player.getName().toLowerCase();
|
||||||
PlayerAuth auth = PlayerCache.getInstance().getAuth(name);
|
PlayerAuth auth = playerCache.getAuth(name);
|
||||||
if (passwordSecurity.comparePassword(oldPassword, auth.getPassword(), player.getName())) {
|
if (passwordSecurity.comparePassword(oldPassword, auth.getPassword(), player.getName())) {
|
||||||
HashedPassword hashedPassword = passwordSecurity.computeHash(newPassword, name);
|
HashedPassword hashedPassword = passwordSecurity.computeHash(newPassword, name);
|
||||||
auth.setPassword(hashedPassword);
|
auth.setPassword(hashedPassword);
|
||||||
|
|
||||||
if (!plugin.getDataSource().updatePassword(auth)) {
|
if (!dataSource.updatePassword(auth)) {
|
||||||
m.send(player, MessageKey.ERROR);
|
processService.send(player, MessageKey.ERROR);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerCache.getInstance().updatePlayer(auth);
|
playerCache.updatePlayer(auth);
|
||||||
m.send(player, MessageKey.PASSWORD_CHANGED_SUCCESS);
|
processService.send(player, MessageKey.PASSWORD_CHANGED_SUCCESS);
|
||||||
ConsoleLogger.info(player.getName() + " changed his password");
|
ConsoleLogger.info(player.getName() + " changed his password");
|
||||||
if (Settings.bungee) {
|
if (processService.getProperty(HooksSettings.BUNGEECORD)) {
|
||||||
final String hash = hashedPassword.getHash();
|
final String hash = hashedPassword.getHash();
|
||||||
final String salt = hashedPassword.getSalt();
|
final String salt = hashedPassword.getSalt();
|
||||||
plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable(){
|
bukkitService.scheduleSyncDelayedTask(new Runnable() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
||||||
@ -64,7 +72,7 @@ public class ChangePasswordTask implements Runnable {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
m.send(player, MessageKey.WRONG_PASSWORD);
|
processService.send(player, MessageKey.WRONG_PASSWORD);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2,7 +2,6 @@ package fr.xephi.authme.settings;
|
|||||||
|
|
||||||
import fr.xephi.authme.AuthMe;
|
import fr.xephi.authme.AuthMe;
|
||||||
import fr.xephi.authme.settings.domain.Property;
|
import fr.xephi.authme.settings.domain.Property;
|
||||||
import fr.xephi.authme.settings.properties.HooksSettings;
|
|
||||||
import fr.xephi.authme.settings.properties.PluginSettings;
|
import fr.xephi.authme.settings.properties.PluginSettings;
|
||||||
import fr.xephi.authme.settings.properties.RegistrationSettings;
|
import fr.xephi.authme.settings.properties.RegistrationSettings;
|
||||||
import fr.xephi.authme.settings.properties.RestrictionSettings;
|
import fr.xephi.authme.settings.properties.RestrictionSettings;
|
||||||
@ -26,7 +25,6 @@ public final class Settings {
|
|||||||
public static boolean protectInventoryBeforeLogInEnabled;
|
public static boolean protectInventoryBeforeLogInEnabled;
|
||||||
public static boolean isStopEnabled;
|
public static boolean isStopEnabled;
|
||||||
public static boolean reloadSupport;
|
public static boolean reloadSupport;
|
||||||
public static boolean bungee;
|
|
||||||
public static boolean forceRegLogin;
|
public static boolean forceRegLogin;
|
||||||
public static boolean noTeleport;
|
public static boolean noTeleport;
|
||||||
public static boolean isRemoveSpeedEnabled;
|
public static boolean isRemoveSpeedEnabled;
|
||||||
@ -65,7 +63,6 @@ public final class Settings {
|
|||||||
protectInventoryBeforeLogInEnabled = load(RestrictionSettings.PROTECT_INVENTORY_BEFORE_LOGIN);
|
protectInventoryBeforeLogInEnabled = load(RestrictionSettings.PROTECT_INVENTORY_BEFORE_LOGIN);
|
||||||
isStopEnabled = configFile.getBoolean("Security.SQLProblem.stopServer", true);
|
isStopEnabled = configFile.getBoolean("Security.SQLProblem.stopServer", true);
|
||||||
reloadSupport = configFile.getBoolean("Security.ReloadCommand.useReloadCommandSupport", true);
|
reloadSupport = configFile.getBoolean("Security.ReloadCommand.useReloadCommandSupport", true);
|
||||||
bungee = load(HooksSettings.BUNGEECORD);
|
|
||||||
defaultWorld = configFile.getString("Purge.defaultWorld", "world");
|
defaultWorld = configFile.getString("Purge.defaultWorld", "world");
|
||||||
forceRegLogin = load(RegistrationSettings.FORCE_LOGIN_AFTER_REGISTER);
|
forceRegLogin = load(RegistrationSettings.FORCE_LOGIN_AFTER_REGISTER);
|
||||||
noTeleport = load(RestrictionSettings.NO_TELEPORT);
|
noTeleport = load(RestrictionSettings.NO_TELEPORT);
|
||||||
|
|||||||
@ -1,13 +1,11 @@
|
|||||||
package fr.xephi.authme.command.executable.changepassword;
|
package fr.xephi.authme.command.executable.changepassword;
|
||||||
|
|
||||||
import fr.xephi.authme.ReflectionTestUtils;
|
|
||||||
import fr.xephi.authme.cache.auth.PlayerCache;
|
import fr.xephi.authme.cache.auth.PlayerCache;
|
||||||
import fr.xephi.authme.command.CommandService;
|
import fr.xephi.authme.command.CommandService;
|
||||||
import fr.xephi.authme.output.MessageKey;
|
import fr.xephi.authme.output.MessageKey;
|
||||||
|
import fr.xephi.authme.process.Management;
|
||||||
import fr.xephi.authme.settings.properties.RestrictionSettings;
|
import fr.xephi.authme.settings.properties.RestrictionSettings;
|
||||||
import fr.xephi.authme.settings.properties.SecuritySettings;
|
import fr.xephi.authme.settings.properties.SecuritySettings;
|
||||||
import fr.xephi.authme.task.ChangePasswordTask;
|
|
||||||
import fr.xephi.authme.util.BukkitService;
|
|
||||||
import fr.xephi.authme.util.ValidationService;
|
import fr.xephi.authme.util.ValidationService;
|
||||||
import fr.xephi.authme.util.ValidationService.ValidationResult;
|
import fr.xephi.authme.util.ValidationService.ValidationResult;
|
||||||
import org.bukkit.command.BlockCommandSender;
|
import org.bukkit.command.BlockCommandSender;
|
||||||
@ -16,7 +14,6 @@ import org.bukkit.entity.Player;
|
|||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.ArgumentCaptor;
|
|
||||||
import org.mockito.InjectMocks;
|
import org.mockito.InjectMocks;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.runners.MockitoJUnitRunner;
|
import org.mockito.runners.MockitoJUnitRunner;
|
||||||
@ -26,8 +23,6 @@ import java.util.Arrays;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
||||||
import static org.hamcrest.Matchers.containsString;
|
import static org.hamcrest.Matchers.containsString;
|
||||||
import static org.hamcrest.Matchers.equalTo;
|
|
||||||
import static org.junit.Assert.assertThat;
|
|
||||||
import static org.mockito.BDDMockito.given;
|
import static org.mockito.BDDMockito.given;
|
||||||
import static org.mockito.Matchers.argThat;
|
import static org.mockito.Matchers.argThat;
|
||||||
import static org.mockito.Mockito.any;
|
import static org.mockito.Mockito.any;
|
||||||
@ -46,18 +41,18 @@ public class ChangePasswordCommandTest {
|
|||||||
@InjectMocks
|
@InjectMocks
|
||||||
private ChangePasswordCommand command;
|
private ChangePasswordCommand command;
|
||||||
|
|
||||||
@Mock
|
|
||||||
private PlayerCache playerCache;
|
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private CommandService commandService;
|
private CommandService commandService;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private BukkitService bukkitService;
|
private PlayerCache playerCache;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private ValidationService validationService;
|
private ValidationService validationService;
|
||||||
|
|
||||||
|
@Mock
|
||||||
|
private Management management;
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setSettings() {
|
public void setSettings() {
|
||||||
when(commandService.getProperty(SecuritySettings.MIN_PASSWORD_LENGTH)).thenReturn(2);
|
when(commandService.getProperty(SecuritySettings.MIN_PASSWORD_LENGTH)).thenReturn(2);
|
||||||
@ -110,20 +105,18 @@ public class ChangePasswordCommandTest {
|
|||||||
@Test
|
@Test
|
||||||
public void shouldForwardTheDataForValidPassword() {
|
public void shouldForwardTheDataForValidPassword() {
|
||||||
// given
|
// given
|
||||||
CommandSender sender = initPlayerWithName("parker", true);
|
String oldPass = "oldpass";
|
||||||
|
String newPass = "abc123";
|
||||||
|
Player player = initPlayerWithName("parker", true);
|
||||||
given(validationService.validatePassword("abc123", "parker")).willReturn(new ValidationResult());
|
given(validationService.validatePassword("abc123", "parker")).willReturn(new ValidationResult());
|
||||||
|
|
||||||
// when
|
// when
|
||||||
command.executeCommand(sender, Arrays.asList("abc123", "abc123"));
|
command.executeCommand(player, Arrays.asList(oldPass, newPass));
|
||||||
|
|
||||||
// then
|
// then
|
||||||
verify(validationService).validatePassword("abc123", "parker");
|
verify(validationService).validatePassword(newPass, "parker");
|
||||||
verify(commandService, never()).send(eq(sender), any(MessageKey.class));
|
verify(commandService, never()).send(eq(player), any(MessageKey.class));
|
||||||
ArgumentCaptor<ChangePasswordTask> taskCaptor = ArgumentCaptor.forClass(ChangePasswordTask.class);
|
verify(management).performPasswordChange(player, oldPass, newPass);
|
||||||
verify(bukkitService).runTaskAsynchronously(taskCaptor.capture());
|
|
||||||
ChangePasswordTask task = taskCaptor.getValue();
|
|
||||||
assertThat((String) ReflectionTestUtils.getFieldValue(ChangePasswordTask.class, task, "newPassword"),
|
|
||||||
equalTo("abc123"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Player initPlayerWithName(String name, boolean loggedIn) {
|
private Player initPlayerWithName(String name, boolean loggedIn) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user