Search in sources :

Example 1 with LoginAttemptCriteria

use of io.gravitee.am.repository.management.api.search.LoginAttemptCriteria in project gravitee-access-management by gravitee-io.

the class LoginAttemptServiceTest method shouldCreateUser_accountLockFirstConnection.

@Test
public void shouldCreateUser_accountLockFirstConnection() {
    final LoginAttemptCriteria loginAttemptCriteria = new LoginAttemptCriteria.Builder().client("client-1").domain("domain-1").username("user-1").identityProvider("idp-1").build();
    final LoginAttempt loginAttempt = new LoginAttempt();
    loginAttempt.setAttempts(1);
    final AccountSettings accountSettings = new AccountSettings();
    accountSettings.setLoginAttemptsDetectionEnabled(true);
    accountSettings.setMaxLoginAttempts(1);
    accountSettings.setAccountBlockedDuration(24 * 60 * 60 * 1000);
    when(loginAttemptRepository.findByCriteria(loginAttemptCriteria)).thenReturn(Maybe.just(loginAttempt));
    when(loginAttemptRepository.update(loginAttempt)).thenReturn(Single.just(loginAttempt));
    TestObserver testObserver = loginAttemptService.loginFailed(loginAttemptCriteria, accountSettings).test();
    testObserver.awaitTerminalEvent();
    testObserver.assertNoErrors();
}
Also used : AccountSettings(io.gravitee.am.model.account.AccountSettings) LoginAttemptCriteria(io.gravitee.am.repository.management.api.search.LoginAttemptCriteria) LoginAttempt(io.gravitee.am.model.LoginAttempt) TestObserver(io.reactivex.observers.TestObserver) Test(org.junit.Test)

Example 2 with LoginAttemptCriteria

use of io.gravitee.am.repository.management.api.search.LoginAttemptCriteria in project gravitee-access-management by gravitee-io.

the class LoginAttemptServiceTest method shouldUpdateUser_accountLockAlreadyRegistered.

@Test
public void shouldUpdateUser_accountLockAlreadyRegistered() {
    final LoginAttemptCriteria loginAttemptCriteria = new LoginAttemptCriteria.Builder().client("client-1").domain("domain-1").username("user-1").identityProvider("idp-1").build();
    final LoginAttempt loginAttempt = new LoginAttempt();
    loginAttempt.setAttempts(1);
    final AccountSettings accountSettings = new AccountSettings();
    accountSettings.setLoginAttemptsDetectionEnabled(true);
    accountSettings.setMaxLoginAttempts(1);
    accountSettings.setAccountBlockedDuration(24 * 60 * 60 * 1000);
    when(loginAttemptRepository.findByCriteria(loginAttemptCriteria)).thenReturn(Maybe.just(loginAttempt));
    when(loginAttemptRepository.update(loginAttempt)).thenReturn(Single.just(loginAttempt));
    TestObserver testObserver = loginAttemptService.loginFailed(loginAttemptCriteria, accountSettings).test();
    testObserver.awaitTerminalEvent();
    testObserver.assertNoErrors();
}
Also used : AccountSettings(io.gravitee.am.model.account.AccountSettings) LoginAttemptCriteria(io.gravitee.am.repository.management.api.search.LoginAttemptCriteria) LoginAttempt(io.gravitee.am.model.LoginAttempt) TestObserver(io.reactivex.observers.TestObserver) Test(org.junit.Test)

Example 3 with LoginAttemptCriteria

use of io.gravitee.am.repository.management.api.search.LoginAttemptCriteria in project gravitee-access-management by gravitee-io.

the class UserAuthenticationManagerImpl method preAuthentication.

