Remediate the 2026-09-03 feature-test findings
This commit is contained in:
@@ -83,6 +83,12 @@
|
||||
<span v-if="result.location" class="result-location">{{ result.location }}</span>
|
||||
<span v-if="result.ticketnumber" class="result-ticket">{{ result.ticketnumber }}</span>
|
||||
<span v-if="result.iscurrent" class="badge badge-success">Active</span>
|
||||
<!-- Retired assets are searchable on purpose (the retire
|
||||
dialog promises they can be restored, and the search box
|
||||
is where somebody looks for one). They rank below live
|
||||
assets and say so, or a retired record looks like a
|
||||
current one. -->
|
||||
<span v-if="result.retired" class="badge badge-secondary">retired</span>
|
||||
</div>
|
||||
</div>
|
||||
<button
|
||||
|
||||
@@ -8,8 +8,10 @@
|
||||
<div class="setting-group">
|
||||
<h3>Audit Log Retention</h3>
|
||||
<p class="setting-description">
|
||||
Configure how long audit logs are retained. Older logs will be automatically purged.
|
||||
Set to 0 to keep logs indefinitely.
|
||||
How long audit entries are kept. 0 keeps everything forever, which is
|
||||
the default. Saving a period does NOT delete anything by itself:
|
||||
purge from Settings > Site & Facility, or run
|
||||
<code>flask audit purge --apply</code> on the server.
|
||||
</p>
|
||||
|
||||
<div class="setting-row">
|
||||
@@ -17,13 +19,13 @@
|
||||
<span>Retention Period (days)</span>
|
||||
<input
|
||||
type="number"
|
||||
v-model="settings.audit_retention_days"
|
||||
v-model="settings.audit_retentiondays"
|
||||
min="0"
|
||||
placeholder="90"
|
||||
@blur="saveSetting('audit_retention_days', settings.audit_retention_days)"
|
||||
placeholder="0"
|
||||
@blur="saveSetting('audit_retentiondays', settings.audit_retentiondays)"
|
||||
:disabled="saving"
|
||||
>
|
||||
<small class="input-hint">0 = keep forever, recommended: 90 days</small>
|
||||
<small class="input-hint">0 = keep forever</small>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -7,9 +7,16 @@
|
||||
<div class="section-card">
|
||||
<div class="setting-group">
|
||||
<h3>SAML Single Sign-On</h3>
|
||||
<p class="setting-notice">
|
||||
<strong>Not implemented yet.</strong> These settings are stored so a
|
||||
site can be configured ahead of the feature landing, but nothing
|
||||
consumes them today: there is no SAML login route, and no assertion
|
||||
is accepted. Sign-in is local accounts only, whatever is set here.
|
||||
</p>
|
||||
<p class="setting-description">
|
||||
Enable SAML SSO for enterprise authentication. Users can sign in using your organization's
|
||||
identity provider (Azure AD, Okta, etc.). Local login can remain enabled as a fallback.
|
||||
When it ships, users will sign in through your organization's identity
|
||||
provider (Azure AD, Okta, etc.), with local login available as a
|
||||
fallback.
|
||||
</p>
|
||||
|
||||
<div class="setting-row">
|
||||
@@ -82,19 +89,26 @@
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<!-- Locked on until SAML exists. A toggle that reads "Allow Local
|
||||
Login: off" while password login still works is the dangerous
|
||||
one on this page: an administrator can believe they have closed
|
||||
the local door, and nothing tells them otherwise. It is not a
|
||||
setting anyone can honour yet, so it does not accept a click. -->
|
||||
<div class="setting-row">
|
||||
<label class="toggle-label">
|
||||
<span>Allow Local Login</span>
|
||||
<button
|
||||
class="toggle-btn"
|
||||
:class="{ active: settings.saml_allow_local_login }"
|
||||
@click="toggleSetting('saml_allow_local_login')"
|
||||
:disabled="saving"
|
||||
class="toggle-btn active"
|
||||
disabled
|
||||
title="Local login cannot be turned off until SAML sign-in exists"
|
||||
>
|
||||
<span class="toggle-slider"></span>
|
||||
</button>
|
||||
</label>
|
||||
<small class="input-hint toggle-hint">Keep enabled for admin fallback access</small>
|
||||
<small class="input-hint toggle-hint">
|
||||
Always on for now. Local accounts are the only way in until SAML
|
||||
sign-in ships, so this cannot be turned off yet.
|
||||
</small>
|
||||
</div>
|
||||
|
||||
<div class="setting-row">
|
||||
@@ -148,15 +162,20 @@ const {
|
||||
// Per-page connection status (stays with the page, not the composable).
|
||||
const samlStatus = computed(() => {
|
||||
if (!settings.saml_enabled) return 'inactive'
|
||||
if (!settings.saml_idp_metadata_url || !settings.saml_entity_id) return 'warning'
|
||||
// 'pending' rather than a healthy state even when every field is filled in:
|
||||
// nothing is connected until the feature exists.
|
||||
return 'pending'
|
||||
})
|
||||
|
||||
// Never says "available". It used to report "Configured - SAML login
|
||||
// available" as soon as two fields held text, which is a claim about a feature
|
||||
// that does not exist: an administrator could reasonably read that as SSO
|
||||
// being live and stop issuing local accounts.
|
||||
const samlMessage = computed(() => {
|
||||
if (!settings.saml_enabled) return 'Disabled - using local authentication only'
|
||||
if (!settings.saml_idp_metadata_url) return 'IdP metadata URL not configured'
|
||||
if (!settings.saml_entity_id) return 'Entity ID not configured'
|
||||
return 'Configured - SAML login available'
|
||||
if (!settings.saml_enabled) return 'Off - local accounts only'
|
||||
if (!settings.saml_idp_metadata_url) return 'IdP metadata URL not set'
|
||||
if (!settings.saml_entity_id) return 'Entity ID not set'
|
||||
return 'Settings saved - waiting on SAML support, local accounts still in use'
|
||||
})
|
||||
|
||||
onMounted(loadSettings)
|
||||
|
||||
Reference in New Issue
Block a user