Search in sources :

Example 1 with AuthMeAsyncPreLoginEvent

use of fr.xephi.authme.events.AuthMeAsyncPreLoginEvent in project AuthMeReloaded by AuthMe.

the class AsynchronousLogin method getPlayerAuth.

/**
     * Checks the precondition for authentication (like user known) and returns
     * the player's {@link PlayerAuth} object.
     *
     * @param player the player to check
     * @return the PlayerAuth object, or {@code null} if the player doesn't exist or may not log in
     *         (e.g. because he is already logged in)
     */
private PlayerAuth getPlayerAuth(Player player) {
    final String name = player.getName().toLowerCase();
    if (playerCache.isAuthenticated(name)) {
        service.send(player, MessageKey.ALREADY_LOGGED_IN_ERROR);
        return null;
    }
    PlayerAuth auth = dataSource.getAuth(name);
    if (auth == null) {
        service.send(player, MessageKey.UNKNOWN_USER);
        // Recreate the message task to immediately send the message again as response
        limboService.resetMessageTask(player, false);
        return null;
    }
    if (!service.getProperty(DatabaseSettings.MYSQL_COL_GROUP).isEmpty() && auth.getGroupId() == service.getProperty(HooksSettings.NON_ACTIVATED_USERS_GROUP)) {
        service.send(player, MessageKey.ACCOUNT_NOT_ACTIVATED);
        return null;
    }
    final String ip = PlayerUtils.getPlayerIp(player);
    if (hasReachedMaxLoggedInPlayersForIp(player, ip)) {
        service.send(player, MessageKey.ALREADY_LOGGED_IN_ERROR);
        return null;
    }
    boolean isAsync = service.getProperty(PluginSettings.USE_ASYNC_TASKS);
    AuthMeAsyncPreLoginEvent event = new AuthMeAsyncPreLoginEvent(player, isAsync);
    bukkitService.callEvent(event);
    if (!event.canLogin()) {
        return null;
    }
    return auth;
}
Also used : AuthMeAsyncPreLoginEvent(fr.xephi.authme.events.AuthMeAsyncPreLoginEvent) PlayerAuth(fr.xephi.authme.data.auth.PlayerAuth)

Example 2 with AuthMeAsyncPreLoginEvent

use of fr.xephi.authme.events.AuthMeAsyncPreLoginEvent in project AuthMeReloaded by AuthMe.

the class AsynchronousLoginTest method shouldNotForceLoginForCanceledEvent.

@Test
public void shouldNotForceLoginForCanceledEvent() {
    // given
    String name = "oscar";
    String ip = "1.1.1.245";
    Player player = mockPlayer(name);
    TestHelper.mockPlayerIp(player, ip);
    given(playerCache.isAuthenticated(name)).willReturn(false);
    PlayerAuth auth = PlayerAuth.builder().name(name).build();
    given(dataSource.getAuth(name)).willReturn(auth);
    given(commonService.getProperty(DatabaseSettings.MYSQL_COL_GROUP)).willReturn("");
    given(commonService.getProperty(PluginSettings.USE_ASYNC_TASKS)).willReturn(true);
    doReturn(false).when(asynchronousLogin).hasReachedMaxLoggedInPlayersForIp(any(Player.class), anyString());
    doAnswer((Answer<Void>) invocation -> {
        ((AuthMeAsyncPreLoginEvent) invocation.getArgument(0)).setCanLogin(false);
        return null;
    }).when(bukkitService).callEvent(any(AuthMeAsyncPreLoginEvent.class));
    // when
    asynchronousLogin.forceLogin(player);
    // then
    verify(playerCache, only()).isAuthenticated(name);
    verify(dataSource, only()).getAuth(name);
    verify(asynchronousLogin).hasReachedMaxLoggedInPlayersForIp(player, ip);
}
Also used : ArgumentMatchers.any(org.mockito.ArgumentMatchers.any) Arrays(java.util.Arrays) BeforeClass(org.junit.BeforeClass) Mock(org.mockito.Mock) RunWith(org.junit.runner.RunWith) Player(org.bukkit.entity.Player) RestrictionSettings(fr.xephi.authme.settings.properties.RestrictionSettings) Mockito.verifyNoInteractions(org.mockito.Mockito.verifyNoInteractions) Assert.assertThat(org.junit.Assert.assertThat) Answer(org.mockito.stubbing.Answer) CommonService(fr.xephi.authme.service.CommonService) PlayerAuth(fr.xephi.authme.data.auth.PlayerAuth) BDDMockito.given(org.mockito.BDDMockito.given) VerificationModeFactory.only(org.mockito.internal.verification.VerificationModeFactory.only) DataSource(fr.xephi.authme.datasource.DataSource) Spy(org.mockito.Spy) Mockito.doAnswer(org.mockito.Mockito.doAnswer) TestHelper(fr.xephi.authme.TestHelper) PluginSettings(fr.xephi.authme.settings.properties.PluginSettings) Mockito.doReturn(org.mockito.Mockito.doReturn) PlayerStatePermission(fr.xephi.authme.permission.PlayerStatePermission) InjectMocks(org.mockito.InjectMocks) LimboService(fr.xephi.authme.data.limbo.LimboService) BukkitService(fr.xephi.authme.service.BukkitService) DatabaseSettings(fr.xephi.authme.settings.properties.DatabaseSettings) Test(org.junit.Test) MessageKey(fr.xephi.authme.message.MessageKey) Mockito.verify(org.mockito.Mockito.verify) List(java.util.List) AuthMeAsyncPreLoginEvent(fr.xephi.authme.events.AuthMeAsyncPreLoginEvent) Matchers.equalTo(org.hamcrest.Matchers.equalTo) HooksSettings(fr.xephi.authme.settings.properties.HooksSettings) PlayerCache(fr.xephi.authme.data.auth.PlayerCache) MockitoJUnitRunner(org.mockito.junit.MockitoJUnitRunner) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) Mockito.mock(org.mockito.Mockito.mock) Player(org.bukkit.entity.Player) AuthMeAsyncPreLoginEvent(fr.xephi.authme.events.AuthMeAsyncPreLoginEvent) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) PlayerAuth(fr.xephi.authme.data.auth.PlayerAuth) Test(org.junit.Test)