private Completable preAuthentication(Client client, String username, String source) {
    final AccountSettings accountSettings = AccountSettings.getInstance(domain, client);
    if (accountSettings != null && accountSettings.isLoginAttemptsDetectionEnabled()) {
        LoginAttemptCriteria criteria = new LoginAttemptCriteria.Builder().domain(domain.getId()).client(client.getId()).identityProvider(source).username(username).build();
        return loginAttemptService.checkAccount(criteria, accountSettings).map(Optional::of).defaultIfEmpty(Optional.empty()).flatMapCompletable(optLoginAttempt -> {
            if (optLoginAttempt.isPresent() && optLoginAttempt.get().isAccountLocked(accountSettings.getMaxLoginAttempts())) {
                Map<String, String> details = new HashMap<>();
                details.put("attempt_id", optLoginAttempt.get().getId());
                return Completable.error(new AccountLockedException("User " + username + " is locked", details));
            }
            return Completable.complete();
        });
    }
    return Completable.complete();
}
Also used : AccountSettings(io.gravitee.am.model.account.AccountSettings) Optional(java.util.Optional) HashMap(java.util.HashMap) LoginAttemptCriteria(io.gravitee.am.repository.management.api.search.LoginAttemptCriteria)

Example 4 with LoginAttemptCriteria

use of io.gravitee.am.repository.management.api.search.LoginAttemptCriteria in project gravitee-access-management by gravitee-io.

the class UserAuthenticationServiceImpl method lockAccount.

@Override
public Completable lockAccount(LoginAttemptCriteria criteria, AccountSettings accountSettings, Client client, User user) {
    if (user == null) {
        return Completable.complete();
    }
    // update user status
    user.setAccountNonLocked(false);
    user.setAccountLockedAt(new Date());
    user.setAccountLockedUntil(new Date(System.currentTimeMillis() + (accountSettings.getAccountBlockedDuration() * 1000)));
    return userService.update(user).flatMap(user1 -> {
        // send an email if option is enabled
        if (user1.getEmail() != null && accountSettings.isSendRecoverAccountEmail()) {
            new Thread(() -> emailService.send(Template.BLOCKED_ACCOUNT, user1, client)).start();
        }
        return Single.just(user);
    }).doOnSuccess(user1 -> auditService.report(AuditBuilder.builder(UserAuditBuilder.class).type(EventType.USER_LOCKED).domain(criteria.domain()).client(criteria.client()).principal(null).user(user1))).ignoreElement();
}
Also used : Claims(io.gravitee.am.common.oidc.idtoken.Claims) Client(io.gravitee.am.model.oidc.Client) Date(java.util.Date) Completable(io.reactivex.Completable) Authentication(io.gravitee.am.identityprovider.api.Authentication) Maybe(io.reactivex.Maybe) LoggerFactory(org.slf4j.LoggerFactory) IdentityProviderManager(io.gravitee.am.gateway.handler.common.auth.idp.IdentityProviderManager) Autowired(org.springframework.beans.factory.annotation.Autowired) HashMap(java.util.HashMap) EmailService(io.gravitee.am.gateway.handler.common.email.EmailService) AuditService(io.gravitee.am.service.AuditService) Single(io.reactivex.Single) DefaultUser(io.gravitee.am.identityprovider.api.DefaultUser) UserAuthenticationService(io.gravitee.am.gateway.handler.common.auth.user.UserAuthenticationService) Request(io.gravitee.gateway.api.Request) AuditBuilder(io.gravitee.am.service.reporter.builder.AuditBuilder) Map(java.util.Map) ReferenceType(io.gravitee.am.model.ReferenceType) User(io.gravitee.am.model.User) SimpleAuthenticationContext(io.gravitee.am.identityprovider.api.SimpleAuthenticationContext) StandardClaims(io.gravitee.am.common.oidc.StandardClaims) Logger(org.slf4j.Logger) AccountDisabledException(io.gravitee.am.common.exception.authentication.AccountDisabledException) Optional.ofNullable(java.util.Optional.ofNullable) Domain(io.gravitee.am.model.Domain) EventType(io.gravitee.am.common.audit.EventType) OIDC_PROVIDER_ID_ACCESS_TOKEN_KEY(io.gravitee.am.common.utils.ConstantKeys.OIDC_PROVIDER_ID_ACCESS_TOKEN_KEY) UserNotFoundException(io.gravitee.am.service.exception.UserNotFoundException) LoginAttemptCriteria(io.gravitee.am.repository.management.api.search.LoginAttemptCriteria) UserAuditBuilder(io.gravitee.am.service.reporter.builder.management.UserAuditBuilder) EndUserAuthentication(io.gravitee.am.gateway.handler.common.auth.user.EndUserAuthentication) UserService(io.gravitee.am.gateway.handler.common.user.UserService) Template(io.gravitee.am.model.Template) AccountLockedException(io.gravitee.am.common.exception.authentication.AccountLockedException) OIDC_PROVIDER_ID_TOKEN_KEY(io.gravitee.am.common.utils.ConstantKeys.OIDC_PROVIDER_ID_TOKEN_KEY) Parameters(io.gravitee.am.common.oauth2.Parameters) AccountSettings(io.gravitee.am.model.account.AccountSettings) Date(java.util.Date)

