Activate scoped user-engine mail and finish EMAIL-WP-0008
Assistant: codex Assistant-Model: gpt-6.1-sol Assistant-Session: 01a11fd9-caf6-7a63-b578-9daaaa134ff2
This commit is contained in:
parent
42e8b2040b
commit
e9b9d1c708
17 changed files with 651 additions and 19 deletions
|
|
@ -29,7 +29,7 @@ def test_caller_writer_uses_cas0_and_revokes_on_every_outcome(monkeypatch, failu
|
|||
if args[0] == "token":
|
||||
return json.dumps({"auth": {"client_token": "synthetic-writer",
|
||||
"policies": [caller.WRITER], "lease_duration": 300}}).encode()
|
||||
if "auth/token/revoke-self" in args:
|
||||
if args == ["token", "revoke", "-self"]:
|
||||
return b"{}"
|
||||
if "platform/metadata/workloads/email-connect/callers/user-engine" in args:
|
||||
return None
|
||||
|
|
@ -48,7 +48,7 @@ def test_caller_writer_uses_cas0_and_revokes_on_every_outcome(monkeypatch, failu
|
|||
receipt = caller.provision(transport)
|
||||
assert receipt["kv_version"] == 1 and receipt["readback_equal"]
|
||||
assert value not in json.dumps(receipt)
|
||||
assert calls[-1][0] == ["write", "auth/token/revoke-self"]
|
||||
assert calls[-1][0] == ["token", "revoke", "-self"]
|
||||
assert calls[-1][2] == "synthetic-writer"
|
||||
|
||||
|
||||
|
|
@ -64,7 +64,7 @@ def test_caller_writer_rejects_inherited_authority_before_any_secret_access(monk
|
|||
return b"{}"
|
||||
with pytest.raises(caller.Refused, match="bounded_writer_required"):
|
||||
caller.provision(transport)
|
||||
assert len(seen) == 2 and seen[-1] == ["write", "auth/token/revoke-self"]
|
||||
assert len(seen) == 2 and seen[-1] == ["token", "revoke", "-self"]
|
||||
|
||||
|
||||
def test_unreviewed_plan_refuses_before_decision_network_call(monkeypatch):
|
||||
|
|
@ -74,6 +74,53 @@ def test_unreviewed_plan_refuses_before_decision_network_call(monkeypatch):
|
|||
caller.approved_plan({}, "unreviewed", None, "http://synthetic.invalid")
|
||||
|
||||
|
||||
def test_caller_self_revocation_reaches_actual_bao_cli_endpoint(monkeypatch):
|
||||
import shutil
|
||||
from http.server import BaseHTTPRequestHandler, HTTPServer
|
||||
from threading import Thread
|
||||
|
||||
if not shutil.which("bao"):
|
||||
pytest.skip("OpenBao CLI integration requires installed bao")
|
||||
caller = module("admit-scoped-caller", monkeypatch)
|
||||
seen = []
|
||||
|
||||
class Handler(BaseHTTPRequestHandler):
|
||||
def do_POST(self):
|
||||
seen.append((self.path, self.headers.get("X-Vault-Token")))
|
||||
self.send_response(204)
|
||||
self.end_headers()
|
||||
|
||||
def do_PUT(self):
|
||||
self.do_POST()
|
||||
|
||||
def log_message(self, *args):
|
||||
pass
|
||||
|
||||
server = HTTPServer(("127.0.0.1", 0), Handler)
|
||||
worker = Thread(target=server.serve_forever, daemon=True)
|
||||
worker.start()
|
||||
monkeypatch.setenv("BAO_ADDR", f"http://127.0.0.1:{server.server_port}")
|
||||
monkeypatch.setenv("VAULT_ADDR", f"http://127.0.0.1:{server.server_port}")
|
||||
monkeypatch.delenv("BAO_NAMESPACE", raising=False)
|
||||
monkeypatch.delenv("VAULT_NAMESPACE", raising=False)
|
||||
try:
|
||||
caller.bao(["token", "revoke", "-self"], token="synthetic-only-writer")
|
||||
finally:
|
||||
server.shutdown()
|
||||
server.server_close()
|
||||
worker.join(timeout=2)
|
||||
assert seen == [("/v1/auth/token/revoke-self", "synthetic-only-writer")]
|
||||
|
||||
|
||||
def test_caller_failure_receipt_allows_only_static_diagnostic_codes(monkeypatch):
|
||||
caller = module("admit-scoped-caller", monkeypatch)
|
||||
assert caller.failure_receipt(caller.Refused("caller_readback_differs"))["failure_code"] == "caller_readback_differs"
|
||||
for error in [caller.Refused("synthetic-sensitive-value"), ValueError("synthetic-sensitive-value")]:
|
||||
receipt = caller.failure_receipt(error)
|
||||
assert receipt["failure_code"] == "contained_operation_failed"
|
||||
assert "synthetic-sensitive-value" not in json.dumps(receipt)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("protected,ephemeral,corrupt", [
|
||||
(True, None, False), (False, None, False), (True, {}, False), (True, None, True),
|
||||
])
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue