Conversation
The backend now requires code_challenge on /auth/device/login and code_verifier on /auth/device/token. Generate a 43-char base64url verifier per login and thread it through the token exchange.
|
Warning Review limit reached
Next review available in: 47 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (11)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Key creation now requires an interactive session on spoo.me, so an app token cannot mint keys. Rather than ship a subcommand that always fails, drop it: 'keys list' and 'keys revoke' stay, and the empty-state hint points to the dashboard. Removes the dead CreateKey client method and --scopes completion.
Zingzy
left a comment
There was a problem hiding this comment.
Mergeable, nothing blocking. Clean implementation of the spoo#260 PKCE contract — I verified the crypto and the removal against the backend rather than the description.
- PKCE is RFC-correct:
codeVerifieris 32 random bytes as unpadded base64url = exactly 43 chars (RFC 7636 §4.1), within the backend DTO's 43-128 + charset bound;codeChallengeS256is unpadded base64url(SHA256), and the login URL carriescode_challenge_method=S256— matching the backend's S256-only gate. The Appendix B vector test (TestCodeChallengeS256Vector) pins the exact vector spoo#260 uses, andTestDeviceFlowReturnsCodeasserts the challenge on the auth URL equals S256(verifier), so the two legs can't drift. The verifier threadsRun → ExchangeDeviceCodeand posts{code, code_verifier}. keys createremoval is thorough, not partial: the subcommand, the deadCreateKeyclient method +CreateKeyRequest, the--scopescompletion, and their tests are all gone, and the empty-state hint points at the dashboard.TestKeysCreateCommandRemovedasserts the subcommand no longer resolves. This is the right call — the backend made key minting first-party only, so akeys createover device auth would 403 every time; a never-succeeding subcommand is worse than its absence.keys list/keys revokeare untouched (they ridekeys:manage, which the backend kept as list+delete).go test ./...green in the worktree.
Deploy order: backend (spoo#260) must be live first — older CLI builds fail NEW logins only once it deploys, as the PR body says. Good to merge after the backend.
spoo.me device auth now requires PKCE with the S256 method (companion change: spoo-me/spoo#260). This updates the CLI to match:
spoo auth logingenerates a fresh 43-character code verifier per attempt and sends its S256 challenge on the/auth/device/loginURL along withcode_challenge_method=S256.{"code", "code_verifier"}to/auth/device/token.Once the backend change is deployed, older CLI versions will fail new browser logins. Existing sessions and API key logins are unaffected.
Also: removed
spoo keys createKey creation on spoo.me is now an interactive-session action (see spoo-me/spoo#260), so an app token from device login can no longer create API keys. A
keys createsubcommand would fail every time, so this drops it rather than ship a broken affordance.spoo keys listandspoo keys revokeare unchanged, and the empty-state hint now points to the dashboard. Also removes the now-deadCreateKeyclient method and the--scopescompletion.