From f3c3ee806d94caf027245439327c5f3113f64f99 Mon Sep 17 00:00:00 2001 From: Spencer Date: Fri, 13 Jul 2018 21:56:27 -0400 Subject: [PATCH] Refactor 2fa and add more messages when events are cancelled --- .../core/twofactor/TwoFactorAuth.java | 96 ++++++++++++------- 1 file changed, 60 insertions(+), 36 deletions(-) diff --git a/Plugins/Mineplex.Core/src/mineplex/core/twofactor/TwoFactorAuth.java b/Plugins/Mineplex.Core/src/mineplex/core/twofactor/TwoFactorAuth.java index 91e86f390..14fb22ae7 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/twofactor/TwoFactorAuth.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/twofactor/TwoFactorAuth.java @@ -9,13 +9,16 @@ import java.util.UUID; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.entity.Player; +import org.bukkit.event.Cancellable; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; import org.bukkit.event.inventory.InventoryClickEvent; import org.bukkit.event.inventory.InventoryDragEvent; +import org.bukkit.event.inventory.InventoryEvent; import org.bukkit.event.player.AsyncPlayerChatEvent; import org.bukkit.event.player.PlayerCommandPreprocessEvent; import org.bukkit.event.player.PlayerDropItemEvent; +import org.bukkit.event.player.PlayerEvent; import org.bukkit.event.player.PlayerInteractEntityEvent; import org.bukkit.event.player.PlayerInteractEvent; import org.bukkit.event.player.PlayerItemHeldEvent; @@ -83,6 +86,11 @@ public class TwoFactorAuth extends MiniClientPlugin PermissionGroup.ADMIN.setPermission(Perm.RESET_2FA, true, true); } + private void sendTokenRequest(Player player) + { + player.sendMessage(F.main("2FA", "Please enter your two-factor auth code")); + } + @Override public void addCommands() { @@ -110,7 +118,7 @@ public class TwoFactorAuth extends MiniClientPlugin { new TwoFactorResetCommand(caller.getName(), caller.getUniqueId().toString(), caller.getName(), caller.getUniqueId().toString()).publish(); }); - _repository.deletePlayerData(_clientManager.getAccountId(caller)).whenComplete(BukkitFuture.complete((__, err) -> + _repository.deletePlayerData(_clientManager.getAccountId(caller)).whenComplete(BukkitFuture.complete((__, err) -> { if (err != null) { @@ -145,7 +153,7 @@ public class TwoFactorAuth extends MiniClientPlugin { new TwoFactorResetCommand(caller.getName(), caller.getUniqueId().toString(), client.getName(), client.getUniqueId() == null ? "null" : client.getUniqueId().toString()).publish(); }); - _repository.deletePlayerData(client.getAccountId()).whenComplete(BukkitFuture.complete((__, err) -> + _repository.deletePlayerData(client.getAccountId()).whenComplete(BukkitFuture.complete((__, err) -> { if (err != null) { @@ -218,7 +226,7 @@ public class TwoFactorAuth extends MiniClientPlugin if (data.getSecretKey().isPresent()) { // Hooray 2FA - player.sendMessage(F.main("2FA", "Please enter your two-factor auth code")); + sendTokenRequest(player); authenticating.add(player.getUniqueId()); } else @@ -295,7 +303,7 @@ public class TwoFactorAuth extends MiniClientPlugin Get(player).setSecretKey(secret); player.sendMessage(F.main("2FA", "Saving secret..")); - _repository.saveSecret(player, secret).whenComplete(BukkitFuture.complete((v, throwable) -> + _repository.saveSecret(player, secret).whenComplete(BukkitFuture.complete((v, throwable) -> { if (!player.isOnline()) { @@ -320,6 +328,47 @@ public class TwoFactorAuth extends MiniClientPlugin authenticating.remove(player.getUniqueId()); } + /** + * + * @param event - The event being called + * @param player - The player in question for this event + * @return Whether the player is currently authenticating and action had to be taken + */ + private boolean handleCancelAuth(T event, Player player) + { + if (isAuthenticating(player)) + { + sendTokenRequestIfReady(player); + event.setCancelled(true); + return true; + } + + return false; + } + + private boolean handleCancelAuth(T event) + { + return handleCancelAuth(event, event.getPlayer()); + } + + private boolean handleCancelAuth(T event) + { + return handleCancelAuth(event, (Player)event.getView().getPlayer()); + } + + private boolean canSendTokenRequest(Player player) + { + return Recharge.Instance.use(player, "two-factor message cooldown", 3000L, false, false); + } + + private void sendTokenRequestIfReady(Player player) + { + if (canSendTokenRequest(player)) + { + sendTokenRequest(player); + } + } + // Cancel relevant events @EventHandler(ignoreCancelled = true) @@ -335,61 +384,39 @@ public class TwoFactorAuth extends MiniClientPlugin @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onClick(InventoryClickEvent event) { - Player player = (Player) event.getWhoClicked(); - if (isAuthenticating(player)) - { - event.setCancelled(true); - } + handleCancelAuth(event); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onDrag(InventoryDragEvent event) { - Player player = (Player) event.getWhoClicked(); - if (isAuthenticating(player)) - { - event.setCancelled(true); - } + handleCancelAuth(event); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onDrop(PlayerDropItemEvent event) { - Player player = event.getPlayer(); - if (isAuthenticating(player)) - { - event.setCancelled(true); - } + handleCancelAuth(event); } @EventHandler(priority = EventPriority.LOWEST) public void onInteract(PlayerInteractEvent event) { - Player player = event.getPlayer(); - if (isAuthenticating(player)) - { - event.setCancelled(true); - } + handleCancelAuth(event); } @EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onInteractWithEntity(PlayerInteractEntityEvent event) { - Player player = event.getPlayer(); - if (isAuthenticating(player)) - { - event.setCancelled(true); - } + handleCancelAuth(event); } @EventHandler(priority = EventPriority.LOWEST) public void onCommand(PlayerCommandPreprocessEvent event) { - Player player = event.getPlayer(); - if (isAuthenticating(player)) + if (handleCancelAuth(event)) { event.setMessage("/"); - event.setCancelled(true); } } @@ -399,10 +426,7 @@ public class TwoFactorAuth extends MiniClientPlugin Player player = event.getPlayer(); if (isAuthenticating(player)) { - if (Recharge.Instance.use(player, "two-factor message cooldown", 3000L, false, false)) - { - player.sendMessage(F.main("2FA", "Please enter your two-factor auth code")); - } + sendTokenRequestIfReady(player); event.getTo().setX(event.getFrom().getX()); event.getTo().setZ(event.getFrom().getZ()); }