From e2e11a3b8e70ff5663f5dd2a4d010deb458e6f02 Mon Sep 17 00:00:00 2001 From: Ruchika Jha Date: Thu, 15 Jan 2026 16:46:50 +0000 Subject: [PATCH] Hide Remember Me session settings when Remember Me is disabled in realm settings edit page in UI Closes #44973 Signed-off-by: Ruchika Signed-off-by: Ruchika Jha Signed-off-by: Alexander Schwartz Co-authored-by: Alexander Schwartz --- .../topics/sessions/timeouts.adoc | 4 +- .../src/realm-settings/SessionsTab.tsx | 97 ++++++++++--------- .../test/realm-settings/session.spec.ts | 36 +++++-- .../admin-ui/test/realm-settings/sessions.ts | 40 ++++---- 4 files changed, 98 insertions(+), 79 deletions(-) diff --git a/docs/documentation/server_admin/topics/sessions/timeouts.adoc b/docs/documentation/server_admin/topics/sessions/timeouts.adoc index 45447cb6d90..31b630450ed 100644 --- a/docs/documentation/server_admin/topics/sessions/timeouts.adoc +++ b/docs/documentation/server_admin/topics/sessions/timeouts.adoc @@ -18,10 +18,10 @@ image:images/sessions-tab.png[Sessions Tab] |The maximum time before a user session expires. |SSO Session Idle Remember Me -|This setting is similar to the standard SSO Session Idle configuration but specific to logins with *Remember Me* enabled. Users can specify longer session idle timeouts when they click *Remember Me* when logging in. This setting is an optional configuration and, if its value is not greater than zero, it uses the same idle timeout as the SSO Session Idle configuration. +|This setting is only available when *Remember me* is enabled and is similar to the standard SSO Session Idle configuration. Users can specify longer session idle timeouts when they click *Remember Me* when logging in. This setting is an optional configuration and, if its value is not greater than zero, it uses the same idle timeout as the SSO Session Idle configuration. |SSO Session Max Remember Me -|This setting is similar to the standard SSO Session Max but specific to *Remember Me* logins. Users can specify longer sessions when they click *Remember Me* when logging in. This setting is an optional configuration and, if its value is not greater than zero, it uses the same session lifespan as the SSO Session Max configuration. +|This setting is only available when *Remember me* is enabled and is similar to the standard SSO Session Max. Users can specify longer sessions when they click *Remember Me* when logging in. This setting is an optional configuration and, if its value is not greater than zero, it uses the same session lifespan as the SSO Session Max configuration. |Client Session Idle |Idle timeout for the client session. If the user is inactive for longer than this timeout, the client session is invalidated and the refresh token requests bump the idle timeout. This setting never affects the general SSO user session, which is unique. Note the SSO user session is the parent of zero or more client sessions, one client session is created for every different client app the user logs in. This value should specify a shorter idle timeout than the *SSO Session Idle*. Users can override it for individual clients in the *Advanced Settings* client tab. This setting is an optional configuration and, when set to zero, uses the same idle timeout in the SSO Session Idle configuration. diff --git a/js/apps/admin-ui/src/realm-settings/SessionsTab.tsx b/js/apps/admin-ui/src/realm-settings/SessionsTab.tsx index f1268b88d47..117cbd95ba7 100644 --- a/js/apps/admin-ui/src/realm-settings/SessionsTab.tsx +++ b/js/apps/admin-ui/src/realm-settings/SessionsTab.tsx @@ -94,56 +94,59 @@ export const RealmSettingsSessionsTab = ({ )} /> - - - } - > - ( - + + } + > + ( + + )} /> - )} - /> - + - - } - > - ( - + } + > + ( + + )} /> - )} - /> - + + + )} { @@ -24,15 +25,36 @@ test.describe.serial("Sessions", () => { await login(page); await goToRealm(page, realmName); await goToRealmSettings(page); - await goToSessionsTab(page); }); - test("Add session data", async ({ page }) => { - await populateSessionsPage(page); + test("Add session data when Remember Me is disabled", async ({ page }) => { + //Disable Remember Me and save realm + await page.getByTestId("rs-login-tab").click(); + await page.getByLabel("Remember Me").uncheck(); + await goToSessionsTab(page); + // verify remember me fields are not visible + await expect( + page.getByTestId("sso-session-idle-remember-me-input"), + ).toHaveCount(0); + await expect( + page.getByTestId("sso-session-max-remember-me-input"), + ).toHaveCount(0); + await populateSessionsPageRememberMeDisabled(page); await clickSaveSessionsButton(page); await assertNotificationMessage(page, "Realm successfully updated"); - - await assertSsoSessionIdleInput(page, "1"); + await assertSsoSessionIdleInput(page, "5"); + await assertSsoSessionMaxInput(page, "2"); + }); + test("Add session data when Remember Me is enabled", async ({ page }) => { + //Enable Remember Me and save realm + await page.getByTestId("rs-login-tab").click(); + const rememberMeSwitch = page.locator('[for="kc-remember-me-switch"]'); + await rememberMeSwitch.click(); + await goToSessionsTab(page); + await populateSessionsPageRememberMeEnabled(page); + await clickSaveSessionsButton(page); + await assertNotificationMessage(page, "Realm successfully updated"); + await assertSsoSessionIdleInput(page, "5"); await assertSsoSessionMaxInput(page, "2"); await assertSsoSessionIdleRememberMe(page, "3"); await assertSsoSessionMaxRememberMe(page, "4"); diff --git a/js/apps/admin-ui/test/realm-settings/sessions.ts b/js/apps/admin-ui/test/realm-settings/sessions.ts index be06c01b29d..73ffd8903f2 100644 --- a/js/apps/admin-ui/test/realm-settings/sessions.ts +++ b/js/apps/admin-ui/test/realm-settings/sessions.ts @@ -1,5 +1,5 @@ -import { type Page, expect } from "@playwright/test"; -import { changeTimeUnit, switchOn } from "../utils/form.ts"; +import { expect, type Page } from "@playwright/test"; +import { changeTimeUnit } from "../utils/form.ts"; export async function goToSessionsTab(page: Page) { await page.getByTestId("rs-sessions-tab").click(); @@ -21,41 +21,35 @@ function getSsoSessionMaxRememberMe(page: Page) { return page.getByTestId("sso-session-max-remember-me-input"); } -export async function populateSessionsPage(page: Page) { - await getSsoSessionIdleInput(page).fill("1"); - await changeTimeUnit(page, "Minutes", "#kc-sso-session-idle-select-menu"); +export async function populateSessionsPageRememberMeDisabled(page: Page) { + await page.getByTestId("sso-session-idle-input").fill("5"); + await changeTimeUnit(page, "Hours", "#kc-sso-session-idle-select-menu"); - await getSsoSessionMaxInput(page).fill("2"); + await page.getByTestId("sso-session-max-input").fill("2"); await changeTimeUnit(page, "Hours", "#kc-sso-session-max-select-menu"); - await getSsoSessionIdleRememberMe(page).fill("3"); + await page.getByTestId("client-session-idle-input").fill("4"); + await changeTimeUnit(page, "Hours", "#kc-client-session-idle-select-menu"); + + await page.getByTestId("client-session-max-input").fill("1"); + await changeTimeUnit(page, "Hours", "#kc-client-session-max-select-menu"); +} + +export async function populateSessionsPageRememberMeEnabled(page: Page) { + await populateSessionsPageRememberMeDisabled(page); + await page.getByTestId("sso-session-idle-remember-me-input").fill("3"); await changeTimeUnit( page, "Days", "#kc-sso-session-idle-remember-me-select-menu", ); - await getSsoSessionMaxRememberMe(page).fill("4"); + await page.getByTestId("sso-session-max-remember-me-input").fill("4"); await changeTimeUnit( page, "Minutes", "#kc-sso-session-max-remember-me-select-menu", ); - - await page.getByTestId("client-session-idle-input").fill("1"); - await changeTimeUnit(page, "Minutes", "#kc-client-session-idle-select-menu"); - - await page.getByTestId("client-session-max-input").fill("2"); - await changeTimeUnit(page, "Hours", "#kc-client-session-max-select-menu"); - - await page.getByTestId("offline-session-idle-input").fill("7"); - await switchOn(page, "#kc-offline-session-max"); - - await page.getByTestId("login-timeout-input").fill("9"); - await changeTimeUnit(page, "Minutes", "#kc-login-timeout-select-menu"); - - await page.getByTestId("login-action-timeout-input").fill("10"); - await changeTimeUnit(page, "Days", "#kc-login-action-timeout-select-menu"); } export async function clickSaveSessionsButton(page: Page) {