Coverage Summary for Class: SessionService (org.kitodo.production.services.security)
Class |
Class, %
|
Method, %
|
Line, %
|
SessionService |
0%
(0/1)
|
0%
(0/5)
|
0%
(0/36)
|
/*
* (c) Kitodo. Key to digital objects e. V. <contact@kitodo.org>
*
* This file is part of the Kitodo project.
*
* It is licensed under GNU General Public License version 3 or later.
*
* For the full copyright and license information, please read the
* GPL3-License.txt file that was distributed with this source code.
*/
package org.kitodo.production.services.security;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import org.kitodo.production.metadata.MetadataLock;
import org.kitodo.production.security.SecurityConfig;
import org.kitodo.production.security.SecuritySession;
import org.kitodo.production.security.SecurityUserDetails;
import org.springframework.security.core.session.SessionInformation;
import org.springframework.security.core.session.SessionRegistry;
import org.springframework.security.core.userdetails.UserDetails;
public class SessionService {
private static volatile SessionService instance = null;
private final SessionRegistry sessionRegistry;
/**
* Private constructor which is getting the SessionRegistry from the main SecurityConfig class.
*/
private SessionService() {
SecurityConfig securityConfig = SecurityConfig.getInstance();
this.sessionRegistry = securityConfig.getSessionRegistry();
}
/**
* Expires all active sessions of a spring security UserDetails object.
*
* @param user
* The UserDetails Object.
*/
public void expireSessionsOfUser(UserDetails user) {
MetadataLock.setAllUserLocksFree(user.getUsername());
List<SessionInformation> activeUserSessions = sessionRegistry.getAllSessions(user, false);
for (SessionInformation sessionInformation : activeUserSessions) {
sessionInformation.expireNow();
}
}
/**
* Gets all active sessions.
*
* @return The active sessions.
*/
public List<SecuritySession> getActiveSessions() {
List<Object> allPrincipals = sessionRegistry.getAllPrincipals();
List<SecuritySession> activeSessions = new ArrayList<>();
UserDetails user = null;
for (final Object principal : allPrincipals) {
if (principal instanceof SecurityUserDetails) {
user = (SecurityUserDetails) principal;
}
if (Objects.nonNull(user)) {
List<SessionInformation> activeSessionInformation = new ArrayList<>(sessionRegistry.getAllSessions(principal, false));
for (SessionInformation sessionInformation : activeSessionInformation) {
SecuritySession securitySession = new SecuritySession();
securitySession.setUserName(user.getUsername());
securitySession.setSessionId(sessionInformation.getSessionId());
securitySession.setLastRequest(sessionInformation.getLastRequest().toInstant()
.atZone(ZoneId.systemDefault()).toLocalDateTime());
activeSessions.add(securitySession);
}
}
}
return activeSessions;
}
/**
* Return singleton variable of type SessionService.
*
* @return unique instance of SessionService
*/
public static SessionService getInstance() {
SessionService localReference = instance;
if (Objects.isNull(localReference)) {
synchronized (SessionService.class) {
localReference = instance;
if (Objects.isNull(localReference)) {
localReference = new SessionService();
instance = localReference;
}
}
}
return localReference;
}
}