summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Olof Gunnar Andersson <eandersson@blizzard.com>2019-10-20 21:13:52 -0700
committerErik Olof Gunnar Andersson <eandersson@blizzard.com>2020-03-16 02:46:20 +0000
commitd96ed3fa1a7cb0032505c5890005f8d9dfb0aea4 (patch)
tree2c59dc9519d6697a0e0cb9a5d5f5a6a28b7aa3e2
parentdd359ba38dc74868379f445983185a870a54cc55 (diff)
downloaddesignate-d96ed3fa1a7cb0032505c5890005f8d9dfb0aea4.tar.gz
Clean up api middlewares
Change-Id: I40755c3ccf6e0e8b354a3646715f04d57801f929
-rw-r--r--designate/api/middleware.py64
1 files changed, 29 insertions, 35 deletions
diff --git a/designate/api/middleware.py b/designate/api/middleware.py
index ce0b0bd2..07fd46b1 100644
--- a/designate/api/middleware.py
+++ b/designate/api/middleware.py
@@ -51,42 +51,45 @@ def auth_pipeline_factory(loader, global_conf, **local_conf):
class ContextMiddleware(base.Middleware):
- def _extract_sudo(self, ctxt, request):
- if request.headers.get('X-Auth-Sudo-Tenant-ID') or \
- request.headers.get('X-Auth-Sudo-Project-ID'):
- ctxt.sudo(
- request.headers.get('X-Auth-Sudo-Tenant-ID') or
- request.headers.get('X-Auth-Sudo-Project-ID')
- )
-
- def _extract_all_projects(self, ctxt, request):
+ @staticmethod
+ def _extract_sudo(ctxt, request):
+ if request.headers.get('X-Auth-Sudo-Project-ID'):
+ ctxt.sudo(request.headers.get('X-Auth-Sudo-Project-ID'))
+ elif request.headers.get('X-Auth-Sudo-Tenant-ID'):
+ ctxt.sudo(request.headers.get('X-Auth-Sudo-Tenant-ID'))
+
+ @staticmethod
+ def _extract_all_projects(ctxt, request):
ctxt.all_tenants = False
if request.headers.get('X-Auth-All-Projects'):
value = request.headers.get('X-Auth-All-Projects')
ctxt.all_tenants = strutils.bool_from_string(value)
- for i in ('all_projects', 'all_tenants', ):
- if i in request.GET:
- value = request.GET.pop(i)
+ for name in ('all_projects', 'all_tenants', ):
+ if name in request.GET:
+ value = request.GET.pop(name)
ctxt.all_tenants = strutils.bool_from_string(value)
- def _extract_dns_hide_counts(self, ctxt, request):
+ @staticmethod
+ def _extract_dns_hide_counts(ctxt, request):
ctxt.hide_counts = False
value = request.headers.get('OpenStack-DNS-Hide-Counts')
if value:
ctxt.hide_counts = strutils.bool_from_string(value)
- def _extract_edit_managed_records(self, ctxt, request):
+ @staticmethod
+ def _extract_edit_managed_records(ctxt, request):
ctxt.edit_managed_records = False
if 'edit_managed_records' in request.GET:
value = request.GET.pop('edit_managed_records')
ctxt.edit_managed_records = strutils.bool_from_string(value)
elif request.headers.get('X-Designate-Edit-Managed-Records'):
- ctxt.edit_managed_records = \
- strutils.bool_from_string(
- request.headers.get('X-Designate-Edit-Managed-Records'))
+ ctxt.edit_managed_records = strutils.bool_from_string(
+ request.headers.get('X-Designate-Edit-Managed-Records')
+ )
- def _extract_client_addr(self, ctxt, request):
+ @staticmethod
+ def _extract_client_addr(ctxt, request):
if hasattr(request, 'client_addr'):
ctxt.client_addr = request.client_addr
@@ -117,7 +120,7 @@ class KeystoneContextMiddleware(ContextMiddleware):
headers = request.headers
try:
- if headers['X-Identity-Status'] is 'Invalid':
+ if headers['X-Identity-Status'] == 'Invalid':
# TODO(graham) fix the return to use non-flask resources
return flask.Response(status=401)
except KeyError:
@@ -128,10 +131,9 @@ class KeystoneContextMiddleware(ContextMiddleware):
if tenant_id is None:
return flask.Response(status=401)
+ catalog = None
if headers.get('X-Service-Catalog'):
catalog = jsonutils.loads(headers.get('X-Service-Catalog'))
- else:
- catalog = None
roles = headers.get('X-Roles').split(',')
@@ -159,7 +161,7 @@ class NoAuthContextMiddleware(ContextMiddleware):
self.make_context(
request,
- auth_token=headers.get('X-Auth-Token', None),
+ auth_token=headers.get('X-Auth-Token'),
user_id=headers.get('X-Auth-User-ID', 'noauth-user'),
project_id=headers.get('X-Auth-Project-ID', 'noauth-project'),
roles=headers.get('X-Roles', 'admin').split(',')
@@ -305,11 +307,11 @@ class FaultWrapperMiddleware(base.Middleware):
response=jsonutils.dump_as_bytes(response))
-class ValidationErrorMiddleware(base.Middleware):
+class APIv2ValidationErrorMiddleware(base.Middleware):
def __init__(self, application):
- super(ValidationErrorMiddleware, self).__init__(application)
-
+ super(APIv2ValidationErrorMiddleware, self).__init__(application)
+ self.api_version = 'API_v2'
LOG.info('Starting designate validation middleware')
@webob.dec.wsgify
@@ -323,7 +325,6 @@ class ValidationErrorMiddleware(base.Middleware):
return self._handle_errors(request, e)
def _handle_errors(self, request, exception):
-
response = {}
headers = [
@@ -331,14 +332,13 @@ class ValidationErrorMiddleware(base.Middleware):
]
rendered_errors = DesignateAdapter.render(
- self.api_version, exception.errors, failed_object=exception.object)
+ self.api_version, exception.errors, failed_object=exception.object
+ )
url = getattr(request, 'url', None)
response['code'] = exception.error_code
-
response['type'] = exception.error_type or 'unknown'
-
response['errors'] = rendered_errors
# Return the new response
@@ -354,9 +354,3 @@ class ValidationErrorMiddleware(base.Middleware):
return flask.Response(status=exception.error_code, headers=headers,
response=jsonutils.dump_as_bytes(response))
-
-
-class APIv2ValidationErrorMiddleware(ValidationErrorMiddleware):
- def __init__(self, application):
- super(APIv2ValidationErrorMiddleware, self).__init__(application)
- self.api_version = 'API_v2'