#857 Create event for failed authentication
This commit is contained in:
parent
dbb8ea7f38
commit
d65556d893
45
src/main/java/fr/xephi/authme/events/FailedLoginEvent.java
Normal file
45
src/main/java/fr/xephi/authme/events/FailedLoginEvent.java
Normal file
@ -0,0 +1,45 @@
|
||||
package fr.xephi.authme.events;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
/**
|
||||
* Event fired when a player enters a wrong password.
|
||||
*/
|
||||
public class FailedLoginEvent extends CustomEvent {
|
||||
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
private final Player player;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param player The player
|
||||
*/
|
||||
public FailedLoginEvent(Player player, boolean isAsync) {
|
||||
super(isAsync);
|
||||
this.player = player;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The player entering a wrong password
|
||||
*/
|
||||
public Player getPlayer() {
|
||||
return player;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the list of handlers, equivalent to {@link #getHandlers()} and required by {@link Event}.
|
||||
*
|
||||
* @return The list of handlers
|
||||
*/
|
||||
public static HandlerList getHandlerList() {
|
||||
return handlers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public HandlerList getHandlers() {
|
||||
return handlers;
|
||||
}
|
||||
}
|
||||
@ -18,7 +18,6 @@ import fr.xephi.authme.service.PluginHookService;
|
||||
import fr.xephi.authme.service.ValidationService;
|
||||
import fr.xephi.authme.settings.commandconfig.CommandManager;
|
||||
import fr.xephi.authme.settings.properties.HooksSettings;
|
||||
import fr.xephi.authme.settings.properties.PluginSettings;
|
||||
import fr.xephi.authme.settings.properties.RegistrationSettings;
|
||||
import fr.xephi.authme.settings.properties.RestrictionSettings;
|
||||
import fr.xephi.authme.util.PlayerUtils;
|
||||
@ -115,9 +114,8 @@ public class AsynchronousJoin implements AsynchronousProcess {
|
||||
|
||||
// Protect inventory
|
||||
if (service.getProperty(PROTECT_INVENTORY_BEFORE_LOGIN)) {
|
||||
final boolean isAsync = service.getProperty(PluginSettings.USE_ASYNC_TASKS);
|
||||
ProtectInventoryEvent ev = new ProtectInventoryEvent(player, isAsync);
|
||||
bukkitService.callEvent(ev);
|
||||
ProtectInventoryEvent ev = bukkitService.createAndCallEvent(
|
||||
isAsync -> new ProtectInventoryEvent(player, isAsync));
|
||||
if (ev.isCancelled()) {
|
||||
player.updateInventory();
|
||||
ConsoleLogger.fine("ProtectInventoryEvent has been cancelled for " + player.getName() + "...");
|
||||
|
||||
@ -9,6 +9,7 @@ import fr.xephi.authme.data.auth.PlayerCache;
|
||||
import fr.xephi.authme.data.limbo.LimboService;
|
||||
import fr.xephi.authme.datasource.DataSource;
|
||||
import fr.xephi.authme.events.AuthMeAsyncPreLoginEvent;
|
||||
import fr.xephi.authme.events.FailedLoginEvent;
|
||||
import fr.xephi.authme.mail.EmailService;
|
||||
import fr.xephi.authme.message.MessageKey;
|
||||
import fr.xephi.authme.permission.AdminPermission;
|
||||
@ -180,6 +181,8 @@ public class AsynchronousLogin implements AsynchronousProcess {
|
||||
*/
|
||||
private void handleWrongPassword(Player player, String ip) {
|
||||
ConsoleLogger.fine(player.getName() + " used the wrong password");
|
||||
|
||||
bukkitService.createAndCallEvent(isAsync -> new FailedLoginEvent(player, isAsync));
|
||||
if (tempbanManager.shouldTempban(ip)) {
|
||||
tempbanManager.tempbanPlayer(player);
|
||||
} else if (service.getProperty(RestrictionSettings.KICK_ON_WRONG_PASSWORD)) {
|
||||
|
||||
@ -25,6 +25,7 @@ import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.Set;
|
||||
import java.util.function.Function;
|
||||
|
||||
/**
|
||||
* Service for operations requiring the Bukkit API, such as for scheduling.
|
||||
@ -263,6 +264,20 @@ public class BukkitService implements SettingsDependent {
|
||||
Bukkit.getPluginManager().callEvent(event);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an event with the provided function and emits it.
|
||||
*
|
||||
* @param eventSupplier the event supplier: function taking a boolean specifying whether AuthMe is configured
|
||||
* in async mode or not
|
||||
* @param <E> the event type
|
||||
* @return the event that was created and emitted
|
||||
*/
|
||||
public <E extends Event> E createAndCallEvent(Function<Boolean, E> eventSupplier) {
|
||||
E event = eventSupplier.apply(useAsyncTasks);
|
||||
callEvent(event);
|
||||
return event;
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the world with the given name.
|
||||
*
|
||||
|
||||
@ -2,6 +2,7 @@ package fr.xephi.authme.service;
|
||||
|
||||
import fr.xephi.authme.AuthMe;
|
||||
import fr.xephi.authme.ReflectionTestUtils;
|
||||
import fr.xephi.authme.events.FailedLoginEvent;
|
||||
import fr.xephi.authme.settings.Settings;
|
||||
import fr.xephi.authme.settings.properties.PluginSettings;
|
||||
import org.bukkit.Bukkit;
|
||||
@ -9,6 +10,7 @@ import org.bukkit.Server;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.command.ConsoleCommandSender;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitScheduler;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
@ -48,11 +50,14 @@ public class BukkitServiceTest {
|
||||
private Server server;
|
||||
@Mock
|
||||
private BukkitScheduler scheduler;
|
||||
@Mock
|
||||
private PluginManager pluginManager;
|
||||
|
||||
@Before
|
||||
public void constructBukkitService() {
|
||||
ReflectionTestUtils.setField(Bukkit.class, null, "server", server);
|
||||
given(server.getScheduler()).willReturn(scheduler);
|
||||
given(server.getPluginManager()).willReturn(pluginManager);
|
||||
given(settings.getProperty(PluginSettings.USE_ASYNC_TASKS)).willReturn(true);
|
||||
bukkitService = new BukkitService(authMe, settings);
|
||||
}
|
||||
@ -297,6 +302,36 @@ public class BukkitServiceTest {
|
||||
verify(server).broadcastMessage(message);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldCreateAndEmitSyncEvent() {
|
||||
// given
|
||||
given(settings.getProperty(PluginSettings.USE_ASYNC_TASKS)).willReturn(false);
|
||||
bukkitService.reload(settings);
|
||||
Player player = mock(Player.class);
|
||||
|
||||
// when
|
||||
FailedLoginEvent event = bukkitService.createAndCallEvent(isAsync -> new FailedLoginEvent(player, isAsync));
|
||||
|
||||
// then
|
||||
verify(pluginManager).callEvent(event);
|
||||
assertThat(event.isAsynchronous(), equalTo(false));
|
||||
assertThat(event.getPlayer(), equalTo(player));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void shouldCreateAndEmitAsyncEvent() {
|
||||
// given
|
||||
Player player = mock(Player.class);
|
||||
|
||||
// when
|
||||
FailedLoginEvent event = bukkitService.createAndCallEvent(isAsync -> new FailedLoginEvent(player, isAsync));
|
||||
|
||||
// then
|
||||
verify(pluginManager).callEvent(event);
|
||||
assertThat(event.isAsynchronous(), equalTo(true));
|
||||
assertThat(event.getPlayer(), equalTo(player));
|
||||
}
|
||||
|
||||
// Note: This method is used through reflections
|
||||
public static Player[] onlinePlayersImpl() {
|
||||
return new Player[]{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user