Initial LinkLog implementation

This commit is contained in:
Olaf
2026-08-24 14:30:30 +02:00
commit 1c827956c4
50 changed files with 3436 additions and 0 deletions
+25
View File
@@ -0,0 +1,25 @@
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))