feat(session): add token validation
This commit is contained in:
@@ -53,3 +53,21 @@ class SessionTokenManager:
|
|||||||
|
|
||||||
self._tokens[token_str] = session
|
self._tokens[token_str] = session
|
||||||
return session
|
return session
|
||||||
|
|
||||||
|
def validate_token(self, token: str) -> SessionToken | None:
|
||||||
|
"""Validate a session token.
|
||||||
|
|
||||||
|
Returns the SessionToken if valid and not expired, None otherwise.
|
||||||
|
Also removes expired tokens lazily.
|
||||||
|
"""
|
||||||
|
session = self._tokens.get(token)
|
||||||
|
if session is None:
|
||||||
|
return None
|
||||||
|
|
||||||
|
now = datetime.now(timezone.utc)
|
||||||
|
if session.expires_at < now:
|
||||||
|
# Token expired, remove it
|
||||||
|
del self._tokens[token]
|
||||||
|
return None
|
||||||
|
|
||||||
|
return session
|
||||||
|
|||||||
@@ -37,3 +37,19 @@ def test_create_token_caps_ttl_at_maximum():
|
|||||||
# Should be capped at 3600 seconds (1 hour)
|
# Should be capped at 3600 seconds (1 hour)
|
||||||
max_expires = datetime.now(timezone.utc) + timedelta(seconds=3610)
|
max_expires = datetime.now(timezone.utc) + timedelta(seconds=3610)
|
||||||
assert token.expires_at < max_expires
|
assert token.expires_at < max_expires
|
||||||
|
|
||||||
|
|
||||||
|
def test_validate_token_returns_session_for_valid_token():
|
||||||
|
manager = SessionTokenManager()
|
||||||
|
created = manager.create_token(
|
||||||
|
agent_name="test-agent",
|
||||||
|
document="sales",
|
||||||
|
permissions=["read"],
|
||||||
|
ttl_seconds=300,
|
||||||
|
)
|
||||||
|
|
||||||
|
session = manager.validate_token(created.token)
|
||||||
|
|
||||||
|
assert session is not None
|
||||||
|
assert session.document == "sales"
|
||||||
|
assert session.agent_name == "test-agent"
|
||||||
|
|||||||
Reference in New Issue
Block a user