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