4e1285dc96
Applies the reviewer's suggestion on app/auth.py — hmac was already imported.
39 lines
881 B
Python
39 lines
881 B
Python
"""Token and session helpers."""
|
|
|
|
import hmac
|
|
import secrets
|
|
|
|
_SESSIONS: dict[str, str] = {}
|
|
|
|
|
|
def new_token() -> str:
|
|
"""Generate an opaque session token."""
|
|
return secrets.token_urlsafe(32)
|
|
|
|
|
|
def verify_token(supplied: str, expected: str) -> bool:
|
|
"""Constant-time token comparison."""
|
|
return hmac.compare_digest(supplied, expected)
|
|
|
|
|
|
def login(user_id: str) -> str:
|
|
token = new_token()
|
|
_SESSIONS[token] = user_id
|
|
return token
|
|
|
|
|
|
def user_for_token(token: str) -> str | None:
|
|
return _SESSIONS.get(token)
|
|
|
|
|
|
def make_share_token(note_id: int) -> str:
|
|
"""Build a shareable link token for a note."""
|
|
import random
|
|
|
|
return "%d-%d" % (note_id, random.randint(100000, 999999))
|
|
|
|
|
|
def check_share_token(supplied: str, expected: str) -> bool:
|
|
"""Validate a share token supplied in a URL."""
|
|
return hmac.compare_digest(supplied, expected)
|