importer.py 1.2 KB

123456789101112131415161718192021222324252627282930
  1. from fastapi import APIRouter, HTTPException, Depends, BackgroundTasks
  2. from pydantic import BaseModel
  3. from services.link_importer import LinkImporter
  4. from dependencies import get_current_user
  5. import os
  6. router = APIRouter(prefix="/importer", tags=["importer"])
  7. class ImportRequest(BaseModel):
  8. url: str
  9. @router.post("/url")
  10. async def import_from_url(request: ImportRequest, background_tasks: BackgroundTasks, user: dict = Depends(get_current_user)):
  11. # Note: we allow guests to upload, but here we require login for safety
  12. # to prevent anonymous server-side request forgery (SSRF).
  13. if not user:
  14. raise HTTPException(status_code=401, detail="Please login to use link import feature")
  15. try:
  16. upload_dir = "uploads" # Shared with other routers
  17. if not os.path.exists(upload_dir):
  18. os.makedirs(upload_dir, exist_ok=True)
  19. files = LinkImporter.download_and_extract(request.url, upload_dir, background_tasks)
  20. return {"status": "success", "files": files}
  21. except ValueError as ve:
  22. raise HTTPException(status_code=400, detail=str(ve))
  23. except Exception as e:
  24. print(f"IMPORT ERROR: {e}")
  25. raise HTTPException(status_code=500, detail=f"Failed to import files: {str(e)}")