docs(swagger)+test(rest): document /auth/refresh + /auth/logout, add HTTP smoke tests #12
Reference in New Issue
Block a user
Delete Branch "devin/1776541136-docs-auth-refresh-logout-followups"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Follow-up to PR #8 (JWT revocation + refresh), addressing two of the three in-scope follow-ups called out on PR #11:
swagger.yamlpre-dated/api/v1/auth/refreshand/api/v1/auth/logout— client generators couldn't pick them up.WalletAuthlayer and by themake e2e-fullPlaywright spec, but had no HTTP-level unit tests — regressions at the mux/handler seam (wrong method, missingwalletAuth, unregistered route) were invisible togo test ./backend/api/rest.Changes
backend/api/rest/swagger.yamlPOST /api/v1/auth/refreshentry under theAuthtag. UsesbearerAuth, returns the existingWalletAuthResponseon 200, 401 viacomponents/responses/Unauthorized, 503 when auth storage orjwt_revocations(migration 0016) is missing. Description calls out that legacy tokens without ajticannot be refreshed.POST /api/v1/auth/logoutentry. Same auth requirement; returns{status: ok}on 200; 401 viaUnauthorized; 503 when migration 0016 hasn't run. Description names thejwt_revocationstable so ops can correlate 503s with the migration./auth/walletand/auth/registerso the tag block stays ordered.backend/api/rest/auth_refresh_internal_test.go(new — 7 tests)TestHandleAuthRefreshRejectsGet— GET returns 405method_not_allowed.TestHandleAuthRefreshReturns503WhenWalletAuthUnconfigured—walletAuthnil, POST with a Bearer header returns 503 rather than panicking.TestHandleAuthLogoutRejectsGet— symmetric 405 on GET.TestHandleAuthLogoutReturns503WhenWalletAuthUnconfigured— symmetric 503.TestAuthRefreshRouteRegistered— exercisesSetupRoutesand confirmsPOST /api/v1/auth/refreshand/api/v1/auth/logoutare registered (not 404). Catches regressions where a future refactor drops themux.HandleFuncentries.TestAuthRefreshRequiresBearerToken+TestAuthLogoutRequiresBearerToken— a POST with noAuthorizationresolves to 401 or 503 (never 200 or 500).decodeErrorBodyhelper extractsErrorDetailfromwriteError's{"error":{"code":...,"message":...}}envelope so asserts match the actual wire format.newServerNoWalletAuthbuilds arest.ServerwithJWT_SECRETset to a 32-byte string so PR #3's fail-fast check is satisfied; nil db pool is fine because the tests don't touch any DB path.Verification
cd backend && go vet ./...— clean.cd backend && go test ./api/rest/— pass.cd backend && go test ./...— pass.Out of scope
The live credential rotation follow-up (rotate the
L@ker?s?$?2010passwords in infra) needs database + SSH + deploy-pipeline access and belongs to the operator.docs/SECURITY.md(added in PR #3) lists every asset to rotate.