#437 Email uniqueness in admin command; finalization

- Check also in admin command that email is not already used
- Misc bug fixing (logic errors, changes lost during large merge)
- Use "email" and "setemail" as main labels for /authme subcommands
This commit is contained in:
ljacqu 2016-02-06 21:56:08 +01:00
parent b4b679d3b9
commit 2cd2b48a1a
6 changed files with 15 additions and 22 deletions

View File

@ -133,7 +133,7 @@ public final class CommandInitializer {
// Register the getemail command // Register the getemail command
CommandDescription.builder() CommandDescription.builder()
.parent(AUTHME_BASE) .parent(AUTHME_BASE)
.labels("getemail", "getmail", "email", "mail") .labels("email", "mail", "getemail", "getmail")
.description("Display player's email") .description("Display player's email")
.detailedDescription("Display the email address of the specified player if set.") .detailedDescription("Display the email address of the specified player if set.")
.withArgument("player", "Player name", true) .withArgument("player", "Player name", true)
@ -144,7 +144,7 @@ public final class CommandInitializer {
// Register the setemail command // Register the setemail command
CommandDescription.builder() CommandDescription.builder()
.parent(AUTHME_BASE) .parent(AUTHME_BASE)
.labels("chgemail", "chgmail", "setemail", "setmail") .labels("setemail", "setmail", "chgemail", "chgmail")
.description("Change player's email") .description("Change player's email")
.detailedDescription("Change the email address of the specified player.") .detailedDescription("Change the email address of the specified player.")
.withArgument("player", "Player name", false) .withArgument("player", "Player name", false)

View File

@ -33,6 +33,9 @@ public class SetEmailCommand implements ExecutableCommand {
if (auth == null) { if (auth == null) {
commandService.send(sender, MessageKey.UNKNOWN_USER); commandService.send(sender, MessageKey.UNKNOWN_USER);
return; return;
} else if (commandService.getDataSource().isEmailStored(playerEmail)) {
commandService.send(sender, MessageKey.EMAIL_ALREADY_USED_ERROR);
return;
} }
// Set the email address // Set the email address

View File

@ -2,6 +2,7 @@ package fr.xephi.authme.process;
import fr.xephi.authme.AuthMe; import fr.xephi.authme.AuthMe;
import fr.xephi.authme.cache.auth.PlayerCache; import fr.xephi.authme.cache.auth.PlayerCache;
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;
import fr.xephi.authme.process.login.AsynchronousLogin; import fr.xephi.authme.process.login.AsynchronousLogin;
@ -99,7 +100,8 @@ public class Management {
sched.runTaskAsynchronously(plugin, new Runnable() { sched.runTaskAsynchronously(plugin, new Runnable() {
@Override @Override
public void run() { public void run() {
new AsyncChangeEmail(player, plugin, null, newEmail, plugin.getDataSource(), PlayerCache.getInstance(), settings).process(); new AsyncAddEmail(player, plugin, newEmail, plugin.getDataSource(),
PlayerCache.getInstance(), settings).process();
} }
}); });
} }

View File

@ -8,7 +8,6 @@ import fr.xephi.authme.output.MessageKey;
import fr.xephi.authme.output.Messages; import fr.xephi.authme.output.Messages;
import fr.xephi.authme.settings.NewSetting; import fr.xephi.authme.settings.NewSetting;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.util.StringUtils;
import fr.xephi.authme.util.Utils; import fr.xephi.authme.util.Utils;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -24,7 +23,7 @@ public class AsyncAddEmail {
private final PlayerCache playerCache; private final PlayerCache playerCache;
private final NewSetting settings; private final NewSetting settings;
public AsyncAddEmail(AuthMe plugin, Player player, String email, DataSource dataSource, public AsyncAddEmail(Player player, AuthMe plugin, String email, DataSource dataSource,
PlayerCache playerCache, NewSetting settings) { PlayerCache playerCache, NewSetting settings) {
this.messages = plugin.getMessages(); this.messages = plugin.getMessages();
this.player = player; this.player = player;
@ -39,11 +38,11 @@ public class AsyncAddEmail {
if (playerCache.isAuthenticated(playerName)) { if (playerCache.isAuthenticated(playerName)) {
PlayerAuth auth = playerCache.getAuth(playerName); PlayerAuth auth = playerCache.getAuth(playerName);
String currentEmail = auth.getEmail(); final String currentEmail = auth.getEmail();
if (currentEmail != null && !"your@mail.com".equals(currentEmail)) { if (currentEmail != null && !"your@email.com".equals(currentEmail)) {
messages.send(player, MessageKey.USAGE_CHANGE_EMAIL); messages.send(player, MessageKey.USAGE_CHANGE_EMAIL);
} else if (isEmailInvalid(email)) { } else if (!Utils.isEmailCorrect(email, settings)) {
messages.send(player, MessageKey.INVALID_EMAIL); messages.send(player, MessageKey.INVALID_EMAIL);
} else if (dataSource.isEmailStored(email)) { } else if (dataSource.isEmailStored(email)) {
messages.send(player, MessageKey.EMAIL_ALREADY_USED_ERROR); messages.send(player, MessageKey.EMAIL_ALREADY_USED_ERROR);
@ -57,11 +56,6 @@ public class AsyncAddEmail {
} }
} }
private boolean isEmailInvalid(String email) {
return StringUtils.isEmpty(email) || "your@email.com".equals(email)
|| !Utils.isEmailCorrect(email, settings);
}
private void sendUnloggedMessage(DataSource dataSource) { private void sendUnloggedMessage(DataSource dataSource) {
if (dataSource.isAuthAvailable(player.getName())) { if (dataSource.isAuthAvailable(player.getName())) {
messages.send(player, MessageKey.LOGIN_MESSAGE); messages.send(player, MessageKey.LOGIN_MESSAGE);

View File

@ -8,7 +8,6 @@ import fr.xephi.authme.output.MessageKey;
import fr.xephi.authme.output.Messages; import fr.xephi.authme.output.Messages;
import fr.xephi.authme.settings.NewSetting; import fr.xephi.authme.settings.NewSetting;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.util.StringUtils;
import fr.xephi.authme.util.Utils; import fr.xephi.authme.util.Utils;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -40,11 +39,11 @@ public class AsyncChangeEmail {
String playerName = player.getName().toLowerCase(); String playerName = player.getName().toLowerCase();
if (playerCache.isAuthenticated(playerName)) { if (playerCache.isAuthenticated(playerName)) {
PlayerAuth auth = playerCache.getAuth(playerName); PlayerAuth auth = playerCache.getAuth(playerName);
String currentEmail = auth.getEmail(); final String currentEmail = auth.getEmail();
if (currentEmail == null) { if (currentEmail == null) {
m.send(player, MessageKey.USAGE_ADD_EMAIL); m.send(player, MessageKey.USAGE_ADD_EMAIL);
} else if (isEmailInvalid(newEmail)) { } else if (newEmail == null || !Utils.isEmailCorrect(newEmail, settings)) {
m.send(player, MessageKey.INVALID_NEW_EMAIL); m.send(player, MessageKey.INVALID_NEW_EMAIL);
} else if (!oldEmail.equals(currentEmail)) { } else if (!oldEmail.equals(currentEmail)) {
m.send(player, MessageKey.INVALID_OLD_EMAIL); m.send(player, MessageKey.INVALID_OLD_EMAIL);
@ -58,11 +57,6 @@ public class AsyncChangeEmail {
} }
} }
private boolean isEmailInvalid(String email) {
return StringUtils.isEmpty(email) || "your@email.com".equals(email)
|| !Utils.isEmailCorrect(email, settings);
}
private void saveNewEmail(PlayerAuth auth) { private void saveNewEmail(PlayerAuth auth) {
auth.setEmail(newEmail); auth.setEmail(newEmail);
if (dataSource.updateEmail(auth)) { if (dataSource.updateEmail(auth)) {

View File

@ -187,7 +187,7 @@ public class AsyncAddEmailTest {
dataSource = mock(DataSource.class); dataSource = mock(DataSource.class);
playerCache = mock(PlayerCache.class); playerCache = mock(PlayerCache.class);
settings = mock(NewSetting.class); settings = mock(NewSetting.class);
return new AsyncAddEmail(authMe, player, email, dataSource, playerCache, settings); return new AsyncAddEmail(player, authMe, email, dataSource, playerCache, settings);
} }
} }