This website requires JavaScript.
fce7245a51
ui(users): oidc chip on list + readonly fields on edit for OIDC users
steve
2026-05-05 13:42:57 +01:00
5154b24fab
ui: login page — SSO button + oidc_error banner
steve
2026-05-05 13:40:13 +01:00
1cf9cb752f
http: local-login rejects auth_source='oidc' users
steve
2026-05-05 13:37:07 +01:00
d2ffc98f3c
http: logout — 303 to end_session_endpoint with id_token_hint for OIDC sessions
steve
2026-05-05 13:34:47 +01:00
1fd9dce8a2
http: GET /auth/oidc/callback — JIT-provision, refresh, deny paths
steve
2026-05-05 13:30:00 +01:00
746324e65a
http: GET /auth/oidc/login — generate state/PKCE, redirect to IdP
steve
2026-05-05 13:26:06 +01:00
ede014e85b
oidc: test stub IdP + happy-path exchange test
steve
2026-05-05 13:23:16 +01:00
4594e563ef
oidc: client wrapper around go-oidc — discovery, exchange, claim parse
steve
2026-05-05 13:20:08 +01:00
db2fcdd52e
config: OIDCConfig — YAML + env overlay with defaults
steve
2026-05-05 13:18:01 +01:00
e2976a42e6
store: oidc_state CRUD + 5-minute cleanup
steve
2026-05-05 13:15:45 +01:00
14be63510c
store: round-trip IDToken on sessions for RP-initiated logout
steve
2026-05-05 13:14:27 +01:00
70aa22e87e
store: GetUserByOIDCSubject + scanUser auth_source/oidc_subject
steve
2026-05-05 13:12:11 +01:00
154b57a4cd
store: extend User with AuthSource/OIDCSubject; Session with IDToken
steve
2026-05-05 13:09:49 +01:00
c5b29b88b9
store: migration 0019 — users.auth_source/oidc_subject + sessions.id_token + oidc_state
steve
2026-05-05 13:08:15 +01:00
1df072a211
Merge pull request 'Phase 4 — P4-07: per-host tags + dashboard chip-row filter' (#15 ) from p4-07-host-tags into main
steve
2026-05-05 10:55:11 +00:00
2421d5d389
ui(tags): edit-button label, Save-tags width, persistent help text
steve
2026-05-05 11:23:36 +01:00
168059ae45
feat(hosts): per-host tags edit + dashboard chip-row filter (P4-07)
steve
2026-05-05 11:16:09 +01:00
c1426110e5
tasks: defer update delivery + observability to Phase 6
steve
2026-05-05 11:05:11 +01:00
3922cbece2
Merge pull request 'Phase 4 — P4-03/04: RBAC + user management' (#14 ) from p4-03-04-rbac-user-mgmt into main
steve
2026-05-05 10:01:43 +00:00
6295faad64
ui(users): banner explaining the disabled-username re-enable flow
steve
2026-05-05 10:43:11 +01:00
2d9e53b025
ui(users): record last_login on /setup + sortable headers
steve
2026-05-05 10:31:28 +01:00
0521a2169f
tasks: tick P4-03/04 + sweep notes
steve
2026-05-05 10:08:05 +01:00
c98eb19adb
alert: piggy-back expired-setup-token cleanup on the engine tick
steve
2026-05-05 10:04:31 +01:00
2dd8f3c3be
ui: /settings/account self-service password change
steve
2026-05-05 10:03:41 +01:00
2f3292aebf
ui: /settings/users edit form + disable/enable/regenerate/force-logout
steve
2026-05-05 10:01:33 +01:00
04a413eb55
ui: /settings/users/new + /setup-link page
steve
2026-05-05 09:59:20 +01:00
211f11e460
ui: /settings/users list page
steve
2026-05-05 09:55:31 +01:00
426b06d43d
http: POST /api/account/password — self-service password change
steve
2026-05-05 09:52:10 +01:00
18affc1f16
http: regenerate setup link + force-logout
steve
2026-05-05 09:48:13 +01:00
53016aee93
http: disable/enable user with last-admin guard + session kick
steve
2026-05-05 09:44:15 +01:00
9e044fd7b0
http: GET/PATCH /api/users/{id} with last-admin guard
steve
2026-05-05 09:41:32 +01:00
7c241c55d1
http: POST /api/users — create + setup-token + audit
steve
2026-05-05 09:38:59 +01:00
e5f79902fd
http: GET /api/users (list)
steve
2026-05-05 09:34:11 +01:00
81f2852eb1
http: POST /setup — set password, drop session, audit setup_completed
steve
2026-05-05 09:31:02 +01:00
0407aa420b
http: GET /setup landing page with expiry handling
steve
2026-05-05 09:27:53 +01:00
56108ffc33
http: session/login reject disabled users; mid-session disable kicks immediately
steve
2026-05-05 09:22:07 +01:00
c75777b60f
http: re-group routes by role band, fail-closed admin default
steve
2026-05-05 09:19:15 +01:00
085fa9684b
http: gated test for admin-band reject of operator (lands fully in B4+E1)
steve
2026-05-05 09:14:55 +01:00
529104b8e4
http: requireRole middleware + 403 forbidden page
steve
2026-05-05 09:13:51 +01:00
2ba561410f
http: test helpers — makeUser, loginAs
steve
2026-05-05 09:10:26 +01:00
8727d6bacc
http: roleAtLeast helper for the role hierarchy
steve
2026-05-05 09:09:01 +01:00
e76a383813
store: DeleteSessionsByUserID for force-logout
steve
2026-05-05 09:08:04 +01:00
93d857d995
store: user_setup_tokens CRUD + cleanup-expired
steve
2026-05-05 09:06:54 +01:00
dafdfcda3f
store: lowercase username, email/disable helpers, last-admin count
steve
2026-05-05 09:04:51 +01:00
c6fbe7c0e0
store: extend User struct with Email, DisabledAt, MustChangePassword
steve
2026-05-05 09:02:03 +01:00
a1d307fafa
store: migration 0018 — user_setup_tokens
steve
2026-05-05 09:00:35 +01:00
9712c65b04
store: migration 0017 — users.email, disabled_at, must_change_password
steve
2026-05-05 08:59:01 +01:00
45d4844937
Merge pull request 'ci: shard test job + cheap argon2 in test mode' (#13 ) from ci-faster-tests into main
steve
2026-05-05 07:44:30 +00:00
b2983aed52
ci: shard test job + cheap argon2 in test mode
steve
2026-05-05 08:40:50 +01:00
c1fd5a3526
Merge pull request 'feat(audit): P3-08 — audit log UI with filters, sort, CSV export, payload modal' (#12 ) from p3-08-audit-ui into main
steve
2026-05-05 07:17:25 +00:00
4f66cc2b34
feat(audit): clickable column headers with asc/desc sort
steve
2026-05-05 08:15:22 +01:00
deb8b874ca
audit(csv): drop user_id and target_id columns
steve
2026-05-05 08:05:41 +01:00
86fe569ea0
feat(audit): CSV export, absolute timestamps, payload modal
steve
2026-05-05 08:00:53 +01:00
16c77a8cc5
feat(audit): P3-08 — audit log UI with filters
steve
2026-05-05 07:49:25 +01:00
4f94ddbbcb
Merge pull request 'feat(alerts): live refresh table with toggle + severity colour cues' (#11 ) from alerts-live-refresh into main
steve
2026-05-05 06:42:21 +00:00
d46adabeec
alerts: 5s polling cadence + live toggle + severity colour cues
steve
2026-05-04 23:35:03 +01:00
595656ed59
feat(alerts): live-refresh the table every 15s while the tab is visible
steve
2026-05-04 23:30:19 +01:00
85c62741b5
feat(channels): include event verb in ntfy title + smtp subject (#10 )
steve
2026-05-04 22:25:38 +00:00
bc5ce12957
ui(alerts): clarify Acknowledge vs Resolve (#9 )
steve
2026-05-04 22:25:35 +00:00
38090dd457
Merge pull request 'Phase 3 — Alerts: per-source-group dedup' (#8 ) from p3-alerts-dedup into main
steve
2026-05-04 22:11:08 +00:00
350be3f19d
feat(alerts): per-source-group dedup so two failing backups produce two alerts
steve
2026-05-04 22:58:29 +01:00
9d7a714102
Merge pull request 'Phase 3 — Alerts (P3-05/06/07)' (#7 ) from p3-alerts into main
steve
2026-05-04 21:51:16 +00:00
a2355b2412
chore: ignore cmd/_* dev binaries + Tailwind rebuild
steve
2026-05-04 22:49:46 +01:00
bd310d918b
fix: payload-preview rail follows kind switcher
steve
2026-05-04 22:40:46 +01:00
4e95ad4c87
fix: move channel delete-panel out of edit form (nested form bug)
steve
2026-05-04 22:35:58 +01:00
38683b4e64
feat(ntfy): support HTTP Basic auth alongside access tokens
steve
2026-05-04 22:25:42 +01:00
d830635a2e
fix: enabled toggle — list-row click + edit-form save
steve
2026-05-04 22:21:45 +01:00
373d74cdaf
fix: read 'name' across all per-kind sub-forms when editing channels
steve
2026-05-04 22:16:59 +01:00
6139795f71
tasks: tick P3-05/06/07 + Playwright sweep notes
steve
2026-05-04 21:01:34 +01:00
cbdaa4daeb
fix: refresh hosts.open_alert_count on Raise/Resolve/AutoResolve
steve
2026-05-04 21:01:17 +01:00
24eecc1673
fix: read enabled checkbox correctly when paired with hidden=0 sibling
steve
2026-05-04 21:00:54 +01:00
04dde93acd
fix: dispatch alert.acknowledged + alert.resolved on UI ack/resolve
steve
2026-05-04 21:00:44 +01:00
809c4ed910
alert: construct + run engine; expose hub to handlers
steve
2026-05-04 20:32:10 +01:00
b25f96e465
ui: dashboard crit-alerts banner
steve
2026-05-04 20:29:49 +01:00
e0847517a8
ui: /settings/notifications list + edit form (3 kinds)
steve
2026-05-04 20:25:06 +01:00
9dbed025e0
ui: F1 — populate OpenAlerts in baseView so nav badge updates everywhere
steve
2026-05-04 20:19:09 +01:00
35dee98cf9
ui: alerts list page + alert row partial + nav badge
steve
2026-05-04 20:15:01 +01:00
5d8350132c
http: /settings/notifications CRUD + test endpoint
steve
2026-05-04 20:06:45 +01:00
5c6ac155eb
http: /alerts list + ack/resolve handlers + /api/alerts JSON
steve
2026-05-04 19:59:24 +01:00
c710743231
alert: wire engine into ws hello + MarkJobFinished + offline sweep
steve
2026-05-04 19:54:39 +01:00
5e655d756d
alert: rule logic for the six v1 rules
steve
2026-05-04 19:50:33 +01:00
9abe817aae
alert: engine skeleton + event channels
steve
2026-05-04 19:47:09 +01:00
4d469da0f8
notification: Hub fan-out + log writer
steve
2026-05-04 19:44:31 +01:00
4ef7486eef
notification: smtp channel
steve
2026-05-04 19:40:21 +01:00
e6c5dea6bf
notification: B3 — Content-Type header + URL trim
steve
2026-05-04 19:38:16 +01:00
1ff0b2dc86
notification: ntfy channel
steve
2026-05-04 19:35:50 +01:00
5031c888ed
notification: webhook channel
steve
2026-05-04 19:33:29 +01:00
d0baabc745
notification: payload + Channel interface
steve
2026-05-04 19:31:27 +01:00
8a92fedba1
store: notification_channels CRUD + AppendNotificationLog
steve
2026-05-04 19:28:41 +01:00
7c62d111d5
store: alerts CRUD with dedup + last_seen_at bump
steve
2026-05-04 19:24:17 +01:00
b2dffb1d83
store: migration 0014 — notification_channels + notification_log
steve
2026-05-04 19:20:37 +01:00
db71e006bb
store: A1 — check rows.Err() + Scan err in migrate_test
steve
2026-05-04 19:19:28 +01:00
2692c660c5
store: migration 0013 — alerts.last_seen_at
steve
2026-05-04 19:16:59 +01:00
fba76579bc
Merge pull request 'Phase 3 — Restore (P3-X1, X2, 01, 02, 03, 09, X3-X6)' (#6 ) from p3-restore into main
steve
2026-05-04 17:06:18 +00:00
24529d8fa7
test: lock-protect fakeSender so -race CI passes
steve
2026-05-04 18:01:35 +01:00
aa2d7db097
P3 wrap: agent auto-creates restore target; tasks.md ticked
steve
2026-05-04 17:51:34 +01:00
539b941db5
ui: snapshots SIZE/FILES tooltip when host's restic is < 0.17
steve
2026-05-04 17:45:32 +01:00
bec7f6d2b9
ui: tidy job-page download into a single dropdown
steve
2026-05-04 17:36:57 +01:00
a781e95c94
P3 follow-up: editable target dir, conditional --no-ownership, UK lint
steve
2026-05-04 17:27:52 +01:00
727c610765
P3 follow-up: log download (txt + ndjson) on the live job page
steve
2026-05-04 17:12:45 +01:00