|
|
|
|
@ -7,6 +7,7 @@ from flask_restful import Resource, marshal_with, reqparse
|
|
|
|
|
|
|
|
|
|
import services
|
|
|
|
|
from controllers.common import helpers
|
|
|
|
|
from controllers.common.errors import RemoteFileUploadError
|
|
|
|
|
from core.file import helpers as file_helpers
|
|
|
|
|
from core.helper import ssrf_proxy
|
|
|
|
|
from fields.file_fields import file_fields_with_signed_url, remote_file_info_fields
|
|
|
|
|
@ -43,10 +44,14 @@ class RemoteFileUploadApi(Resource):
|
|
|
|
|
|
|
|
|
|
url = args["url"]
|
|
|
|
|
|
|
|
|
|
resp = ssrf_proxy.head(url=url)
|
|
|
|
|
if resp.status_code != httpx.codes.OK:
|
|
|
|
|
resp = ssrf_proxy.get(url=url, timeout=3, follow_redirects=True)
|
|
|
|
|
resp.raise_for_status()
|
|
|
|
|
try:
|
|
|
|
|
resp = ssrf_proxy.head(url=url)
|
|
|
|
|
if resp.status_code != httpx.codes.OK:
|
|
|
|
|
resp = ssrf_proxy.get(url=url, timeout=3, follow_redirects=True)
|
|
|
|
|
if resp.status_code != httpx.codes.OK:
|
|
|
|
|
raise RemoteFileUploadError(f"Failed to fetch file from {url}: {resp.text}")
|
|
|
|
|
except httpx.RequestError as e:
|
|
|
|
|
raise RemoteFileUploadError(f"Failed to fetch file from {url}: {str(e)}")
|
|
|
|
|
|
|
|
|
|
file_info = helpers.guess_file_info_from_response(resp)
|
|
|
|
|
|
|
|
|
|
|