Downloader text worked.

This commit is contained in:
Michael Woods
2025-12-26 00:05:33 -05:00
parent aea9a27deb
commit 005588794e

View File

@@ -1,5 +1,5 @@
from fastapi import APIRouter, Depends, HTTPException, UploadFile, File, Form from fastapi import APIRouter, Depends, HTTPException, UploadFile, File, Form
from fastapi.responses import JSONResponse from fastapi.responses import PlainTextResponse, Response
from typing import List, Optional from typing import List, Optional
from datetime import datetime from datetime import datetime
from uuid import UUID from uuid import UUID
@@ -380,4 +380,46 @@ async def delete_object(
logging.error(f"Object delete failed for {username} on {uuid}: {e}\n{traceback.format_exc()}") logging.error(f"Object delete failed for {username} on {uuid}: {e}\n{traceback.format_exc()}")
raise HTTPException(status_code=500, detail="Failed to delete object") raise HTTPException(status_code=500, detail="Failed to delete object")
return None return None
@router.get("/objects/{uuid}/text", response_class=PlainTextResponse)
async def get_object_text(
uuid: UUID,
db: DbDependency,
current_user: HttpUser = Depends(get_current_http_user)
):
username = current_user.username
try:
with db.transaction() as conn:
root = conn.root()
obj = Object.get_object_by_uuid(uuid, root)
if not obj:
raise HTTPException(status_code=404, detail="Object not found")
# Authorization check
if obj.private:
user = User.get_user_by_username(username, root)
if not user or user.uuid != obj.owner:
raise HTTPException(status_code=403, detail="Not authorized to access this private object")
# Only allow text objects
if obj.binary:
raise HTTPException(
status_code=400,
detail="This endpoint is for text objects only. Use /download or /binary for binary content."
)
# Safe to return as str since binary=False guarantees valid UTF-8
content = obj.data # will be str
logging.info(f"User {username} downloaded text object {uuid} ({obj.name})")
except HTTPException:
raise
except Exception as e:
logging.error(f"Text download failed for {username} on {uuid}: {e}\n{traceback.format_exc()}")
raise HTTPException(status_code=500, detail="Failed to retrieve text object")
return PlainTextResponse(content=content, media_type="text/plain; charset=utf-8")