From a8212ed9e5f6d7931e9e858e755747446a78d991 Mon Sep 17 00:00:00 2001 From: Darin Kelkhoff Date: Mon, 15 Apr 2024 12:46:57 -0500 Subject: [PATCH] CE-1123 Add valuesForFrontend to session; pass them to frontend in manageSesssion javalin endpoint --- .../backend/core/model/session/QSession.java | 55 ++++++++++++++++++- .../javalin/QJavalinImplementation.java | 13 ++++- 2 files changed, 66 insertions(+), 2 deletions(-) diff --git a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/session/QSession.java b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/session/QSession.java index ac2e313a..0ff5c246 100644 --- a/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/session/QSession.java +++ b/qqq-backend-core/src/main/java/com/kingsrook/qqq/backend/core/model/session/QSession.java @@ -28,6 +28,7 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Objects; @@ -52,9 +53,16 @@ public class QSession implements Serializable private Map> securityKeyValues; private Map backendVariants; - // implementation-specific custom values + /////////////////////////////////////////// + // implementation-specific custom values // + /////////////////////////////////////////// private Map values; + ///////////////////////////////////////////// + // values meant to be passed to a frontend // + ///////////////////////////////////////////// + private Map valuesForFrontend; + public static final String VALUE_KEY_USER_TIMEZONE = "UserTimezone"; public static final String VALUE_KEY_USER_TIMEZONE_OFFSET_MINUTES = "UserTimezoneOffsetMinutes"; @@ -500,4 +508,49 @@ public class QSession implements Serializable return (this); } + + /******************************************************************************* + ** Getter for valuesForFrontend + *******************************************************************************/ + public Map getValuesForFrontend() + { + return (this.valuesForFrontend); + } + + + + /******************************************************************************* + ** Setter for valuesForFrontend + *******************************************************************************/ + public void setValuesForFrontend(Map valuesForFrontend) + { + this.valuesForFrontend = valuesForFrontend; + } + + + + /******************************************************************************* + ** Fluent setter for valuesForFrontend + *******************************************************************************/ + public QSession withValuesForFrontend(Map valuesForFrontend) + { + this.valuesForFrontend = valuesForFrontend; + return (this); + } + + + /******************************************************************************* + ** Fluent setter for a single valuesForFrontend + *******************************************************************************/ + public QSession withValueForFrontend(String key, Serializable value) + { + if(this.valuesForFrontend == null) + { + this.valuesForFrontend = new LinkedHashMap<>(); + } + this.valuesForFrontend.put(key, value); + return (this); + } + + } diff --git a/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java b/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java index 6b674b09..350694e2 100644 --- a/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java +++ b/qqq-middleware-javalin/src/main/java/com/kingsrook/qqq/backend/javalin/QJavalinImplementation.java @@ -33,6 +33,7 @@ import java.time.Instant; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; @@ -427,7 +428,17 @@ public class QJavalinImplementation QSession session = authenticationModule.createSession(qInstance, authContext); context.cookie(SESSION_UUID_COOKIE_NAME, session.getUuid(), SESSION_COOKIE_AGE); - context.result(JsonUtils.toJson(MapBuilder.of("uuid", session.getUuid()))); + + Map resultMap = new HashMap<>(); + resultMap.put("uuid", session.getUuid()); + + if(session.getValuesForFrontend() != null) + { + LinkedHashMap valuesForFrontend = new LinkedHashMap<>(session.getValuesForFrontend()); + resultMap.put("values", valuesForFrontend); + } + + context.result(JsonUtils.toJson(resultMap)); } catch(Exception e) {