From 434b4684153133a31f976ed99f524c9e4a4c2e4c Mon Sep 17 00:00:00 2001 From: mprahl Date: Jan 16 2020 19:39:46 +0000 Subject: Move proxy.py to web/proxy.py --- diff --git a/module_build_service/__init__.py b/module_build_service/__init__.py index d554b7d..cd1c091 100644 --- a/module_build_service/__init__.py +++ b/module_build_service/__init__.py @@ -35,7 +35,7 @@ from module_build_service.common.errors import ( ValidationError, Unauthorized, UnprocessableEntity, Conflict, NotFound, Forbidden, json_error) from module_build_service.common.config import init_config -from module_build_service.proxy import ReverseProxy +from module_build_service.web.proxy import ReverseProxy try: version = pkg_resources.get_distribution("module-build-service").version diff --git a/module_build_service/proxy.py b/module_build_service/proxy.py deleted file mode 100644 index c67a539..0000000 --- a/module_build_service/proxy.py +++ /dev/null @@ -1,39 +0,0 @@ -# -*- coding: utf-8 -*- -# SPDX-License-Identifier: MIT -""" -Allows MBS to run behind reverse proxy and to ensure redirects work with https. - -WSGI Middleware!! - -Source: http://flask.pocoo.org/snippets/35/ by Peter Hansen -""" - - -class ReverseProxy(object): - """Wrap the application in this middleware and configure the - front-end server to add these headers, to let you quietly bind - this to a URL other than / and to an HTTP scheme that is - different than what is used locally. - - :param app: the WSGI application - """ - - def __init__(self, app): - self.app = app - - def __call__(self, environ, start_response): - script_name = environ.get("HTTP_X_SCRIPT_NAME", "") - if script_name: - environ["SCRIPT_NAME"] = script_name - path_info = environ["PATH_INFO"] - if path_info.startswith(script_name): - environ["PATH_INFO"] = path_info[len(script_name):] - - server = environ.get("HTTP_X_FORWARDED_HOST", "") - if server: - environ["HTTP_HOST"] = server - - scheme = environ.get("HTTP_X_SCHEME", "") - if scheme: - environ["wsgi.url_scheme"] = scheme - return self.app(environ, start_response) diff --git a/module_build_service/web/proxy.py b/module_build_service/web/proxy.py new file mode 100644 index 0000000..c67a539 --- /dev/null +++ b/module_build_service/web/proxy.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# SPDX-License-Identifier: MIT +""" +Allows MBS to run behind reverse proxy and to ensure redirects work with https. + +WSGI Middleware!! + +Source: http://flask.pocoo.org/snippets/35/ by Peter Hansen +""" + + +class ReverseProxy(object): + """Wrap the application in this middleware and configure the + front-end server to add these headers, to let you quietly bind + this to a URL other than / and to an HTTP scheme that is + different than what is used locally. + + :param app: the WSGI application + """ + + def __init__(self, app): + self.app = app + + def __call__(self, environ, start_response): + script_name = environ.get("HTTP_X_SCRIPT_NAME", "") + if script_name: + environ["SCRIPT_NAME"] = script_name + path_info = environ["PATH_INFO"] + if path_info.startswith(script_name): + environ["PATH_INFO"] = path_info[len(script_name):] + + server = environ.get("HTTP_X_FORWARDED_HOST", "") + if server: + environ["HTTP_HOST"] = server + + scheme = environ.get("HTTP_X_SCHEME", "") + if scheme: + environ["wsgi.url_scheme"] = scheme + return self.app(environ, start_response)