+
+ Session and re-authentication policy for administrators.
+
+
+ {submitError ? (
+
+ {submitError}
+
+ ) : null}
+ {saveSucceeded ? (
+
+ Security settings saved.
+
+ ) : null}
+
+
+
+
{
+ const parsed = parsePositiveIntegerInput(event.target.value)
+ if (parsed === null) {
+ setDraft((prev) => ({ ...prev, idle_timeout_minutes: 0 }))
+ return
+ }
+ setDraft((prev) => ({ ...prev, idle_timeout_minutes: parsed }))
+ setSaveSucceeded(false)
+ }}
+ />
+
1–240 minutes (max 4 hours). Default 30.
+
+
+
+
+
{
+ const parsed = parsePositiveIntegerInput(event.target.value)
+ if (parsed === null) {
+ setDraft((prev) => ({ ...prev, session_lifetime_hours: 0 }))
+ return
+ }
+ setDraft((prev) => ({ ...prev, session_lifetime_hours: parsed }))
+ setSaveSucceeded(false)
+ }}
+ />
+
At least 1 hour. Default 24.
+
+
+
+
+
+ When enabled, users will be able to use authenticator apps (enrollment
+ comes later).
+
+
+
+
+
+
+
+
+
+
{
+ const raw = event.target.value
+ if (raw.trim() === '') {
+ setDraft((prev) => ({ ...prev, reauth_grace_minutes: 0 }))
+ return
+ }
+ const parsed = Number(raw)
+ if (!Number.isFinite(parsed) || !Number.isInteger(parsed)) {
+ return
+ }
+ setDraft((prev) => ({ ...prev, reauth_grace_minutes: parsed }))
+ setSaveSucceeded(false)
+ }}
+ />
+
+ Skip re-auth if done within this many minutes. 0 means re-auth for
+ every sensitive action. Default 15.
+
+
+
+
+
+
+ Service SSH keys and related credentials will also live here later —
+ add keys with a description and an expiry time limit or non-expiry.
+
+
+ )
+}
+
function ConfigTabPanelContent({
activeConfigTab,
draftThemePreference,
@@ -385,12 +673,7 @@ function ConfigTabPanelContent({
}
if (activeConfigTab === 'security') {
- return (
-
- Service SSH keys and related credentials will live here — add keys with
- a description and an expiry time limit or non-expiry.
-
- )
+ return