Example 5 with LoginAttemptCriteria

use of io.gravitee.am.repository.management.api.search.LoginAttemptCriteria in project gravitee-access-management by gravitee-io.

the class JdbcLoginAttemptRepository method delete.

@Override
public Completable delete(LoginAttemptCriteria criteria) {
    LOGGER.debug("delete({})", criteria);
    Criteria whereClause = buildWhereClause(criteria);
    if (!whereClause.isEmpty()) {
        return monoToCompletable(template.delete(JdbcLoginAttempt.class).matching(Query.query(whereClause)).all());
    }
    throw new RepositoryIllegalQueryException("Unable to delete from LoginAttempt without criteria");
}
Also used : RepositoryIllegalQueryException(io.gravitee.am.repository.jdbc.exceptions.RepositoryIllegalQueryException) LoginAttemptCriteria(io.gravitee.am.repository.management.api.search.LoginAttemptCriteria) Criteria(org.springframework.data.relational.core.query.Criteria) JdbcLoginAttempt(io.gravitee.am.repository.jdbc.management.api.model.JdbcLoginAttempt)

Aggregations

LoginAttemptCriteria (io.gravitee.am.repository.management.api.search.LoginAttemptCriteria)7 AccountSettings (io.gravitee.am.model.account.AccountSettings)5 EventType (io.gravitee.am.common.audit.EventType)2 StandardClaims (io.gravitee.am.common.oidc.StandardClaims)2 IdentityProviderManager (io.gravitee.am.gateway.handler.common.auth.idp.IdentityProviderManager)2 EmailService (io.gravitee.am.gateway.handler.common.email.EmailService)2 DefaultUser (io.gravitee.am.identityprovider.api.DefaultUser)2 Client (io.gravitee.am.model.oidc.Client)2 JdbcLoginAttempt (io.gravitee.am.repository.jdbc.management.api.model.JdbcLoginAttempt)2 AuditService (io.gravitee.am.service.AuditService)2 AuditBuilder (io.gravitee.am.service.reporter.builder.AuditBuilder)2 UserAuditBuilder (io.gravitee.am.service.reporter.builder.management.UserAuditBuilder)2 HashMap (java.util.HashMap)2 Optional.ofNullable (java.util.Optional.ofNullable)2 Autowired (org.springframework.beans.factory.annotation.Autowired)2 Criteria (org.springframework.data.relational.core.query.Criteria)2 Strings (com.google.common.base.Strings)1 AccountDisabledException (io.gravitee.am.common.exception.authentication.AccountDisabledException)1 AccountInactiveException (io.gravitee.am.common.exception.authentication.AccountInactiveException)1 AccountLockedException (io.gravitee.am.common.exception.authentication.AccountLockedException)1