feature/secret-lifecycle #2

Merged
mhahl merged 35 commits from feature/secret-lifecycle into main 2026-08-07 08:53:58 +00:00
Owner
No description provided.
Archive prior ciphertext on update via trigger, surface history/rollback and
expiry/rotation hints in the UI, generate values client-side, and support
.env/CSV/JSON import plus plain or encrypted export per project.
Show the active team name in the sidebar, move bulk import and export out of
the main secrets form, use a single generate icon, flag token expiry, warn on
write tokens, and require two-step confirm for permanent purge.
Expose project-level membership UI, invite-by-link join requests with approval,
last-owner guard and ownership transfer, team settings (token default +
classification override), and membership/settings audit trail. Also declutter
secrets UI (import/export tab, wider shell) and drop rotate_days.
Drop the separate Members tab and active-team heading; keep a plain team
selector and put project membership under Settings for writers.
Remove the Project ID line from Settings and give each block its own section
for clearer separation.
Organize team detail into Projects, Members, Activity, and Settings tabs,
and show note plus revealable values on secret history (including prior
versions).
Validate team banner colors, audit bulk secret exports, check join-request
roles explicitly, preserve invite tokens across login, and replace the
broken override checkbox with an explicit classification mode control.
Reveal shows an editable value with Save for writers; team classification
uses the same color pickers, presets, and preview as server settings.
After save, hide the value again with an Updated status, and vertically
center all cells in the row while a secret is revealed or edited.
Carry page/search through create and delete partials, and add actor, action,
and date-range filters with human-readable audit summaries.
Search across teams, projects, and secrets; pin favorites and track recent
access in the sidebar; copy revealed values with a toast and optional
clipboard auto-clear.
Pin sits left of the secret key; toggling updates the Pinned sidebar list
via HTMX out-of-band swap.
Split server settings into General, Classification, Admins, and LDAP
tabs so each section stays focused; drop the unused sidebar search UI.
Introduce /profile with account, memberships, and activity, group
sidebar links into Workspace/Account details with a calmer theme,
restore the search field without a Search nav item, and persist open
section state in localStorage across navigations.
Render secret updated_at as “x time ago” with absolute UTC on hover
via Jinja time_ago/time_when filters.
Rewrite can_read_project and can_write_project so a project_members
row overrides the team default, add can_admin_project for membership
management, point pm_* RLS and member routes at it, rename team
read-only to viewer, and document the override rule.
Local password change/reset, multi-session revoke, and a server Email tab
for SMTP so resets and optional login alerts can be delivered.
ON DELETE CASCADE removes team_members after the team row is gone; skip the
last-owner check in that case so owners can delete teams.
Refuse cleartext ldap:// without StartTLS, cap secret/token expiry at
MAX_EXPIRY_DAYS, and set MAX_CONTENT_LENGTH plus bounded import reads.
Users can enroll authenticator apps on their profile; login challenges
with TOTP or one-time recovery codes. Global admins can be required to
enable 2FA via server settings.
Profile is split into Account/Security/Teams/Projects/Activity tabs.
Global admins can list users, disable accounts, issue password resets,
and clear 2FA from Server settings.
Allow editing secret expiry with presets; re-mask create form after
generate/save; team owners/admins cannot be demoted by project roles;
add History on team secrets list; user email autocomplete for member fields.
Keep the date field for manual expiry; drop 30d/90d/1y/Never shortcuts.
HTMX swaps the action control to Hide on reveal (and back on hide/save)
across project lists, team secrets, and history views.
Auto-hide reveals after 30s with clearer copy toasts; multi-select
delete/export and trash restore/purge; import create-vs-update preview;
project expiry dashboard; advanced typed secret create page.
Replace the inline bulk bar with a select-all count, action dropdown, and Apply button to reduce clutter on the secrets list.
Structured secrets open a same-window view with kind-aware editing (KV rows, cert/SSH PEM, database fields). Improve advanced create, toolbar layout, and trash bulk actions with search.
Generate copy-paste machine-token Secret and SecretStore manifests, with optional machine account creation. Keep the UI minimal without ExternalSecret key selection.
Global admins get an Auditing area for access-review exports, role-change org audit, and CSV/JSON audit export with configurable retention. Add flask purge-audit for cron/OpenShift CronJob and document setup.
Support OpenID Connect login (e.g. Keycloak) with group-to-role maps, configurable username claim, and profile auth-source display. Add server URL for ESO YAML and OIDC redirect checklist, plus configurable product branding.
Personal access tokens with profile JWT helper; fix OIDC CHECK constraints
and objects on init; require email_verified; stronger recovery codes and
fail-closed TOTP; JWT alg allowlist; discovery TTL; login_failures purge;
warn on client-secret decrypt fallback; allow http:// server URLs.
Checkbox defaults on; admins can disable when the IdP never asserts
email_verified but the email claim is still trusted.
Expand README and deploy notes for SSO, TOTP, audit purge, and http server
URLs. Add docs/api.md for app/ESO/PAT/PostgREST surfaces and a checked-in
PostgREST OpenAPI snapshot.
Standardize page heads, breadcrumbs, list panels, badges, secondary/danger
buttons, form actions, empty states, and nested card structure across templates.
mhahl merged commit 31ec76c98b into main 2026-08-07 08:53:58 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Sigaint/corvus!2
No description provided.