This is an automated email from the ASF dual-hosted git repository.

sbp pushed a commit to branch sbp
in repository https://gitbox.apache.org/repos/asf/tooling-trusted-releases.git


The following commit(s) were added to refs/heads/sbp by this push:
     new e693c2da Keep a strict subset of GitHub OIDC payloads
e693c2da is described below

commit e693c2da8b9b4e1b1a77817f85d0a7fb9e56b341
Author: Sean B. Palmer <[email protected]>
AuthorDate: Fri Feb 20 19:57:54 2026 +0000

    Keep a strict subset of GitHub OIDC payloads
---
 atr/jwtoken.py       | 42 +++++++++++++++++++++++++++++++++++++-----
 atr/models/schema.py |  4 ++++
 2 files changed, 41 insertions(+), 5 deletions(-)

diff --git a/atr/jwtoken.py b/atr/jwtoken.py
index 3f1c8dee..ec613903 100644
--- a/atr/jwtoken.py
+++ b/atr/jwtoken.py
@@ -30,6 +30,7 @@ import quart
 import atr.config as config
 import atr.ldap as ldap
 import atr.log as log
+import atr.models.schema as schema
 import atr.util as util
 
 _ALGORITHM: Final[str] = "HS256"
@@ -50,6 +51,41 @@ if TYPE_CHECKING:
     from collections.abc import Awaitable, Callable, Coroutine
 
 
+class GitHubOIDCPayload(schema.Subset):
+    # Not in atr.models because this is not used outside of this file
+
+    actor: str
+    actor_id: str
+    aud: str
+    base_ref: str
+    check_run_id: str
+    enterprise: str
+    enterprise_id: str
+    event_name: str
+    exp: int
+    head_ref: str
+    iat: int
+    iss: str
+    job_workflow_ref: str
+    job_workflow_sha: str
+    jti: str
+    nbf: int | None = None
+    ref: str
+    ref_protected: str
+    ref_type: str
+    repository: str
+    repository_owner: str
+    repository_visibility: str
+    run_attempt: str
+    run_number: str
+    runner_environment: str
+    sha: str
+    sub: str
+    workflow: str
+    workflow_ref: str
+    workflow_sha: str
+
+
 def issue(uid: str, *, ttl: int = _ATR_JWT_TTL) -> str:
     now = datetime.datetime.now(tz=datetime.UTC)
     payload = {
@@ -151,11 +187,7 @@ async def verify_github_oidc(token: str) -> dict[str, Any]:
                 f"GitHub OIDC payload mismatch: {key} = {payload[key]} != 
{value}",
                 errorcode=401,
             )
-    # del payload["actor_id"]
-    del payload["repository_id"]
-    del payload["repository_owner_id"]
-    del payload["run_id"]
-    return payload
+    return GitHubOIDCPayload.model_validate(payload).model_dump()
 
 
 def _extract_bearer_token(request: quart.Request) -> str:
diff --git a/atr/models/schema.py b/atr/models/schema.py
index f7ac4837..6868de57 100644
--- a/atr/models/schema.py
+++ b/atr/models/schema.py
@@ -32,6 +32,10 @@ class Strict(pydantic.BaseModel):
     model_config = pydantic.ConfigDict(extra="forbid", strict=True, 
validate_assignment=True)
 
 
+class Subset(pydantic.BaseModel):
+    model_config = pydantic.ConfigDict(extra="ignore", strict=False, 
validate_assignment=True, validate_by_name=True)
+
+
 class Form(pydantic.BaseModel):
     model_config = pydantic.ConfigDict(
         extra="forbid",


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to