From d6a39dbf29b8296eea9d8e56d17aeb0e89fd6d97 Mon Sep 17 00:00:00 2001 From: aliel Date: Tue, 27 Feb 2024 16:56:21 +0100 Subject: [PATCH] Fix upload when content-type is not provided --- src/aleph/web/controllers/storage.py | 37 ++++++++++------------------ 1 file changed, 13 insertions(+), 24 deletions(-) diff --git a/src/aleph/web/controllers/storage.py b/src/aleph/web/controllers/storage.py index b9b40f293..5f5f5db8d 100644 --- a/src/aleph/web/controllers/storage.py +++ b/src/aleph/web/controllers/storage.py @@ -1,48 +1,42 @@ import base64 import logging from decimal import Decimal -from typing import Union, Optional, Protocol +from typing import Optional, Protocol, Union import aio_pika import pydantic from aiohttp import web from aiohttp.web_request import FileField -from aleph_message.models import ItemType, StoreContent -from mypy.dmypy_server import MiB -from pydantic import ValidationError - from aleph.chains.signature_verifier import SignatureVerifier from aleph.db.accessors.balances import get_total_balance from aleph.db.accessors.cost import get_total_cost_for_address -from aleph.db.accessors.files import ( - count_file_pins, - get_file, -) +from aleph.db.accessors.files import count_file_pins, get_file from aleph.exceptions import AlephStorageException, UnknownHashError from aleph.schemas.pending_messages import ( BasePendingMessage, - PendingStoreMessage, PendingInlineStoreMessage, + PendingStoreMessage, ) from aleph.storage import StorageService from aleph.types.db_session import DbSession -from aleph.types.message_status import ( - InvalidSignature, -) -from aleph.utils import run_in_executor, item_type_from_hash, get_sha256 +from aleph.types.message_status import InvalidSignature +from aleph.utils import get_sha256, item_type_from_hash, run_in_executor from aleph.web.controllers.app_state_getters import ( - get_session_factory_from_request, - get_storage_service_from_request, get_config_from_request, get_mq_channel_from_request, + get_session_factory_from_request, get_signature_verifier_from_request, + get_storage_service_from_request, ) from aleph.web.controllers.utils import ( - mq_make_aleph_message_topic_queue, + add_grace_period_for_file, broadcast_and_process_message, broadcast_status_to_http_status, - add_grace_period_for_file, + mq_make_aleph_message_topic_queue, ) +from aleph_message.models import ItemType, StoreContent +from mypy.dmypy_server import MiB +from pydantic import ValidationError logger = logging.getLogger(__name__) @@ -237,18 +231,13 @@ async def storage_add_file(request: web.Request): grace_period = config.storage.grace_period.value post = await request.post() - headers = request.headers try: file_field = post["file"] except KeyError: raise web.HTTPUnprocessableEntity(reason="Missing 'file' in multipart form.") if isinstance(file_field, FileField): - try: - content_length = int(headers.get("Content-Length", file_field.headers["Content-Length"])) - uploaded_file: UploadedFile = MultipartUploadedFile(file_field, content_length) - except (KeyError, ValueError): - raise web.HTTPUnprocessableEntity(reason="Invalid/missing Content-Length header.") + uploaded_file: UploadedFile = MultipartUploadedFile(file_field, len(file_field.file.read())) else: uploaded_file = RawUploadedFile(file_field)