Skip to content

refactor: extract readBody helper to remove duplicate io.ReadAll calls#1241

Merged
rdimitrov merged 3 commits intomodelcontextprotocol:mainfrom
mesutoezdil:refactor/extract-read-body-helper
May 4, 2026
Merged

refactor: extract readBody helper to remove duplicate io.ReadAll calls#1241
rdimitrov merged 3 commits intomodelcontextprotocol:mainfrom
mesutoezdil:refactor/extract-read-body-helper

Conversation

@mesutoezdil
Copy link
Copy Markdown
Contributor

@mesutoezdil mesutoezdil commented May 3, 2026

The same pattern for reading an error response body appeared in three places across the auth handlers:

  • internal/api/handlers/v0/auth/github_at.go (twice)
  • internal/api/handlers/v0/auth/github_oidc.go (once)

A shared readBody helper function added to common.go now handles this in one place.
The io import is removed from both files since it is no longer used directly there.

argIndex is already used in fmt.Sprintf on line 215 so the blank
assignment on the line before was not needed.
The same pattern for reading an error response body appeared in three
places across the auth handlers. A shared readBody function in common.go
now handles this in one place.
@rdimitrov rdimitrov merged commit 6f9bd66 into modelcontextprotocol:main May 4, 2026
3 checks passed
rdimitrov added a commit that referenced this pull request May 4, 2026
## Summary

Follow-up to #1241. Two small tweaks to the `readBody` helper:

- **Rename `readBody` → `readErrorBody`.** The helper is only ever
called on the error path (after a non-2xx status check), where we want a
small string for diagnostics. The generic name made it look reusable on
the success path, where streaming JSON decoding is the right approach.
The new name pins the intended use down.
- **Cap the read with `io.LimitReader` (8 KiB).** Defense in depth —
error diagnostics never need more than a few KB, and we shouldn't buffer
an arbitrarily large body from an upstream just to format an error
message. 8 KiB is well above any realistic GitHub API or JWKS error
response.

No behavior change on the happy path. On the unhappy path, error
messages are now bounded.

## Test plan

- [x] `go build ./...`
- [x] `go test ./internal/api/handlers/v0/auth/...`

🤖 Generated with [Claude Code](https://claude.com/claude-code)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants