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)}")