diff options
author | ianb <ianb@localhost> | 2006-10-20 23:03:26 +0000 |
---|---|---|
committer | ianb <ianb@localhost> | 2006-10-20 23:03:26 +0000 |
commit | 703a4e59c34982e8271df6f5db8a6b9fca48cded (patch) | |
tree | 5400819aea814b3ab9e32e849a08e46800a656a2 | |
parent | cb98fa8b0bbab716cf1da062369506c3c097149d (diff) | |
download | pastedeploy-git-703a4e59c34982e8271df6f5db8a6b9fca48cded.tar.gz |
Added X-Forwarded-Host translation
-rw-r--r-- | docs/news.txt | 3 | ||||
-rw-r--r-- | paste/deploy/config.py | 22 | ||||
-rw-r--r-- | setup.py | 2 |
3 files changed, 25 insertions, 2 deletions
diff --git a/docs/news.txt b/docs/news.txt index ba21c72..6749e36 100644 --- a/docs/news.txt +++ b/docs/news.txt @@ -7,6 +7,9 @@ svn trunk * Added some documentation for the different kinds of entry points Paste Deploy uses. +* Added a feature to ``PrefixMiddleware`` that translates the + ``X-Forwarded-Server`` header to ``Host``. + 0.9.6 ----- diff --git a/paste/deploy/config.py b/paste/deploy/config.py index 9a07660..608efdf 100644 --- a/paste/deploy/config.py +++ b/paste/deploy/config.py @@ -218,11 +218,17 @@ class PrefixMiddleware(object): The name ``proxy-prefix`` simply acts as an identifier of the filter section; feel free to rename it. + + Also, unless disabled, the ``X-Forwarded-Server`` header will be + translated to the ``Host`` header, for cases when that header is + lost in the proxying. """ - def __init__(self, app, global_conf=None, prefix='/'): + def __init__(self, app, global_conf=None, prefix='/', + translate_forwarded_server=True): self.app = app self.prefix = prefix + self.translate_forwarded_server = translate_forwarded_server self.regprefix = re.compile("^%s(.*)$" % self.prefix) def __call__(self, environ, start_response): @@ -231,4 +237,18 @@ class PrefixMiddleware(object): if not url: url = '/' environ['PATH_INFO'] = url environ['SCRIPT_NAME'] = self.prefix + if (self.translate_forwarded_server and + 'HTTP_X_FORWARDED_SERVER' in environ): + environ['HTTP_HOST'] = environ.pop('HTTP_X_FORWARDED_SERVER') return self.app(environ, start_response) + +def make_prefix_middleware( + app, global_conf, prefix='/', + translate_forwarded_server=True): + from paste.deploy.converters import asbool + translate_forwarded_server = asbool(translate_forwarded_server) + return PrefixMiddleware( + app, prefix=prefix, + translate_forwarded_server=translate_forwarded_server) + +make_prefix_middleware.__doc__ = PrefixMiddleware.__doc__ @@ -45,7 +45,7 @@ For the latest changes see the `news file entry_points=""" [paste.filter_app_factory] config = paste.deploy.config:make_config_filter [Config] - prefix = paste.deploy.config:PrefixMiddleware + prefix = paste.deploy.config:make_prefix_middleware [paste.paster_create_template] paste_deploy=paste.deploy.paster_templates:PasteDeploy |