Repository navigation
Revoke sessions on CLI logout, audit seeding and MFA auto-locks, enforce forbidigo, add SECURITY.md - #142
Conversation
… enforce forbidigo - `rack-gateway logout` ends the session on the gateway (new POST /api/v1/auth/cli/logout, bearer token only, audited fail-closed) before removing the rack; `--local` skips the gateway. (#127) - Startup seeding only creates missing users and never changes existing roles. Each created user is recorded as user.create by system in the same transaction, and the gateway won't start if it can't be. reset-db no longer seeds. (#128) - The MFA auto-lock writes user.lock by system in the same transaction as the lock (nothing is locked if it can't), and emails every unlocked admin as well as the user. (#129) - forbidigo patterns now match (they had parentheses, so never fired). Removed every time.Sleep and panic: timers with contexts, injectable clocks and explicit timestamps in tests, convoxguard.Run for TestMain. The gateway's PKCE verifier is now RFC 7636's 43 characters. Removed the unused ratelimit AuthEndpointsOnly. (#130) - SECURITY.md, and private vulnerability reporting on GitHub. (#132) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Warning Review limit reached
This review includes 64 billable files and costs up to $16.00.
Reviews can continue after your included limit without a manual trigger. An admin must approve usage-based billing. Or wait 19 minutes for your next included review. View limit details
Comment |
|
|
Overall Grade |
Security Reliability Complexity Hygiene |
Code Review Summary
| Analyzer | Status | Updated (UTC) | Details |
|---|---|---|---|
| JavaScript | Oct 13, 2026 1:50a.m. | Review ↗ | |
| Go | Oct 13, 2026 1:50a.m. | Review ↗ |
Important
AI Review is run only on demand for your team. We're only showing results of static analysis review right now. To trigger AI Review, comment @deepsourcebot review on this thread.
CI runs golangci-lint on ./..., which includes scripts/test-libfido2.go (a command-line program, so fmt.Print is its output). task go:lint only linted cmd, internal and tools, so it passed locally. It now lints ./... too, with node_modules excluded (a web dependency ships Go files), and reruns when the lint config or scripts change. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fixes #127, fixes #128, fixes #129, fixes #130, fixes #132.
CLI logout ends the session (#127)
POST /api/v1/auth/cli/logout: revokes the session sent as the bearer token. Cookies are ignored (so a pagecan't log a browser out) and API tokens get 401. It's audited like web logout: the attempt is written first, and
the logout is refused with 503 if that write fails.
rack-gateway logoutcalls it before removing the rack. If the gateway can't be reached or refuses, the rack iskept and the error suggests
--local, which removes the rack without contacting the gateway.Seeding (#128)
never changes an existing user, so a role changed in the web UI stays changed.
user.createbysystemin the same transaction. If that can't be written,nothing is created and the gateway doesn't start.
reset-dbno longer seeds; the gateway does it, audited, when it next starts. RemovedInitializeAdmin.MFA auto-lock (#129)
user.lockbysystemin the same transaction. If itcan't, the user isn't locked, and the error goes to Sentry and fails the health check.
forbidigo (#130)
\(, but forbidigo matches the identifier (time.Sleep), so none ever fired. They're now^panic$,^fmt\.Print(f|ln)?$and^time\.Sleep$, withfmt.Print*allowed incmd/andinternal/cli/.Checked with a probe file that all three now fire.
time.Sleepandpanic:retryhelper.convoxguard.Run(m)replaces theTestMainpanics.ratelimit.AuthEndpointsOnly.7636's 128-character limit. It's now 32 bytes (43 characters), the RFC's recommended size.
Security policy (#132)
SECURITY.md: report privately through GitHub's "Report a vulnerability" or to security@docspring.com; only thelatest release is supported. Private vulnerability reporting is now enabled on the repository.
Tests
--local.entry.
task go:lintandtask go:test:unit(1,329 tests) pass locally, and the docs build with no broken links.