mirror of
https://github.com/velocitatem/cvfs.git
synced 2026-05-31 08:43:37 +00:00
fix: address code review - use timezone-aware datetime, full ip hash
Agent-Logs-Url: https://github.com/velocitatem/cvfs/sessions/fb35fb9a-a89e-4df0-9584-109f7151509c Co-authored-by: velocitatem <60182044+velocitatem@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
7435a0f1bf
commit
ad91369371
@@ -1,7 +1,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import hashlib
|
import hashlib
|
||||||
from datetime import datetime
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
from fastapi import APIRouter, Depends, HTTPException, Request
|
from fastapi import APIRouter, Depends, HTTPException, Request
|
||||||
from fastapi.responses import Response
|
from fastapi.responses import Response
|
||||||
@@ -28,10 +28,10 @@ router = APIRouter(prefix="/public", tags=["public"])
|
|||||||
|
|
||||||
async def _log_view(session: AsyncSession, asset: PublicAsset, request: Request) -> None:
|
async def _log_view(session: AsyncSession, asset: PublicAsset, request: Request) -> None:
|
||||||
ip = request.headers.get("x-forwarded-for", request.client.host if request.client else "")
|
ip = request.headers.get("x-forwarded-for", request.client.host if request.client else "")
|
||||||
ip_hash = hashlib.sha256(ip.split(",")[0].strip().encode()).hexdigest()[:16] if ip else None
|
ip_hash = hashlib.sha256(ip.split(",")[0].strip().encode()).hexdigest() if ip else None
|
||||||
view = PublicAssetView(
|
view = PublicAssetView(
|
||||||
public_asset_id=asset.id,
|
public_asset_id=asset.id,
|
||||||
viewed_at=datetime.utcnow(),
|
viewed_at=datetime.now(timezone.utc),
|
||||||
user_agent=request.headers.get("user-agent", "")[:512] or None,
|
user_agent=request.headers.get("user-agent", "")[:512] or None,
|
||||||
ip_hash=ip_hash,
|
ip_hash=ip_hash,
|
||||||
)
|
)
|
||||||
@@ -116,7 +116,8 @@ async def get_public_pdf(slug: str, request: Request, session: AsyncSession = De
|
|||||||
version = (await session.execute(stmt)).scalars().one_or_none()
|
version = (await session.execute(stmt)).scalars().one_or_none()
|
||||||
|
|
||||||
docx_bytes = storage_client.download_bytes(key=asset.artifact_key)
|
docx_bytes = storage_client.download_bytes(key=asset.artifact_key)
|
||||||
patched = generate_patched_docx(docx_bytes, (version.structured_blocks or []) if version else [])
|
blocks = version.structured_blocks or [] if version else []
|
||||||
|
patched = generate_patched_docx(docx_bytes, blocks)
|
||||||
pdf_bytes = docx_bytes_to_pdf(patched)
|
pdf_bytes = docx_bytes_to_pdf(patched)
|
||||||
|
|
||||||
return Response(
|
return Response(
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import enum
|
import enum
|
||||||
from datetime import datetime
|
from datetime import datetime, timezone
|
||||||
|
|
||||||
from sqlalchemy import Boolean, DateTime, Enum, ForeignKey, String, Text
|
from sqlalchemy import Boolean, DateTime, Enum, ForeignKey, String, Text
|
||||||
from sqlalchemy.dialects.postgresql import JSONB
|
from sqlalchemy.dialects.postgresql import JSONB
|
||||||
@@ -151,7 +151,7 @@ class PublicAssetView(Base, IdentifierMixin):
|
|||||||
ForeignKey("public_assets.id", ondelete="CASCADE"), index=True
|
ForeignKey("public_assets.id", ondelete="CASCADE"), index=True
|
||||||
)
|
)
|
||||||
viewed_at: Mapped[datetime] = mapped_column(
|
viewed_at: Mapped[datetime] = mapped_column(
|
||||||
DateTime(timezone=True), default=datetime.utcnow, index=True
|
DateTime(timezone=True), default=lambda: datetime.now(timezone.utc), index=True
|
||||||
)
|
)
|
||||||
user_agent: Mapped[str | None] = mapped_column(String(512), nullable=True)
|
user_agent: Mapped[str | None] = mapped_column(String(512), nullable=True)
|
||||||
ip_hash: Mapped[str | None] = mapped_column(String(64), nullable=True)
|
ip_hash: Mapped[str | None] = mapped_column(String(64), nullable=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user