diff --git a/pylons_app/config/middleware.py b/pylons_app/config/middleware.py --- a/pylons_app/config/middleware.py +++ b/pylons_app/config/middleware.py @@ -7,7 +7,8 @@ from paste.deploy.converters import asbo from pylons.middleware import ErrorHandler, StatusCodeRedirect from pylons.wsgiapp import PylonsApp from routes.middleware import RoutesMiddleware -from pylons_app.lib.simplehg import SimpleHg +from pylons_app.lib.middleware.simplehg import SimpleHg +from pylons_app.lib.middleware.https_fixup import HttpsFixup from pylons_app.config.environment import load_environment def make_app(global_conf, full_stack=True, static_files=True, **app_conf): @@ -41,7 +42,9 @@ def make_app(global_conf, full_stack=Tru app = RoutesMiddleware(app, config['routes.map']) app = SessionMiddleware(app, config) - # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares) + # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares) + #set the https based on HTTP_X_URL_SCHEME + app = HttpsFixup(app) app = SimpleHg(app, config) if asbool(full_stack): diff --git a/pylons_app/lib/hgapp.py b/pylons_app/lib/hgapp.py deleted file mode 100644 --- a/pylons_app/lib/hgapp.py +++ /dev/null @@ -1,26 +0,0 @@ -import logging -from logging import Formatter, StreamHandler -from wsgiref.simple_server import make_server -from mercurial.hgweb.hgwebdir_mod import hgwebdir -from mercurial.hgweb.request import wsgiapplication - -log = logging.getLogger(__name__) -log.setLevel(logging.DEBUG) -formatter = Formatter("%(asctime)s - %(levelname)s %(message)s") -console_handler = StreamHandler() -console_handler.setFormatter(formatter) -log.addHandler(console_handler) - -def make_web_app(): - - repos = "hgwebdir.config" - hgwebapp = hgwebdir(repos) - return hgwebapp - -port = 8000 -ip = '127.0.0.1' - -log.info('Starting server on %s:%s' % (ip, port)) -httpd = make_server(ip, port, wsgiapplication(make_web_app)) -httpd.serve_forever() - diff --git a/pylons_app/lib/middleware/__init__.py b/pylons_app/lib/middleware/__init__.py new file mode 100644 diff --git a/pylons_app/lib/middleware/https_fixup.py b/pylons_app/lib/middleware/https_fixup.py new file mode 100644 --- /dev/null +++ b/pylons_app/lib/middleware/https_fixup.py @@ -0,0 +1,21 @@ +class HttpsFixup(object): + def __init__(self, app): + self.application = app + + def __call__(self, environ, start_response): + self.__fixup(environ) + return self.application(environ, start_response) + + + def __fixup(self, environ): + """Function to fixup the environ as needed. In order to use this + middleware you should set this header inside your + proxy ie. nginx, apache etc. + """ + proto = environ.get('HTTP_X_URL_SCHEME') + + if proto == 'https': + environ['wsgi.url_scheme'] = proto + else: + environ['wsgi.url_scheme'] = 'http' + return None diff --git a/pylons_app/lib/simplehg.py b/pylons_app/lib/middleware/simplehg.py rename from pylons_app/lib/simplehg.py rename to pylons_app/lib/middleware/simplehg.py --- a/pylons_app/lib/simplehg.py +++ b/pylons_app/lib/middleware/simplehg.py @@ -34,8 +34,6 @@ class SimpleHg(object): self.authenticate = AuthBasicAuthenticator(realm, authfunc) def __call__(self, environ, start_response): - #dirty fix for https - environ['wsgi.url_scheme'] = 'https' if not is_mercurial(environ): return self.application(environ, start_response) else: