@Override public void removeOfflineClientSession(RealmModel realm, String clientSessionId) { ClientSessionModel clientSession = getOfflineClientSession(realm, clientSessionId); removeClientSession(realm, clientSession, true); }
@Override public List<UserSessionModel> getOfflineUserSessions(RealmModel realm, ClientModel client, int first, int max) { return getUserSessions(realm, client, first, max, true); }
@Override public long getActiveUserSessions(RealmModel realm, ClientModel client) { return getUserSessionsCount(realm, client, false); }
@Override public void onRealmRemoved(RealmModel realm) { removeUserSessions(realm, true); removeUserSessions(realm, false); removeAllUserLoginFailures(realm); }
protected List<UserSessionModel> getUserSessions(RealmModel realm, ClientModel client, int firstResult, int maxResults, boolean offline) { Cache<String, SessionEntity> cache = getCache(offline); UserSessionEntity userSessionEntity = (UserSessionEntity) cache.get(e.getKey()); if (userSessionEntity != null) { userSessions.add(wrap(realm, userSessionEntity, offline));
protected void removeUserSessions(RealmModel realm, UserModel user, boolean offline) { Cache<String, SessionEntity> cache = getCache(offline); Map<String, String> sessions = new MapReduceTask(cache) .mappedWith(UserSessionMapper.create(realm.getId()).user(user.getId()).emitKey()) .reducedWith(new FirstResultReducer()) .execute(); for (String id : sessions.keySet()) { removeUserSession(realm, id, offline); } }
protected void removeClientSession(RealmModel realm, ClientSessionModel clientSession, boolean offline) { Cache<String, SessionEntity> cache = getCache(offline); UserSessionModel userSession = clientSession.getUserSession(); if (userSession != null) { UserSessionEntity entity = ((UserSessionAdapter) userSession).getEntity(); if (entity.getClientSessions() != null) { entity.getClientSessions().remove(clientSession.getId()); } tx.replace(cache, entity.getId(), entity); } tx.remove(cache, clientSession.getId()); }
@Override public void removeOfflineUserSession(RealmModel realm, String userSessionId) { removeUserSession(realm, userSessionId, true); }
@Override public void removeUserSessions(RealmModel realm, UserModel user) { removeUserSessions(realm, user, false); }
@Override public void removeClientSession(RealmModel realm, ClientSessionModel clientSession) { removeClientSession(realm, clientSession, false); }
@Override public void onClientRemoved(RealmModel realm, ClientModel client) { onClientRemoved(realm, client, true); onClientRemoved(realm, client, false); }
@Override public UserSessionProvider create(KeycloakSession session) { if (!compatMode) { InfinispanConnectionProvider connections = session.getProvider(InfinispanConnectionProvider.class); Cache<String, SessionEntity> cache = connections.getCache(InfinispanConnectionProvider.SESSION_CACHE_NAME); Cache<String, SessionEntity> offlineSessionsCache = connections.getCache(InfinispanConnectionProvider.OFFLINE_SESSION_CACHE_NAME); Cache<LoginFailureKey, LoginFailureEntity> loginFailures = connections.getCache(InfinispanConnectionProvider.LOGIN_FAILURE_CACHE_NAME); return isStreamMode() ? new InfinispanUserSessionProvider(session, cache, offlineSessionsCache, loginFailures) : new CompatInfinispanUserSessionProvider(session, cache, offlineSessionsCache, loginFailures); } else { return compatProviderFactory.create(session); } }
private void onClientRemoved(RealmModel realm, ClientModel client, boolean offline) { Cache<String, SessionEntity> cache = getCache(offline); Map<String, ClientSessionEntity> map = new MapReduceTask(cache) .mappedWith(ClientSessionMapper.create(realm.getId()).client(client.getId())) .reducedWith(new FirstResultReducer()) .execute(); for (Map.Entry<String, ClientSessionEntity> entry : map.entrySet()) { // detach from userSession ClientSessionAdapter adapter = wrap(realm, entry.getValue(), offline); adapter.setUserSession(null); tx.remove(cache, entry.getKey()); } }
protected void removeUserSessions(RealmModel realm, boolean offline) { Cache<String, SessionEntity> cache = getCache(offline); Map<String, String> ids = new MapReduceTask(cache) .mappedWith(SessionMapper.create(realm.getId()).emitKey()) .reducedWith(new FirstResultReducer()) .execute(); for (String id : ids.keySet()) { cache.remove(id); } }
protected void removeUserSession(RealmModel realm, String userSessionId) { removeUserSession(realm, userSessionId, false); }
@Override public void removeUserSessions(RealmModel realm) { removeUserSessions(realm, false); }
protected long getUserSessionsCount(RealmModel realm, ClientModel client, boolean offline) { Cache<String, SessionEntity> cache = getCache(offline); Map map = new MapReduceTask(cache) .mappedWith(ClientSessionMapper.create(realm.getId()).client(client.getId()).emitUserSessionAndTimestamp()) .reducedWith(new LargestResultReducer()).execute(); return map.size(); }
@Override public void removeUserSession(RealmModel realm, UserSessionModel session) { removeUserSession(realm, session.getId()); }
@Override public void onUserRemoved(RealmModel realm, UserModel user) { removeUserSessions(realm, user, true); removeUserSessions(realm, user, false); loginFailureCache.remove(new LoginFailureKey(realm.getId(), user.getUsername())); loginFailureCache.remove(new LoginFailureKey(realm.getId(), user.getEmail())); }
@Override public List<UserSessionModel> getUserSessions(RealmModel realm, ClientModel client) { return getUserSessions(realm, client, -1, -1); }