Current objects.
This commit is contained in:
55
packetserver/http/routers/objects.py
Normal file
55
packetserver/http/routers/objects.py
Normal 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
|
||||
@@ -38,6 +38,7 @@ app.mount("/static", StaticFiles(directory=BASE_DIR / "static"), name="static")
|
||||
from .routers import dashboard, bulletins
|
||||
from .routers.message_detail import router as message_detail_router
|
||||
from .routers.messages import html_router
|
||||
from .routers.objects import router as objects_router
|
||||
|
||||
# Include routers
|
||||
app.include_router(public.router)
|
||||
@@ -49,5 +50,6 @@ app.include_router(bulletins.router)
|
||||
app.include_router(bulletins.html_router)
|
||||
app.include_router(message_detail_router)
|
||||
app.include_router(html_router)
|
||||
app.include_router(objects_router)
|
||||
|
||||
|
||||
|
||||
@@ -50,6 +50,12 @@ def get_db_connection():
|
||||
_connection = _db.open()
|
||||
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
|
||||
from packetserver.http import server
|
||||
|
||||
Reference in New Issue
Block a user