[15/36] Add OC-050 auth and transport support - #49
Conversation
b7c26bd to
485d897
Compare
b94eb23 to
0e43ad8
Compare
485d897 to
2a70d05
Compare
0e43ad8 to
4bcd234
Compare
|
Verdict: request changes, one real credential-leak vulnerability. Otherwise this is strong work, and doing OAuth2/PKCE/proxy/mTLS entirely on Node core with zero new packages is the best dependency showing in the stack.
Positives verified: mTLS material passes through tls.ConnectionOptions and never touches disk, OAuth2 tokens live in the SecretStorage-backed store, callback URL is locked to localhost with explicit port, returned state is validated, dry-run redacts the query api key. Tests: strong and fixture-backed (live token server, proxy auth + bypass, mTLS success and failure, redirects, unsupported-auth throws). Gaps: no cross-origin redirect stripping test (the vulnerability), no HTTPS CONNECT tunnel test, no assertion that query secrets stay out of the log. Deps: none added. Genuinely good build-vs-buy discipline for an auth PR. |
|
Re-review (whole-stack pass, per REVIEW_GUIDE.md) Prior findings:
New (low): Fix: when the redirect scheme+host+port differ, strip Verdict: changes-needed. The redirect leak is the blocker. The rest of the transport work is solid (zero new deps, mTLS material never hits disk, tokens in SecretStorage, callback locked to localhost, per-hop proxy/cert re-resolution). |
|
Fixed in The accepted findings are addressed on this branch:
I am not changing the remaining items:
Validation:
|
|
Response to the second review: The redirect and log findings were valid and are fixed on this PR's current head, f97c1c6. Cross-origin redirects now strip The demo RSA key and the inline test copy are intentionally retained as public, non-production fixture material. The source fixture is required to make the local mTLS demo reproducible and The global Final transport/full-stack verification passes, including all 23 HTTP client tests, build, TypeScript compile, 31 files / 539 tests, and 47/47 demo validation. |
This is part 7 of 21 in a stack made with GitButler: