Skip to content

Commit

Permalink
Fix upload when content-type is not provided
Browse files Browse the repository at this point in the history
  • Loading branch information
aliel committed Feb 27, 2024
1 parent e7877d5 commit d6a39db
Showing 1 changed file with 13 additions and 24 deletions.
37 changes: 13 additions & 24 deletions src/aleph/web/controllers/storage.py
Original file line number Diff line number Diff line change
@@ -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__)

Expand Down Expand Up @@ -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)

Expand Down

0 comments on commit d6a39db

Please sign in to comment.