Replace the request's is_secure call with one that checks for the X-Forwarded-Protoco...
authorAntony Chazapis <chazapis@gmail.com>
Wed, 14 Dec 2011 14:21:44 +0000 (16:21 +0200)
committerroot <root@pithos.dev.grnet.gr>
Wed, 14 Dec 2011 14:21:44 +0000 (16:21 +0200)
Refs #1765

README.upgrade
docs/source/adminguide.rst
pithos/middleware/__init__.py
pithos/middleware/secure.py [new file with mode: 0644]
pithos/settings.d/00-apps.conf

index e8235f1..f7e049d 100644 (file)
@@ -39,3 +39,7 @@ UPGRADE
 * Reset 'policy' table in mysql (backend):
     
     mysql> update policy set `value`='auto' where `key`='versioning';
+
+0.8.1 -> 0.8.2
+--------------
+* Add the 'X-Forwarded-Protocol' header directive in the apache configuration, as described in the admin guide
index fffcdde..6398c9e 100644 (file)
@@ -51,6 +51,8 @@ Edit ``/etc/apache2/sites-available/pithos`` (change the ``ServerName`` directiv
     RewriteRule ^/im(.*) https://%{HTTP_HOST}%{REQUEST_URI} [NE]
     RewriteRule ^/login(.*) https://%{HTTP_HOST}%{REQUEST_URI} [NE]
 
+    RequestHeader set X-Forwarded-Protocol "http"
+
     WSGIScriptAlias /api /pithos/pithos/wsgi/pithos.wsgi
     # WSGIDaemonProcess pithos
     # WSGIProcessGroup pithos
@@ -85,6 +87,8 @@ Edit ``/etc/apache2/sites-available/pithos-ssl`` (assuming files in ``/etc/ssl/p
     RewriteRule ^/im(.*) /api/im$1 [PT,NE]
     RewriteRule ^/login(.*) /api/im/login/dummy$1 [PT,NE]
 
+    RequestHeader set X-Forwarded-Protocol "https"
+
     WSGIScriptAlias /api /pithos/pithos/wsgi/pithos.wsgi
     # WSGIDaemonProcess pithos
     # WSGIProcessGroup pithos
index dcd24c5..28476e7 100644 (file)
@@ -1,2 +1,3 @@
 from log import LoggingConfigMiddleware
+from secure import SecureMiddleware
 from auth import AuthMiddleware
diff --git a/pithos/middleware/secure.py b/pithos/middleware/secure.py
new file mode 100644 (file)
index 0000000..b109fac
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright 2011 GRNET S.A. All rights reserved.
+# 
+# Redistribution and use in source and binary forms, with or
+# without modification, are permitted provided that the following
+# conditions are met:
+# 
+#   1. Redistributions of source code must retain the above
+#      copyright notice, this list of conditions and the following
+#      disclaimer.
+# 
+#   2. Redistributions in binary form must reproduce the above
+#      copyright notice, this list of conditions and the following
+#      disclaimer in the documentation and/or other materials
+#      provided with the distribution.
+# 
+# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
+# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+# 
+# The views and conclusions contained in the software and
+# documentation are those of the authors and should not be
+# interpreted as representing official policies, either expressed
+# or implied, of GRNET S.A.
+
+class SecureMiddleware(object):
+    def process_request(self, request):
+        if 'HTTP_X_FORWARDED_PROTOCOL' in request.META:
+            request.is_secure = lambda: request.META['HTTP_X_FORWARDED_PROTOCOL'] == 'https'
index 453547b..e5c8d50 100644 (file)
@@ -7,6 +7,7 @@ TEMPLATE_LOADERS = (
 MIDDLEWARE_CLASSES = (
     'django.middleware.common.CommonMiddleware',
     'pithos.middleware.LoggingConfigMiddleware',
+    'pithos.middleware.SecureMiddleware',
     'pithos.middleware.AuthMiddleware'
 )