A Python port of the Invisible Internet Project (I2P)
1"""Simple token-based authentication for I2PControl."""
2from __future__ import annotations
3
4import os
5
6
7class TokenAuth:
8 """Simple token-based authentication for I2PControl."""
9
10 def __init__(self) -> None:
11 self._tokens: set[str] = set()
12
13 def generate_token(self) -> str:
14 """Generate and store a new auth token (32 hex chars)."""
15 token = os.urandom(16).hex()
16 self._tokens.add(token)
17 return token
18
19 def validate_token(self, token: str) -> bool:
20 """Return True if the token is valid."""
21 return token in self._tokens
22
23 def revoke_token(self, token: str) -> bool:
24 """Revoke a token. Returns True if it existed, False otherwise."""
25 if token in self._tokens:
26 self._tokens.discard(token)
27 return True
28 return False