summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2023-03-08 08:04:19 +0000
committerGerrit Code Review <review@openstack.org>2023-03-08 08:04:19 +0000
commit28cb0c30d90c4e227d9880fa9492729d2c08fbfd (patch)
treede4c96bc04bbde8d1ff337dcc834987d06496914
parenta2952962d2f451d63b482646e23f515be9b00b86 (diff)
parent21b3f1af98d34df6e56fcd2320615bdd2c3404bf (diff)
downloadswift-28cb0c30d90c4e227d9880fa9492729d2c08fbfd.tar.gz
Merge "quotas: Move account-level handling to a separate function"
-rw-r--r--swift/common/middleware/account_quotas.py45
1 files changed, 25 insertions, 20 deletions
diff --git a/swift/common/middleware/account_quotas.py b/swift/common/middleware/account_quotas.py
index cd41e34da..cc2792fd4 100644
--- a/swift/common/middleware/account_quotas.py
+++ b/swift/common/middleware/account_quotas.py
@@ -67,6 +67,24 @@ class AccountQuotaMiddleware(object):
def __init__(self, app, *args, **kwargs):
self.app = app
+ def handle_account(self, request):
+ # account request, so we pay attention to the quotas
+ new_quota = request.headers.get(
+ 'X-Account-Meta-Quota-Bytes')
+ if request.headers.get(
+ 'X-Remove-Account-Meta-Quota-Bytes'):
+ new_quota = 0 # X-Remove dominates if both are present
+
+ if request.environ.get('reseller_request') is True:
+ if new_quota and not new_quota.isdigit():
+ return HTTPBadRequest()
+ return self.app
+
+ # deny quota set for non-reseller
+ if new_quota is not None:
+ return HTTPForbidden()
+ return self.app
+
@wsgify
def __call__(self, request):
@@ -80,29 +98,16 @@ class AccountQuotaMiddleware(object):
return self.app
if not container:
- # account request, so we pay attention to the quotas
- new_quota = request.headers.get(
- 'X-Account-Meta-Quota-Bytes')
- remove_quota = request.headers.get(
- 'X-Remove-Account-Meta-Quota-Bytes')
- else:
- # container or object request; even if the quota headers are set
- # in the request, they're meaningless
- new_quota = remove_quota = None
-
- if remove_quota:
- new_quota = 0 # X-Remove dominates if both are present
+ return self.handle_account(request)
+ # container or object request; even if the quota headers are set
+ # in the request, they're meaningless
- if request.environ.get('reseller_request') is True:
- if new_quota and not new_quota.isdigit():
- return HTTPBadRequest()
+ if request.method == "POST" or not obj:
return self.app
+ # OK, object PUT
- # deny quota set for non-reseller
- if new_quota is not None:
- return HTTPForbidden()
-
- if request.method == "POST" or not obj:
+ if request.environ.get('reseller_request') is True:
+ # but resellers aren't constrained by quotas :-)
return self.app
content_length = (request.content_length or 0)