fix(api): add Request parameter to process_url endpoint for session access

The @require_login decorator expects a Starlette Request as the first
parameter to access request.session, but process_url only had a
URLUploadRequest Pydantic model parameter. This caused an
AttributeError: 'URLUploadRequest' object has no attribute 'session'
when POST /api/process-url was called.

Fix: Add `request: Request` as the first parameter and rename the
Pydantic model parameter from `request` to `url_request`.

Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-02-11 14:25:57 +00:00
parent 1cb6a60135
commit 9cd7a80cbc
+7 -6
View File
@@ -11,7 +11,7 @@ import uuid
from typing import Optional
import requests
from fastapi import APIRouter, HTTPException
from fastapi import APIRouter, HTTPException, Request
from pydantic import BaseModel, HttpUrl, validator
from app.auth import require_login
@@ -161,7 +161,7 @@ def validate_file_type(content_type: str, filename: str) -> bool:
@router.post("/process-url")
@require_login
async def process_url(request: URLUploadRequest):
async def process_url(request: Request, url_request: URLUploadRequest):
"""
Download a file from a URL and enqueue it for processing.
@@ -172,7 +172,8 @@ async def process_url(request: URLUploadRequest):
- Timeout protection: prevents hanging on slow/malicious servers
Args:
request: URLUploadRequest with url and optional filename
request: Starlette Request object (used by require_login decorator)
url_request: URLUploadRequest with url and optional filename
Returns:
JSON with task_id and status
@@ -180,14 +181,14 @@ async def process_url(request: URLUploadRequest):
Raises:
HTTPException: If URL is invalid, unsafe, or file cannot be processed
"""
url = str(request.url)
url = str(url_request.url)
# Validate URL safety (SSRF protection)
validate_url_safety(url)
# Parse URL to extract filename if not provided
if request.filename:
original_filename = request.filename
if url_request.filename:
original_filename = url_request.filename
else:
# Extract filename from URL path
parsed = urllib.parse.urlparse(url)