• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

stacklok / toolhive / 31184989406
70%

Build:
DEFAULT BRANCH: main
Ran 07 Aug 2026 02:03PM UTC
Jobs 1
Files 873
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

07 Aug 2026 01:55PM UTC coverage: 70.112% (+0.1%) from 69.976%
31184989406

push

github

web-flow
Add a consent model for external OIDC subject tokens (#6149)

* Accept subject tokens from trusted external OIDC issuers

The embedded auth server's RFC 8693 token exchange only accepted subject
tokens it had minted itself. MultiIssuerTokenValidator could already
verify tokens from external issuers but was unreachable — factory.go
built only the self-issued validator — and even wired in it would have
rejected every external token, since they carry no client_id and
checkDelegationConsent treats that as unbound.

The gap was a missing authorization decision, not a bug: a trusted
issuer, a valid signature and a matching audience authorize ToolHive as
a resource, not any particular client to act for the subject. Accepting
such a token wholesale is a confused-deputy risk.

Add a fail-closed consent policy and ship it in the same change that
first makes external tokens reachable. may_act stays authoritative when
present; otherwise the per-issuer actor claim (azp by default, appid for
Entra v1, cid for Okta) must appear in that issuer's allowed_actors, and
an issuer with none accepts only may_act-bearing tokens. Provenance is
recorded in the act chain so a delegation's origin stays auditable.

trusted_issuers is plumbed through RunConfig and validated at both the
config and constructor layers, so a typo fails before live client
registration rather than crash-looping after it. Each issuer gets its
own HTTP client with a dial-time private-IP guard and same-host redirect
policy, and JWKS URLs pass a single validation choke point whether they
were configured or discovered.

* Correct documentation drift and error reporting

Review of the first round found comments and docs that had fallen out of
step with the code, plus two reporting defects.

The arch doc claimed may_act bypasses allowedDelegateClients and that
the JWKS cache used a 5-minute TTL; neither matched the implementation.
Six references named resolveJWKS, a function that no longer exists, and
a config... (continued)

566 of 586 new or added lines in 7 files covered. (96.59%)

13 existing lines in 6 files now uncovered.

83778 of 119492 relevant lines covered (70.11%)

98.66 hits per line

Uncovered Changes

Lines Coverage ∆ File
15
94.43
26.64% pkg/authserver/server/tokenexchange/multi_issuer_validator.go
5
97.4
-1.76% pkg/authserver/server/tokenexchange/validator.go

Coverage Regressions

Lines Coverage ∆ File
3
67.14
-4.29% pkg/state/runconfig.go
2
94.43
26.64% pkg/authserver/server/tokenexchange/multi_issuer_validator.go
2
81.26
-0.47% pkg/transport/proxy/httpsse/http_proxy.go
2
57.89
-3.51% pkg/transport/session/sse_session.go
2
94.77
-1.31% pkg/vmcp/composer/dag_executor.go
2
61.31
-0.17% pkg/workloads/manager.go
Jobs
ID Job ID Ran Files Coverage
1 31184989406.1 07 Aug 2026 02:03PM UTC 873
70.11
GitHub Action Run
Source Files on build 31184989406
  • Tree
  • List 873
  • Changed 14
  • Source Changed 8
  • Coverage Changed 13
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #31184989406
  • acc6df34 on github
  • Prev Build on main (#31178282981)
  • Next Build on main (#31202262902)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc