26 lines
808 B
Python
26 lines
808 B
Python
from datetime import datetime, timedelta, timezone
|
|
from hashlib import sha256
|
|
|
|
from backend.app.core.config import settings
|
|
|
|
|
|
def hash_token(token: str) -> str:
|
|
return sha256(token.encode('utf-8')).hexdigest()
|
|
|
|
|
|
def token_expires_at() -> datetime:
|
|
return datetime.now(timezone.utc) + timedelta(days=settings.token_expiry_days)
|
|
|
|
|
|
def clean_url(url: str) -> str:
|
|
from urllib.parse import parse_qsl, urlsplit, urlunsplit
|
|
|
|
parts = urlsplit(url)
|
|
if not parts.query:
|
|
return url
|
|
|
|
params = parse_qsl(parts.query, keep_blank_values=True)
|
|
filtered = [(k, v) for k, v in params if k not in settings.tracking_params]
|
|
new_query = '&'.join(f'{k}={v}' if v != '' else k for k, v in filtered)
|
|
return urlunsplit((parts.scheme, parts.netloc, parts.path, new_query, parts.fragment))
|