fix(api,frontend): render files by name without fetching, previewable share links

This commit is contained in:
hh
2026-08-13 03:49:29 +02:00
parent ef739838a5
commit e833de245a
13 changed files with 348 additions and 45 deletions
+7 -4
View File
@@ -3,6 +3,7 @@ from datetime import datetime
import asyncpg
from utils.files import url_slug
from utils.read.models import FileShareHitView, FileShareView, Page
_COLS = (
@@ -11,10 +12,11 @@ _COLS = (
"download_count, last_download_at, revoked_at, created_at"
)
_TOKEN_BYTES = 12
_TOKEN_ALPHABET = "abcdefghijkmnpqrstuvwxyz23456789" # noqa: S105
_TOKEN_LENGTH = 10
_SERVE = """
SELECT id, storage_key, file_name, mime, expires_at, max_downloads,
SELECT id, kind, storage_key, file_name, mime, expires_at, max_downloads,
download_count, revoked_at
FROM file_shares WHERE token = $1
"""
@@ -45,11 +47,12 @@ RETURNING download_count
def new_token() -> str:
return secrets.token_urlsafe(_TOKEN_BYTES)
return "".join(secrets.choice(_TOKEN_ALPHABET) for _ in range(_TOKEN_LENGTH))
def _view(row: asyncpg.Record) -> FileShareView:
return FileShareView(**dict(row))
fields = dict(row)
return FileShareView(**fields, url_name=url_slug(fields["file_name"]))
async def list_shares(