Current objects.

This commit is contained in:
Michael Woods
2025-12-24 23:00:22 -05:00
parent d54125696f
commit 1bd6e21cc7
3 changed files with 63 additions and 0 deletions

View File

@@ -0,0 +1,55 @@
from fastapi import APIRouter, Depends, HTTPException
from typing import List
from datetime import datetime
from uuid import UUID
import mimetypes
from packetserver.http.dependencies import get_current_http_user
from packetserver.http.auth import HttpUser
from packetserver.server.objects import Object
from pydantic import BaseModel
router = APIRouter(prefix="/api/v1", tags=["objects"])
class ObjectSummary(BaseModel):
uuid: UUID
name: str
binary: bool
size: int
content_type: str
private: bool
created_at: datetime
modified_at: datetime
@router.get("/objects", response_model=List[ObjectSummary])
async def list_my_objects(current_user: HttpUser = Depends(get_current_http_user)):
from packetserver.runners.http_server import get_db_connection
conn = get_db_connection()
root = conn.root()
username = current_user.username # uppercase callsign
core_objects = Object.get_objects_by_username(username, root)
# Sort newest first by created_at
core_objects.sort(key=lambda o: o.created_at, reverse=True)
user_objects = []
for obj in core_objects:
content_type, _ = mimetypes.guess_type(obj.name)
if content_type is None:
content_type = "application/octet-stream" if obj.binary else "text/plain"
user_objects.append(ObjectSummary(
uuid=obj.uuid,
name=obj.name,
binary=obj.binary,
size=obj.size,
content_type=content_type,
private=obj.private,
created_at=obj.created_at,
modified_at=obj.modified_at
))
return user_objects

View File

@@ -38,6 +38,7 @@ app.mount("/static", StaticFiles(directory=BASE_DIR / "static"), name="static")
from .routers import dashboard, bulletins from .routers import dashboard, bulletins
from .routers.message_detail import router as message_detail_router from .routers.message_detail import router as message_detail_router
from .routers.messages import html_router from .routers.messages import html_router
from .routers.objects import router as objects_router
# Include routers # Include routers
app.include_router(public.router) app.include_router(public.router)
@@ -49,5 +50,6 @@ app.include_router(bulletins.router)
app.include_router(bulletins.html_router) app.include_router(bulletins.html_router)
app.include_router(message_detail_router) app.include_router(message_detail_router)
app.include_router(html_router) app.include_router(html_router)
app.include_router(objects_router)

View File

@@ -50,6 +50,12 @@ def get_db_connection():
_connection = _db.open() _connection = _db.open()
return _connection return _connection
def get_db():
"""Helper used in http/server.py dependency (get_current_http_user)"""
if _db is None:
raise RuntimeError("Database not opened run the runner properly")
return _db
# Monkey-patch the dependency helper so server.py can use it without changes # Monkey-patch the dependency helper so server.py can use it without changes
from packetserver.http import server from packetserver.http import server