diff options
author | Zuul <zuul@review.opendev.org> | 2023-03-08 08:04:19 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2023-03-08 08:04:19 +0000 |
commit | 28cb0c30d90c4e227d9880fa9492729d2c08fbfd (patch) | |
tree | de4c96bc04bbde8d1ff337dcc834987d06496914 | |
parent | a2952962d2f451d63b482646e23f515be9b00b86 (diff) | |
parent | 21b3f1af98d34df6e56fcd2320615bdd2c3404bf (diff) | |
download | swift-28cb0c30d90c4e227d9880fa9492729d2c08fbfd.tar.gz |
Merge "quotas: Move account-level handling to a separate function"
-rw-r--r-- | swift/common/middleware/account_quotas.py | 45 |
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) |