Deploy verified-group T03 review surface and packet preparation
Assistant: codex Assistant-Model: gpt-6-astra Assistant-Session: 01a09cbb-87c6-7900-a145-4ce53ba9f1a6
This commit is contained in:
parent
c5367a5a54
commit
6fb35d953b
14 changed files with 2876 additions and 9 deletions
|
|
@ -40,6 +40,7 @@ class HumanSession:
|
|||
access_token: str = field(repr=False)
|
||||
csrf: str = field(default_factory=lambda: secrets.token_urlsafe(32), repr=False)
|
||||
roles: tuple[str, ...] = ()
|
||||
groups: tuple[str, ...] = ()
|
||||
|
||||
|
||||
class KeyCapeLogin:
|
||||
|
|
@ -151,6 +152,9 @@ class KeyCapeLogin:
|
|||
if (not isinstance(access.get("roles"), list)
|
||||
or any(not isinstance(x, str) for x in access["roles"])):
|
||||
raise LoginError("human approver profile required")
|
||||
groups = access.get("groups")
|
||||
if not isinstance(groups, list) or any(not isinstance(x, str) or not x for x in groups):
|
||||
raise LoginError("human approver profile required")
|
||||
assurance = access.get("assurance")
|
||||
if (not isinstance(assurance, dict) or assurance.get("level") != "aal2"
|
||||
or assurance.get("mfa") is not True or assurance.get("source") != "key-cape"
|
||||
|
|
@ -169,7 +173,7 @@ class KeyCapeLogin:
|
|||
assert_human_control_dischargeable(human)
|
||||
session = HumanSession(access["sub"], Claim(access["tenant"], tenant_route), human,
|
||||
dict(assurance), min(identity["exp"], access["exp"], self.clock() + 900),
|
||||
tokens["access_token"], roles=tuple(access["roles"]))
|
||||
tokens["access_token"], roles=tuple(access["roles"]), groups=tuple(groups))
|
||||
with self._lock:
|
||||
self._prune()
|
||||
if len(self._sessions) >= self.capacity:
|
||||
|
|
|
|||
|
|
@ -64,7 +64,8 @@ def build_request(session: HumanSession, memo, action, policy_version):
|
|||
"subject": {"id": session.subject, "type": "human", "tenant": session.tenant.value,
|
||||
"attributes": {"tenant_source": session.tenant.route.value,
|
||||
"principal_type_source": session.principal_type.route.value,
|
||||
"assurance": dict(session.assurance), "roles": list(session.roles)}},
|
||||
"assurance": dict(session.assurance), "roles": list(session.roles),
|
||||
"groups": list(session.groups)}},
|
||||
"action": action,
|
||||
"resource": {"id": "memo:" + memo.id, "type": "decision-memo",
|
||||
"system": "informed-decision", "tenant": "tenant:platform"},
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue