mirror of
https://github.com/ansible/awx.git
synced 2024-10-27 09:25:10 +03:00
Make custom middleware use new style vs old
This commit is contained in:
parent
97dc77ea63
commit
68800d0e8e
@ -35,11 +35,20 @@ class TimingMiddleware(threading.local):
|
||||
|
||||
dest = '/var/log/tower/profile'
|
||||
|
||||
def __init__(self, get_response):
|
||||
self.get_response = get_response
|
||||
|
||||
def __call__(self, request):
|
||||
response = self.process_request(request)
|
||||
response = self.process_response(request, response)
|
||||
return response
|
||||
|
||||
def process_request(self, request):
|
||||
self.start_time = time.time()
|
||||
if settings.AWX_REQUEST_PROFILE:
|
||||
self.prof = cProfile.Profile()
|
||||
self.prof.enable()
|
||||
return self.get_response(request)
|
||||
|
||||
def process_response(self, request, response):
|
||||
if not hasattr(self, 'start_time'): # some tools may not invoke process_request
|
||||
@ -66,9 +75,15 @@ class TimingMiddleware(threading.local):
|
||||
|
||||
class ActivityStreamMiddleware(threading.local):
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, get_response):
|
||||
self.disp_uid = None
|
||||
self.instance_ids = []
|
||||
self.get_response = get_response
|
||||
|
||||
def __call__(self, request):
|
||||
response = self.process_request(request)
|
||||
response = self.process_response(request, response)
|
||||
return response
|
||||
|
||||
def process_request(self, request):
|
||||
if hasattr(request, 'user') and hasattr(request.user, 'is_authenticated') and request.user.is_authenticated():
|
||||
@ -80,6 +95,7 @@ class ActivityStreamMiddleware(threading.local):
|
||||
self.disp_uid = str(uuid.uuid1())
|
||||
self.instance_ids = []
|
||||
post_save.connect(set_actor, sender=ActivityStream, dispatch_uid=self.disp_uid, weak=False)
|
||||
return self.get_response(request)
|
||||
|
||||
def process_response(self, request, response):
|
||||
drf_request = getattr(request, 'drf_request', None)
|
||||
@ -124,6 +140,14 @@ class SessionTimeoutMiddleware(object):
|
||||
to the value of SESSION_COOKIE_AGE on every request if there is a valid session.
|
||||
"""
|
||||
|
||||
def __init__(self, get_response):
|
||||
self.get_response = get_response
|
||||
|
||||
def __call__(self, request):
|
||||
response = self.get_response(request)
|
||||
response = self.process_response(request, response)
|
||||
return response
|
||||
|
||||
def process_response(self, request, response):
|
||||
should_skip = 'HTTP_X_WS_SESSION_QUIET' in request.META
|
||||
# Something went wrong, such as upgrade-in-progress page
|
||||
@ -153,7 +177,8 @@ def _customize_graph():
|
||||
|
||||
class URLModificationMiddleware(object):
|
||||
|
||||
def __init__(self):
|
||||
def __init__(self, get_response):
|
||||
self.get_response = get_response
|
||||
models = [m for m in apps.get_app_config('main').get_models() if hasattr(m, 'get_absolute_url')]
|
||||
generate_graph(models)
|
||||
_customize_graph()
|
||||
@ -195,6 +220,10 @@ class URLModificationMiddleware(object):
|
||||
url_units[4])
|
||||
return '/'.join(url_units)
|
||||
|
||||
def __call__(self, request):
|
||||
response = self.process_request(request)
|
||||
return response
|
||||
|
||||
def process_request(self, request):
|
||||
if hasattr(request, 'environ') and 'REQUEST_URI' in request.environ:
|
||||
old_path = urllib.parse.urlsplit(request.environ['REQUEST_URI']).path
|
||||
@ -205,13 +234,22 @@ class URLModificationMiddleware(object):
|
||||
if request.path_info != new_path:
|
||||
request.path = request.path.replace(request.path_info, new_path)
|
||||
request.path_info = new_path
|
||||
return self.get_response(request)
|
||||
|
||||
|
||||
class MigrationRanCheckMiddleware(object):
|
||||
|
||||
def __init__(self, get_response):
|
||||
self.get_response = get_response
|
||||
|
||||
def __call__(self, request):
|
||||
response = self.process_request(request)
|
||||
return response
|
||||
|
||||
def process_request(self, request):
|
||||
executor = MigrationExecutor(connection)
|
||||
plan = executor.migration_plan(executor.loader.graph.leaf_nodes())
|
||||
if bool(plan) and \
|
||||
getattr(resolve(request.path), 'url_name', '') != 'migrations_notran':
|
||||
return redirect(reverse("ui:migrations_notran"))
|
||||
return self.get_response(request)
|
||||
|
@ -251,29 +251,11 @@ TEMPLATES = [
|
||||
},
|
||||
]
|
||||
|
||||
MIDDLEWARE = ( # NOQA
|
||||
'awx.main.middleware.TimingMiddleware',
|
||||
'awx.main.middleware.MigrationRanCheckMiddleware',
|
||||
'corsheaders.middleware.CorsMiddleware',
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.middleware.locale.LocaleMiddleware',
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
'awx.main.middleware.ActivityStreamMiddleware',
|
||||
'awx.sso.middleware.SocialAuthMiddleware',
|
||||
'crum.CurrentRequestUserMiddleware',
|
||||
'awx.main.middleware.URLModificationMiddleware',
|
||||
'awx.main.middleware.SessionTimeoutMiddleware',
|
||||
)
|
||||
|
||||
|
||||
ROOT_URLCONF = 'awx.urls'
|
||||
|
||||
WSGI_APPLICATION = 'awx.wsgi.application'
|
||||
|
||||
INSTALLED_APPS = (
|
||||
INSTALLED_APPS = [
|
||||
'django.contrib.auth',
|
||||
'django.contrib.contenttypes',
|
||||
'django.contrib.messages',
|
||||
@ -294,7 +276,7 @@ INSTALLED_APPS = (
|
||||
'awx.ui',
|
||||
'awx.sso',
|
||||
'solo'
|
||||
)
|
||||
]
|
||||
|
||||
INTERNAL_IPS = ('127.0.0.1',)
|
||||
|
||||
@ -447,16 +429,6 @@ AWX_ISOLATED_VERBOSITY = 0
|
||||
# }
|
||||
# }
|
||||
|
||||
# Use Django-Debug-Toolbar if installed.
|
||||
try:
|
||||
import debug_toolbar
|
||||
INSTALLED_APPS += (debug_toolbar.__name__,)
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
DEBUG_TOOLBAR_CONFIG = {
|
||||
'ENABLE_STACKTRACES' : True,
|
||||
}
|
||||
|
||||
DEVSERVER_DEFAULT_ADDR = '0.0.0.0'
|
||||
DEVSERVER_DEFAULT_PORT = '8013'
|
||||
@ -1211,3 +1183,21 @@ AWX_REQUEST_PROFILE = False
|
||||
|
||||
# Delete temporary directories created to store playbook run-time
|
||||
AWX_CLEANUP_PATHS = True
|
||||
|
||||
MIDDLEWARE = [ # NOQA
|
||||
'awx.main.middleware.TimingMiddleware',
|
||||
'awx.main.middleware.MigrationRanCheckMiddleware',
|
||||
'corsheaders.middleware.CorsMiddleware',
|
||||
'django.contrib.sessions.middleware.SessionMiddleware',
|
||||
'django.middleware.locale.LocaleMiddleware',
|
||||
'django.middleware.common.CommonMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
||||
'django.contrib.messages.middleware.MessageMiddleware',
|
||||
'awx.main.middleware.ActivityStreamMiddleware',
|
||||
'awx.sso.middleware.SocialAuthMiddleware',
|
||||
'crum.CurrentRequestUserMiddleware',
|
||||
'awx.main.middleware.URLModificationMiddleware',
|
||||
'awx.main.middleware.SessionTimeoutMiddleware',
|
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||
]
|
||||
|
@ -93,7 +93,7 @@ INSIGHTS_TRACKING_STATE = False
|
||||
# Use Django-Jenkins if installed. Only run tests for awx.main app.
|
||||
try:
|
||||
import django_jenkins
|
||||
INSTALLED_APPS += (django_jenkins.__name__,) # noqa
|
||||
INSTALLED_APPS += [django_jenkins.__name__,] # noqa
|
||||
PROJECT_APPS = ('awx.main.tests', 'awx.api.tests',)
|
||||
except ImportError:
|
||||
pass
|
||||
@ -112,7 +112,18 @@ if 'django_jenkins' in INSTALLED_APPS:
|
||||
PEP8_RCFILE = "setup.cfg"
|
||||
PYLINT_RCFILE = ".pylintrc"
|
||||
|
||||
INSTALLED_APPS += ('rest_framework_swagger',)
|
||||
INSTALLED_APPS += [ # NOQA
|
||||
'rest_framework_swagger',
|
||||
'debug_toolbar',
|
||||
]
|
||||
|
||||
MIDDLEWARE += [ # NOQA
|
||||
'debug_toolbar.middleware.DebugToolbarMiddleware',
|
||||
]
|
||||
|
||||
DEBUG_TOOLBAR_CONFIG = {
|
||||
'ENABLE_STACKTRACES' : True,
|
||||
}
|
||||
|
||||
# Configure a default UUID for development only.
|
||||
SYSTEM_UUID = '00000000-0000-0000-0000-000000000000'
|
||||
@ -162,9 +173,3 @@ except Exception:
|
||||
os.environ['SDB_NOTIFY_HOST'] = os.popen('ip route').read().split(' ')[2]
|
||||
|
||||
WEBSOCKET_ORIGIN_WHITELIST = ['https://localhost:8043', 'https://localhost:3000']
|
||||
|
||||
MIDDLEWARE = [
|
||||
# ...
|
||||
'debug_toolbar.middleware.DebugToolbarMiddleware',
|
||||
# ...
|
||||
]
|
||||
|
@ -4,8 +4,6 @@
|
||||
# Python
|
||||
import urllib.parse
|
||||
|
||||
# Six
|
||||
|
||||
# Django
|
||||
from django.conf import settings
|
||||
from django.utils.functional import LazyObject
|
||||
@ -20,9 +18,12 @@ from social_django.middleware import SocialAuthExceptionMiddleware
|
||||
|
||||
class SocialAuthMiddleware(SocialAuthExceptionMiddleware):
|
||||
|
||||
def process_view(self, request, callback, callback_args, callback_kwargs):
|
||||
if request.path.startswith('/sso/login/'):
|
||||
request.session['social_auth_last_backend'] = callback_kwargs['backend']
|
||||
def __init__(self, get_response):
|
||||
self.get_response = get_response
|
||||
|
||||
def __call__(self, request):
|
||||
response = self.process_request(request)
|
||||
return response
|
||||
|
||||
def process_request(self, request):
|
||||
if request.path.startswith('/sso'):
|
||||
@ -53,6 +54,11 @@ class SocialAuthMiddleware(SocialAuthExceptionMiddleware):
|
||||
request.user = request.user._wrapped
|
||||
request.session.pop('social_auth_error', None)
|
||||
request.session.pop('social_auth_last_backend', None)
|
||||
return self.get_response(request)
|
||||
|
||||
def process_view(self, request, callback, callback_args, callback_kwargs):
|
||||
if request.path.startswith('/sso/login/'):
|
||||
request.session['social_auth_last_backend'] = callback_kwargs['backend']
|
||||
|
||||
def process_exception(self, request, exception):
|
||||
strategy = getattr(request, 'social_strategy', None)
|
||||
|
15
awx/wsgi.py
15
awx/wsgi.py
@ -41,22 +41,13 @@ if social_django.__version__ != '2.1.0':
|
||||
still works".format(social_django.__version__))
|
||||
|
||||
|
||||
if django.__version__ != '1.11.20':
|
||||
raise RuntimeError("Django version other than 1.11.20 detected {}. \
|
||||
if not django.__version__.startswith('1.'):
|
||||
raise RuntimeError("Django version other than 1.XX detected {}. \
|
||||
Inherit from WSGIHandler to support short-circuit Django Middleware. \
|
||||
This is known to work for Django 1.11.20 and may not work with other, \
|
||||
This is known to work for Django 1.XX and may not work with other, \
|
||||
even minor, versions.".format(django.__version__))
|
||||
|
||||
|
||||
if settings.MIDDLEWARE:
|
||||
raise RuntimeError("MIDDLEWARE setting detected. \
|
||||
The 'migration in progress' view feature short-circuits OLD Django \
|
||||
MIDDLEWARE_CLASSES behavior. With the new Django MIDDLEWARE beahvior \
|
||||
it's possible to short-ciruit the middleware onion through supported \
|
||||
middleware mechanisms. Further, from django.core.wsgi.get_wsgi_application() \
|
||||
should be called to get an instance of WSGIHandler().")
|
||||
|
||||
|
||||
class AWXWSGIHandler(WSGIHandler):
|
||||
def _legacy_get_response(self, request):
|
||||
try:
|
||||
|
Loading…
Reference in New Issue
Block a user