Initial LinkLog implementation
This commit is contained in:
@@ -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))
|
||||
Reference in New Issue
Block a user