validate_modification_preconditions, validate_matching_preconditions, split_container_object_string,
copy_or_move_object, get_int_parameter, get_content_length, get_content_range, socket_read_iterator,
SaveToBackendHandler, object_data_response, put_object_block, hashmap_md5, simple_list_response, api_method)
-from pithos.api.settings import AUTHENTICATION_URL, AUTHENTICATION_USERS, COOKIE_NAME, UPDATE_MD5
+from pithos.api.settings import UPDATE_MD5
from pithos.backends.base import NotAllowedError, QuotaError
from pithos.backends.filter import parse_filters
@csrf_exempt
def top_demux(request):
- get_user(request, AUTHENTICATION_URL, AUTHENTICATION_USERS)
if request.method == 'GET':
- if getattr(request, 'user', None) is not None:
- return account_list(request)
- return authenticate(request)
+ return account_list(request)
else:
return method_not_allowed(request)
@csrf_exempt
def account_demux(request, v_account):
- get_user(request, AUTHENTICATION_URL, AUTHENTICATION_USERS)
if request.method == 'HEAD':
return account_meta(request, v_account)
elif request.method == 'POST':
@csrf_exempt
def container_demux(request, v_account, v_container):
- get_user(request, AUTHENTICATION_URL, AUTHENTICATION_USERS)
if request.method == 'HEAD':
return container_meta(request, v_account, v_container)
elif request.method == 'PUT':
@csrf_exempt
def object_demux(request, v_account, v_container, v_object):
# Helper to avoid placing the token in the URL when loading objects from a browser.
- token = None
- if request.method in ('HEAD', 'GET') and COOKIE_NAME in request.COOKIES:
- cookie_value = unquote(request.COOKIES.get(COOKIE_NAME, ''))
- if cookie_value and '|' in cookie_value:
- token = cookie_value.split('|', 1)[1]
- get_user(request, AUTHENTICATION_URL, AUTHENTICATION_USERS, token)
if request.method == 'HEAD':
return object_meta(request, v_account, v_container, v_object)
elif request.method == 'GET':
# Normal Response Codes: 200, 204
# Error Response Codes: internalServerError (500),
# badRequest (400)
+ if getattr(request, 'user', None) is None:
+ return authenticate(request)
response = HttpResponse()
copy_from = request.META.get('HTTP_X_COPY_FROM')
move_from = request.META.get('HTTP_X_MOVE_FROM')
if copy_from or move_from:
+ delimiter = request.GET.get('delimiter')
content_length = get_content_length(request) # Required by the API.
src_account = request.META.get('HTTP_X_SOURCE_ACCOUNT')
except ValueError:
raise BadRequest('Invalid X-Move-From header')
version_id = copy_or_move_object(request, src_account, src_container, src_name,
- v_account, v_container, v_object, move=True)
+ v_account, v_container, v_object, move=True, delimiter=delimiter)
else:
try:
src_container, src_name = split_container_object_string(copy_from)
except ValueError:
raise BadRequest('Invalid X-Copy-From header')
version_id = copy_or_move_object(request, src_account, src_container, src_name,
- v_account, v_container, v_object, move=False)
+ v_account, v_container, v_object, move=False, delimiter=delimiter)
response = HttpResponse(status=201)
response['X-Object-Version'] = version_id
return response
raise ItemNotFound('Container or object does not exist')
validate_matching_preconditions(request, meta)
+ delimiter = request.GET.get('delimiter')
+
version_id = copy_or_move_object(request, v_account, v_container, v_object,
- dest_account, dest_container, dest_name, move=False)
+ dest_account, dest_container, dest_name, move=False, delimiter=delimiter)
response = HttpResponse(status=201)
response['X-Object-Version'] = version_id
return response
raise ItemNotFound('Container or object does not exist')
validate_matching_preconditions(request, meta)
+ delimiter = request.GET.get('delimiter')
+
version_id = copy_or_move_object(request, v_account, v_container, v_object,
- dest_account, dest_container, dest_name, move=True)
+ dest_account, dest_container, dest_name, move=True, delimiter=delimiter)
response = HttpResponse(status=201)
response['X-Object-Version'] = version_id
return response
# badRequest (400)
until = get_int_parameter(request.GET.get('until'))
+ delimiter = request.GET.get('delimiter')
+
try:
request.backend.delete_object(request.user_uniq, v_account, v_container,
- v_object, until)
+ v_object, until, delimiter=delimiter)
except NotAllowedError:
raise Forbidden('Not allowed')
except NameError: