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:
@@ -11,7 +11,7 @@ import uuid
|
|||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
from fastapi import APIRouter, HTTPException
|
from fastapi import APIRouter, HTTPException, Request
|
||||||
from pydantic import BaseModel, HttpUrl, validator
|
from pydantic import BaseModel, HttpUrl, validator
|
||||||
|
|
||||||
from app.auth import require_login
|
from app.auth import require_login
|
||||||
@@ -161,7 +161,7 @@ def validate_file_type(content_type: str, filename: str) -> bool:
|
|||||||
|
|
||||||
@router.post("/process-url")
|
@router.post("/process-url")
|
||||||
@require_login
|
@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.
|
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
|
- Timeout protection: prevents hanging on slow/malicious servers
|
||||||
|
|
||||||
Args:
|
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:
|
Returns:
|
||||||
JSON with task_id and status
|
JSON with task_id and status
|
||||||
@@ -180,14 +181,14 @@ async def process_url(request: URLUploadRequest):
|
|||||||
Raises:
|
Raises:
|
||||||
HTTPException: If URL is invalid, unsafe, or file cannot be processed
|
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 (SSRF protection)
|
||||||
validate_url_safety(url)
|
validate_url_safety(url)
|
||||||
|
|
||||||
# Parse URL to extract filename if not provided
|
# Parse URL to extract filename if not provided
|
||||||
if request.filename:
|
if url_request.filename:
|
||||||
original_filename = request.filename
|
original_filename = url_request.filename
|
||||||
else:
|
else:
|
||||||
# Extract filename from URL path
|
# Extract filename from URL path
|
||||||
parsed = urllib.parse.urlparse(url)
|
parsed = urllib.parse.urlparse(url)
|
||||||
|
|||||||
Reference in New Issue
Block a user