Clean up api middlewares

Change-Id: I40755c3ccf6e0e8b354a3646715f04d57801f929
This commit is contained in:
Erik Olof Gunnar Andersson 2019-10-20 21:13:52 -07:00
parent dd359ba38d
commit d96ed3fa1a
1 changed files with 28 additions and 34 deletions

View File

@ -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')
)
@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'))
def _extract_all_projects(self, ctxt, request):
@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'