Repository navigation
chore(ci): guard against password handlers that skip base64-decode - #722
Conversation
Adds TestBase64PasswordGuard and TestBase64PasswordGuard_SyntheticRegression to internal/api. The AST-based scanner parses every non-test source file in the package and fails CI if any function that (a) json.Unmarshals a request body and (b) reads a *.Password field does not also call decodeBase64Password or a known delegate helper (decodeChangePasswordRequest). The synthetic-regression sub-test embeds a deliberately bad handler that mirrors the #356 shape (reads .NewPassword without decoding) and asserts the scanner detects it, proving the guard is not vacuous. Closes #661, refs #357.
|
Warning Review limit reached
More reviews will be available in 12 minutes and 8 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (1)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai full review |
✅ Actions performedFull review triggered. |
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
|
@coderabbitai review |
✅ Actions performedReview triggered.
|
Closes #661. Refs #357 (the regression this guards against).
Approach
AST-based source scanner test (
internal/api/base64_password_guard_test.go) that runs as a standardgo testcase. No external tooling, no new pre-commit hook.How it works
TestBase64PasswordGuardscans all non-test.gofiles underinternal/api. For each function that both:json.Unmarshalcall, ANDPasswordthe test asserts that function also calls
decodeBase64Passwordor the known delegate helperdecodeChangePasswordRequest. Violations reportfile:function.A synthetic-regression test (
TestBase64PasswordGuard_SyntheticRegression) embeds a deliberately bad handler source string (mirroring the exact #356 shape) and asserts the scanner catches it — proves the guard isn't vacuous.Verification
decodeBase64Passwordcall fromresetPassword) →TestBase64PasswordGuardfailed with a precise violation messagego test ./internal/api/: 1233 tests passgo vetclean,golangci-lintclean on the new fileExemptions
setupAdminis the only function inknownExemptFunctionswith a documented justification comment. Future additions require an explicit reason.Summary by CodeRabbit