Search in sources :

Example 1 with UserSessionUpdateTask

use of org.keycloak.models.sessions.infinispan.changes.UserSessionUpdateTask in project keycloak by keycloak.

the class UserSessionAdapter method restartSession.

@Override
public void restartSession(RealmModel realm, UserModel user, String loginUsername, String ipAddress, String authMethod, boolean rememberMe, String brokerSessionId, String brokerUserId) {
    UserSessionUpdateTask task = new UserSessionUpdateTask() {

        @Override
        public void runUpdate(UserSessionEntity entity) {
            provider.updateSessionEntity(entity, realm, user, loginUsername, ipAddress, authMethod, rememberMe, brokerSessionId, brokerUserId);
            entity.setState(null);
            entity.getNotes().clear();
            entity.getAuthenticatedClientSessions().clear();
        }
    };
    update(task);
}
Also used : UserSessionUpdateTask(org.keycloak.models.sessions.infinispan.changes.UserSessionUpdateTask) UserSessionEntity(org.keycloak.models.sessions.infinispan.entities.UserSessionEntity)

Example 2 with UserSessionUpdateTask

use of org.keycloak.models.sessions.infinispan.changes.UserSessionUpdateTask in project keycloak by keycloak.

the class UserSessionAdapter method removeNote.

@Override
public void removeNote(String name) {
    UserSessionUpdateTask task = new UserSessionUpdateTask() {

        @Override
        public void runUpdate(UserSessionEntity entity) {
            entity.getNotes().remove(name);
        }
    };
    update(task);
}
Also used : UserSessionUpdateTask(org.keycloak.models.sessions.infinispan.changes.UserSessionUpdateTask) UserSessionEntity(org.keycloak.models.sessions.infinispan.entities.UserSessionEntity)

Example 3 with UserSessionUpdateTask

use of org.keycloak.models.sessions.infinispan.changes.UserSessionUpdateTask in project keycloak by keycloak.

the class UserSessionAdapter method removeAuthenticatedClientSessions.

@Override
public void removeAuthenticatedClientSessions(Collection<String> removedClientUUIDS) {
    if (removedClientUUIDS == null || removedClientUUIDS.isEmpty()) {
        return;
    }
    // an invalid session is handled as nonexistent in UserSessionAdapter.getAuthenticatedClientSessions()
    if (removedClientUUIDS.size() >= MINIMUM_INACTIVE_CLIENT_SESSIONS_TO_CLEANUP) {
        // Update user session
        UserSessionUpdateTask task = new UserSessionUpdateTask() {

            @Override
            public void runUpdate(UserSessionEntity entity) {
                removedClientUUIDS.forEach(entity.getAuthenticatedClientSessions()::remove);
            }
        };
        update(task);
    }
    // do not iterate the removedClientUUIDS and remove the clientSession directly as the addTask can manipulate
    // the collection being iterated, and that can lead to unpredictable behaviour (e.g. NPE)
    List<UUID> clientSessionUuids = removedClientUUIDS.stream().map(entity.getAuthenticatedClientSessions()::get).filter(Objects::nonNull).collect(Collectors.toList());
    clientSessionUuids.forEach(clientSessionId -> this.clientSessionUpdateTx.addTask(clientSessionId, Tasks.removeSync()));
}
Also used : UserSessionUpdateTask(org.keycloak.models.sessions.infinispan.changes.UserSessionUpdateTask) UUID(java.util.UUID) UserSessionEntity(org.keycloak.models.sessions.infinispan.entities.UserSessionEntity)

Example 4 with UserSessionUpdateTask

use of org.keycloak.models.sessions.infinispan.changes.UserSessionUpdateTask in project keycloak by keycloak.

the class UserSessionAdapter method setLastSessionRefresh.

public void setLastSessionRefresh(int lastSessionRefresh) {
    if (offline) {
        // Received the message from the other DC that we should update the lastSessionRefresh in local cluster. Don't update DB in that case.
        // The other DC already did.
        Boolean ignoreRemoteCacheUpdate = (Boolean) session.getAttribute(CrossDCLastSessionRefreshListener.IGNORE_REMOTE_CACHE_UPDATE);
        if (ignoreRemoteCacheUpdate == null || !ignoreRemoteCacheUpdate) {
            provider.getPersisterLastSessionRefreshStore().putLastSessionRefresh(session, entity.getId(), realm.getId(), lastSessionRefresh);
        }
    }
    UserSessionUpdateTask task = new UserSessionUpdateTask() {

        @Override
        public void runUpdate(UserSessionEntity entity) {
            entity.setLastSessionRefresh(lastSessionRefresh);
        }

        @Override
        public CrossDCMessageStatus getCrossDCMessageStatus(SessionEntityWrapper<UserSessionEntity> sessionWrapper) {
            return new CrossDCLastSessionRefreshChecker(provider.getLastSessionRefreshStore(), provider.getOfflineLastSessionRefreshStore()).shouldSaveUserSessionToRemoteCache(UserSessionAdapter.this.session, UserSessionAdapter.this.realm, sessionWrapper, offline, lastSessionRefresh);
        }

        @Override
        public String toString() {
            return "setLastSessionRefresh(" + lastSessionRefresh + ')';
        }
    };
    update(task);
}
Also used : UserSessionUpdateTask(org.keycloak.models.sessions.infinispan.changes.UserSessionUpdateTask) SessionEntityWrapper(org.keycloak.models.sessions.infinispan.changes.SessionEntityWrapper) CrossDCLastSessionRefreshChecker(org.keycloak.models.sessions.infinispan.changes.sessions.CrossDCLastSessionRefreshChecker) UserSessionEntity(org.keycloak.models.sessions.infinispan.entities.UserSessionEntity)

Example 5 with UserSessionUpdateTask

use of org.keycloak.models.sessions.infinispan.changes.UserSessionUpdateTask in project keycloak by keycloak.

the class UserSessionAdapter method setState.

@Override
public void setState(State state) {
    UserSessionUpdateTask task = new UserSessionUpdateTask() {

        @Override
        public void runUpdate(UserSessionEntity entity) {
            entity.setState(state);
        }
    };
    update(task);
}
Also used : UserSessionUpdateTask(org.keycloak.models.sessions.infinispan.changes.UserSessionUpdateTask) UserSessionEntity(org.keycloak.models.sessions.infinispan.entities.UserSessionEntity)

Aggregations

UserSessionUpdateTask (org.keycloak.models.sessions.infinispan.changes.UserSessionUpdateTask)6 UserSessionEntity (org.keycloak.models.sessions.infinispan.entities.UserSessionEntity)6 UUID (java.util.UUID)1 SessionEntityWrapper (org.keycloak.models.sessions.infinispan.changes.SessionEntityWrapper)1 CrossDCLastSessionRefreshChecker (org.keycloak.models.sessions.infinispan.changes.sessions.CrossDCLastSessionRefreshChecker)1