Skip to content

Commit

Permalink
[Major] Refactored UserSession to a record
Browse files Browse the repository at this point in the history
  • Loading branch information
eitch committed Oct 21, 2024
1 parent 6927076 commit 449bdbb
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 83 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ public UserSession getSession(Certificate certificate, String source, String ses
for (Certificate cert : certificateMap.values()) {
if (cert.getSessionId().equals(sessionId)) {
ctx.validateAction(new SimpleRestrictable(PRIVILEGE_GET_SESSION, cert));
return new UserSession(cert);
return UserSession.valueOf(cert);
}
}

Expand All @@ -368,7 +368,7 @@ public List<UserSession> getSessions(Certificate certificate, String source) {
for (Certificate cert : certificateMap.values()) {
try {
ctx.validateAction(new SimpleRestrictable(PRIVILEGE_GET_SESSION, cert));
sessions.add(new UserSession(cert));
sessions.add(UserSession.valueOf(cert));
} catch (AccessDeniedException e) {
// no, user may not get this session
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,66 +24,15 @@
import java.util.Locale;
import java.util.Set;

public class UserSession {

private final boolean keepAlive;
private final String sessionId;
private final ZonedDateTime loginTime;
private final String username;
private final String firstName;
private final String lastName;
private final String source;
private final Set<String> userRoles;
private final Locale locale;
private final ZonedDateTime lastAccess;

public UserSession(Certificate certificate) {
this.sessionId = certificate.getSessionId();
this.loginTime = certificate.getLoginTime();
this.username = certificate.getUsername();
this.firstName = certificate.getFirstname();
this.lastName = certificate.getLastname();
this.source = certificate.getSource();
this.userRoles = certificate.getUserRoles();
this.locale = certificate.getLocale();
this.keepAlive = certificate.isKeepAlive();
this.lastAccess = certificate.getLastAccess();
}

public Locale getLocale() {
return locale;
}

public ZonedDateTime getLastAccess() {
return lastAccess;
}

public String getSessionId() {
return sessionId;
}

public ZonedDateTime getLoginTime() {
return loginTime;
}

public String getUsername() {
return username;
}

public String getFirstname() {
return firstName;
}

public String getLastname() {
return lastName;
}

public String getSource() {
return this.source;
}

public Set<String> getUserRoles() {
return userRoles;
public record UserSession(boolean keepAlive, String sessionId, ZonedDateTime loginTime, String username,
String firstName, String lastName, String source, Set<String> userRoles, Locale locale,
ZonedDateTime lastAccess) {

public static UserSession valueOf(Certificate certificate) {
return new UserSession(certificate.isKeepAlive(), certificate.getSessionId(), certificate.getLoginTime(),
certificate.getUsername(), certificate.getFirstname(), certificate.getLastname(),
certificate.getSource(), certificate.getUserRoles(), certificate.getLocale(),
certificate.getLastAccess());
}

public JsonObject toJson() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,37 +15,37 @@
*/
package li.strolch.rest.endpoint;

import static java.util.Comparator.comparing;
import static li.strolch.rest.helper.RestfulHelper.toJson;
import static li.strolch.runtime.StrolchConstants.StrolchPrivilegeConstants.PRIVILEGE_GET_SESSION;
import static li.strolch.search.SearchBuilder.buildSimpleValueSearch;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.Context;
import jakarta.ws.rs.core.MediaType;
import jakarta.ws.rs.core.Response;
import java.text.MessageFormat;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonObject;
import li.strolch.persistence.api.StrolchTransaction;
import li.strolch.privilege.model.Certificate;
import li.strolch.rest.RestfulStrolchComponent;
import li.strolch.rest.StrolchRestfulConstants;
import li.strolch.runtime.sessions.StrolchSessionHandler;
import li.strolch.rest.helper.ResponseUtil;
import li.strolch.rest.model.QueryData;
import li.strolch.runtime.sessions.StrolchSessionHandler;
import li.strolch.runtime.sessions.UserSession;
import li.strolch.search.SearchResult;
import li.strolch.search.ValueSearch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.text.MessageFormat;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;

import static java.util.Comparator.comparing;
import static li.strolch.rest.helper.RestfulHelper.toJson;
import static li.strolch.runtime.StrolchConstants.StrolchPrivilegeConstants.PRIVILEGE_GET_SESSION;
import static li.strolch.search.SearchBuilder.buildSimpleValueSearch;

@Path("strolch/sessions")
public class UserSessionsResource {

Expand All @@ -71,13 +71,8 @@ public Response querySessions(@Context HttpServletRequest request, @BeanParam Qu
List<UserSession> sessions = sessionHandler.getSessions(cert, source);

SearchResult<UserSession> result = buildSimpleValueSearch(new ValueSearch<UserSession>(), query,
Arrays.asList( //
UserSession::getUsername, //
UserSession::getFirstname, //
UserSession::getLastname, //
UserSession::getUserRoles)) //
.search(sessions) //
.orderBy(comparing(UserSession::getUsername));
Arrays.asList(UserSession::username, UserSession::firstName, UserSession::lastName,
UserSession::userRoles)).search(sessions).orderBy(comparing(UserSession::username));

JsonObject root = toJson(queryData, sessions.size(), result, UserSession::toJson);
Gson gson = new GsonBuilder().setPrettyPrinting().create();
Expand Down

0 comments on commit 449bdbb

Please sign in to comment.