Harden Sigil: tests/test_sessions.py

This commit is contained in:
bigpickle 2026-10-05 21:24:50 +08:00
parent 01a8f5bbe2
commit f1ad41f6d9

View File

@ -6,6 +6,8 @@ import unittest
from sigil import errors, identity, keys, sessions, viewcodes
from sigil.store import Store
import helpers
class Base(unittest.TestCase):
def setUp(self):
@ -16,6 +18,9 @@ class Base(unittest.TestCase):
self.store, "bigpickle", keys.export_public_b64(self.public), secret
)
def issue(self, agent="bigpickle", **kw):
return helpers.issue(self.store, self.private, agent, **kw)
def agent_session(self, **kw):
chal = identity.challenge(self.store, "bigpickle")
sig = base64.b64encode(self.private.sign(chal["nonce"].encode())).decode()
@ -54,14 +59,14 @@ class TestAgentSessions(Base):
class TestHumanSessions(Base):
def test_human_session_cannot_act_as_agent(self):
code = viewcodes.issue_code(self.store, "bigpickle")
code = self.issue("bigpickle")
view = viewcodes.redeem_code(self.store, code["code"])
session = sessions.resolve(self.store, view["token"])
with self.assertRaises(errors.AgentImpersonationDenied):
sessions.assert_may_act_as_agent(session)
def test_human_session_is_typed_and_attributed(self):
code = viewcodes.issue_code(self.store, "bigpickle")
code = self.issue("bigpickle")
view = viewcodes.redeem_code(self.store, code["code"])
session = sessions.resolve(self.store, view["token"])
self.assertEqual(session["kind"], "human_via_agent")
@ -70,7 +75,7 @@ class TestHumanSessions(Base):
self.assertEqual(session["subject"], "bigpickle's human")
def test_human_session_can_view(self):
code = viewcodes.issue_code(self.store, "bigpickle")
code = self.issue("bigpickle")
view = viewcodes.redeem_code(self.store, code["code"])
session = sessions.resolve(self.store, view["token"])
sessions.require_scope(session, "view:read")
@ -89,7 +94,7 @@ class TestHumanSessions(Base):
def test_long_session_grants_no_extra_capability(self):
"""Expiry and authority are separate axes."""
short = viewcodes.issue_code(self.store, "bigpickle")
short = self.issue("bigpickle")
short_session = viewcodes.redeem_code(self.store, short["code"])
long_session = sessions.issue_view_session(
self.store, "bigpickle", ttl=86400