Example 3 with AuthMeAsyncPreLoginEvent

use of fr.xephi.authme.events.AuthMeAsyncPreLoginEvent in project AuthMeReloaded by AuthMe.

the class AsynchronousLogin method getPlayerAuth.

/**
 * Checks the precondition for authentication (like user known) and returns
 * the player's {@link PlayerAuth} object.
 *
 * @param player the player to check
 * @param quiet don't send messages
 * @return the PlayerAuth object, or {@code null} if the player doesn't exist or may not log in
 *         (e.g. because he is already logged in)
 */
private PlayerAuth getPlayerAuth(Player player, boolean quiet) {
    final String name = player.getName().toLowerCase();
    if (playerCache.isAuthenticated(name)) {
        if (!quiet) {
            service.send(player, MessageKey.ALREADY_LOGGED_IN_ERROR);
        }
        return null;
    }
    PlayerAuth auth = dataSource.getAuth(name);
    if (auth == null) {
        if (!quiet) {
            service.send(player, MessageKey.UNKNOWN_USER);
        }
        // Recreate the message task to immediately send the message again as response
        limboService.resetMessageTask(player, LimboMessageType.REGISTER);
        return null;
    }
    if (!service.getProperty(DatabaseSettings.MYSQL_COL_GROUP).isEmpty() && auth.getGroupId() == service.getProperty(HooksSettings.NON_ACTIVATED_USERS_GROUP)) {
        if (!quiet) {
            service.send(player, MessageKey.ACCOUNT_NOT_ACTIVATED);
        }
        return null;
    }
    final String ip = PlayerUtils.getPlayerIp(player);
    if (hasReachedMaxLoggedInPlayersForIp(player, ip)) {
        if (!quiet) {
            service.send(player, MessageKey.ALREADY_LOGGED_IN_ERROR);
        }
        return null;
    }
    boolean isAsync = service.getProperty(PluginSettings.USE_ASYNC_TASKS);
    AuthMeAsyncPreLoginEvent event = new AuthMeAsyncPreLoginEvent(player, isAsync);
    bukkitService.callEvent(event);
    if (!event.canLogin()) {
        return null;
    }
    return auth;
}
Also used : AuthMeAsyncPreLoginEvent(fr.xephi.authme.events.AuthMeAsyncPreLoginEvent) PlayerAuth(fr.xephi.authme.data.auth.PlayerAuth)

Aggregations

PlayerAuth (fr.xephi.authme.data.auth.PlayerAuth)3 AuthMeAsyncPreLoginEvent (fr.xephi.authme.events.AuthMeAsyncPreLoginEvent)3 TestHelper (fr.xephi.authme.TestHelper)1 PlayerCache (fr.xephi.authme.data.auth.PlayerCache)1 LimboService (fr.xephi.authme.data.limbo.LimboService)1 DataSource (fr.xephi.authme.datasource.DataSource)1 MessageKey (fr.xephi.authme.message.MessageKey)1 PlayerStatePermission (fr.xephi.authme.permission.PlayerStatePermission)1 BukkitService (fr.xephi.authme.service.BukkitService)1 CommonService (fr.xephi.authme.service.CommonService)1 DatabaseSettings (fr.xephi.authme.settings.properties.DatabaseSettings)1 HooksSettings (fr.xephi.authme.settings.properties.HooksSettings)1 PluginSettings (fr.xephi.authme.settings.properties.PluginSettings)1 RestrictionSettings (fr.xephi.authme.settings.properties.RestrictionSettings)1 Arrays (java.util.Arrays)1 List (java.util.List)1 Player (org.bukkit.entity.Player)1 Matchers.equalTo (org.hamcrest.Matchers.equalTo)1 Assert.assertThat (org.junit.Assert.assertThat)1 BeforeClass (org.junit.BeforeClass)1