Refactor 2fa and add more messages when events are cancelled

This commit is contained in:
Spencer 2018-07-13 21:56:27 -04:00 committed by Alexander Meech
parent 8af04af8fd
commit f3c3ee806d
1 changed files with 60 additions and 36 deletions

View File

@ -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<TwoFactorData>
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<TwoFactorData>
{
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.<Void>complete((__, err) ->
{
if (err != null)
{
@ -145,7 +153,7 @@ public class TwoFactorAuth extends MiniClientPlugin<TwoFactorData>
{
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.<Void>complete((__, err) ->
{
if (err != null)
{
@ -218,7 +226,7 @@ public class TwoFactorAuth extends MiniClientPlugin<TwoFactorData>
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<TwoFactorData>
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.<Void>complete((v, throwable) ->
{
if (!player.isOnline())
{
@ -320,6 +328,47 @@ public class TwoFactorAuth extends MiniClientPlugin<TwoFactorData>
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 <T extends Cancellable> boolean handleCancelAuth(T event, Player player)
{
if (isAuthenticating(player))
{
sendTokenRequestIfReady(player);
event.setCancelled(true);
return true;
}
return false;
}
private <T extends PlayerEvent & Cancellable> boolean handleCancelAuth(T event)
{
return handleCancelAuth(event, event.getPlayer());
}
private <T extends InventoryEvent & Cancellable> 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<TwoFactorData>
@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<TwoFactorData>
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());
}