summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorianb <ianb@localhost>2006-10-20 23:03:26 +0000
committerianb <ianb@localhost>2006-10-20 23:03:26 +0000
commit703a4e59c34982e8271df6f5db8a6b9fca48cded (patch)
tree5400819aea814b3ab9e32e849a08e46800a656a2
parentcb98fa8b0bbab716cf1da062369506c3c097149d (diff)
downloadpastedeploy-git-703a4e59c34982e8271df6f5db8a6b9fca48cded.tar.gz
Added X-Forwarded-Host translation
-rw-r--r--docs/news.txt3
-rw-r--r--paste/deploy/config.py22
-rw-r--r--setup.py2
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__
diff --git a/setup.py b/setup.py
index 2e260d1..8c0a98e 100644
--- a/setup.py
+++ b/setup.py
@@ -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