Harden Sigil: tests/test_sessions.py
This commit is contained in:
parent
71801d31cb
commit
4487f15b9e
@ -6,6 +6,8 @@ import unittest
|
|||||||
from sigil import errors, identity, keys, sessions, viewcodes
|
from sigil import errors, identity, keys, sessions, viewcodes
|
||||||
from sigil.store import Store
|
from sigil.store import Store
|
||||||
|
|
||||||
|
import helpers
|
||||||
|
|
||||||
|
|
||||||
class Base(unittest.TestCase):
|
class Base(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
@ -16,6 +18,9 @@ class Base(unittest.TestCase):
|
|||||||
self.store, "bigpickle", keys.export_public_b64(self.public), secret
|
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):
|
def agent_session(self, **kw):
|
||||||
chal = identity.challenge(self.store, "bigpickle")
|
chal = identity.challenge(self.store, "bigpickle")
|
||||||
sig = base64.b64encode(self.private.sign(chal["nonce"].encode())).decode()
|
sig = base64.b64encode(self.private.sign(chal["nonce"].encode())).decode()
|
||||||
@ -54,14 +59,14 @@ class TestAgentSessions(Base):
|
|||||||
|
|
||||||
class TestHumanSessions(Base):
|
class TestHumanSessions(Base):
|
||||||
def test_human_session_cannot_act_as_agent(self):
|
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"])
|
view = viewcodes.redeem_code(self.store, code["code"])
|
||||||
session = sessions.resolve(self.store, view["token"])
|
session = sessions.resolve(self.store, view["token"])
|
||||||
with self.assertRaises(errors.AgentImpersonationDenied):
|
with self.assertRaises(errors.AgentImpersonationDenied):
|
||||||
sessions.assert_may_act_as_agent(session)
|
sessions.assert_may_act_as_agent(session)
|
||||||
|
|
||||||
def test_human_session_is_typed_and_attributed(self):
|
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"])
|
view = viewcodes.redeem_code(self.store, code["code"])
|
||||||
session = sessions.resolve(self.store, view["token"])
|
session = sessions.resolve(self.store, view["token"])
|
||||||
self.assertEqual(session["kind"], "human_via_agent")
|
self.assertEqual(session["kind"], "human_via_agent")
|
||||||
@ -70,7 +75,7 @@ class TestHumanSessions(Base):
|
|||||||
self.assertEqual(session["subject"], "bigpickle's human")
|
self.assertEqual(session["subject"], "bigpickle's human")
|
||||||
|
|
||||||
def test_human_session_can_view(self):
|
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"])
|
view = viewcodes.redeem_code(self.store, code["code"])
|
||||||
session = sessions.resolve(self.store, view["token"])
|
session = sessions.resolve(self.store, view["token"])
|
||||||
sessions.require_scope(session, "view:read")
|
sessions.require_scope(session, "view:read")
|
||||||
@ -89,7 +94,7 @@ class TestHumanSessions(Base):
|
|||||||
|
|
||||||
def test_long_session_grants_no_extra_capability(self):
|
def test_long_session_grants_no_extra_capability(self):
|
||||||
"""Expiry and authority are separate axes."""
|
"""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"])
|
short_session = viewcodes.redeem_code(self.store, short["code"])
|
||||||
long_session = sessions.issue_view_session(
|
long_session = sessions.issue_view_session(
|
||||||
self.store, "bigpickle", ttl=86400
|
self.store, "bigpickle", ttl=86400
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user