Repository navigation
Commit b9844b5
fix(auth): harden github-at token exchange after review
Addresses review findings on the org-namespace-admin-only change:
- Don't leak internal error detail in the github-at 401. The handler passed
the wrapped err (which can include the raw upstream GitHub response body from
readErrorBody) into huma.Error401Unauthorized, and huma serializes extra err
args into the response body (CWE-209) — the same leak fixed for GET /v0/servers
in #1338. Log it server-side and return only a generic message. Regression
test added (github_at_internal_test.go), mirroring #1338.
- Fail closed on a SAML/SSO-enforcement 403 (X-GitHub-SSO header) instead of
treating it as a missing-scope 403 and silently degrading a legitimate Owner
to personal-only with no signal.
- Re-check membership state=active client-side, not only via the query param,
so a dropped/changed param can't grant a pending (not-yet-accepted) owner
invitation.
- Cap the org-memberships pagination loop (previously unbounded) and fail closed
if the cap is hit with full pages, rather than returning a possibly-truncated
grant.
- In buildPermissions, skip an org whose name fails validation instead of
returning nil for the whole set, so one unexpected org name can't strip the
caller's personal namespace or their other valid org grants.
- Correct the role comment: GET /user/memberships/orgs returns "admin"/"member",
not "billing_manager".
Adds tests for pending-state exclusion, billing_manager exclusion, and
Retry-After / SSO 403 fail-closed handling.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1 parent a10d041 commit b9844b5
3 files changed
Lines changed: 239 additions & 21 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
| |||
57 | 58 | | |
58 | 59 | | |
59 | 60 | | |
60 | | - | |
| 61 | + | |
61 | 62 | | |
62 | 63 | | |
63 | 64 | | |
| |||
66 | 67 | | |
67 | 68 | | |
68 | 69 | | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
69 | 81 | | |
70 | 82 | | |
71 | 83 | | |
| |||
136 | 148 | | |
137 | 149 | | |
138 | 150 | | |
139 | | - | |
140 | | - | |
141 | | - | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
142 | 154 | | |
143 | 155 | | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
144 | 161 | | |
145 | 162 | | |
146 | 163 | | |
147 | 164 | | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
148 | 171 | | |
149 | 172 | | |
150 | 173 | | |
| |||
171 | 194 | | |
172 | 195 | | |
173 | 196 | | |
174 | | - | |
| 197 | + | |
175 | 198 | | |
176 | 199 | | |
177 | 200 | | |
178 | 201 | | |
179 | 202 | | |
180 | 203 | | |
181 | | - | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
182 | 209 | | |
183 | 210 | | |
184 | 211 | | |
185 | 212 | | |
| 213 | + | |
186 | 214 | | |
187 | | - | |
| 215 | + | |
188 | 216 | | |
189 | 217 | | |
190 | 218 | | |
191 | | - | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
192 | 223 | | |
193 | 224 | | |
194 | 225 | | |
| |||
224 | 255 | | |
225 | 256 | | |
226 | 257 | | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
227 | 265 | | |
228 | 266 | | |
229 | 267 | | |
| |||
241 | 279 | | |
242 | 280 | | |
243 | 281 | | |
244 | | - | |
245 | | - | |
246 | | - | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
247 | 285 | | |
248 | 286 | | |
249 | 287 | | |
250 | | - | |
251 | | - | |
252 | | - | |
253 | | - | |
254 | | - | |
255 | 288 | | |
256 | 289 | | |
257 | | - | |
| 290 | + | |
258 | 291 | | |
259 | 292 | | |
260 | | - | |
| 293 | + | |
261 | 294 | | |
262 | | - | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
263 | 299 | | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
264 | 303 | | |
265 | 304 | | |
266 | 305 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
45 | 45 | | |
46 | 46 | | |
47 | 47 | | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
48 | 101 | | |
49 | 102 | | |
50 | 103 | | |
| |||
309 | 362 | | |
310 | 363 | | |
311 | 364 | | |
312 | | - | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
313 | 374 | | |
314 | 375 | | |
315 | 376 | | |
| |||
528 | 589 | | |
529 | 590 | | |
530 | 591 | | |
| 592 | + | |
| 593 | + | |
| 594 | + | |
| 595 | + | |
| 596 | + | |
| 597 | + | |
| 598 | + | |
| 599 | + | |
| 600 | + | |
| 601 | + | |
| 602 | + | |
| 603 | + | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| 622 | + | |
| 623 | + | |
| 624 | + | |
| 625 | + | |
| 626 | + | |
| 627 | + | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
| 631 | + | |
| 632 | + | |
| 633 | + | |
| 634 | + | |
| 635 | + | |
| 636 | + | |
| 637 | + | |
| 638 | + | |
| 639 | + | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
| 650 | + | |
| 651 | + | |
| 652 | + | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
531 | 668 | | |
532 | 669 | | |
533 | 670 | | |
| |||
732 | 869 | | |
733 | 870 | | |
734 | 871 | | |
735 | | - | |
| 872 | + | |
| 873 | + | |
| 874 | + | |
| 875 | + | |
| 876 | + | |
| 877 | + | |
| 878 | + | |
| 879 | + | |
| 880 | + | |
| 881 | + | |
736 | 882 | | |
737 | 883 | | |
738 | 884 | | |
| |||
0 commit comments