changeset 3802:9c91d3e4a11c

fix broken handling of adding an htsts. Modifing response/request was having trouble in some redirect cases
author Marcin Kuzminski <marcin@python-works.com>
date Sat, 27 Apr 2013 01:47:56 +0200
parents 5135f14b316e
children b95f383f428d
files rhodecode/lib/middleware/https_fixup.py
diffstat 1 files changed, 8 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/rhodecode/lib/middleware/https_fixup.py	Fri Apr 26 14:14:46 2013 +0200
+++ b/rhodecode/lib/middleware/https_fixup.py	Sat Apr 27 01:47:56 2013 +0200
@@ -23,7 +23,6 @@
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-from pylons.controllers.util import Request
 from rhodecode.lib.utils2 import str2bool
 
 
@@ -36,15 +35,15 @@
     def __call__(self, environ, start_response):
         self.__fixup(environ)
         debug = str2bool(self.config.get('debug'))
-        if str2bool(self.config.get('use_htsts')) and not debug:
-            req = Request(environ, self.application)
-            resp = req.get_response(self.application)
-            if environ['wsgi.url_scheme'] == 'https':
-                resp.headers['Strict-Transport-Security'] = \
-                    'max-age=8640000; includeSubDomains'
-            return resp(environ, start_response)
+        is_ssl = environ['wsgi.url_scheme'] == 'https'
 
-        return self.application(environ, start_response)
+        def custom_start_response(status, headers, exc_info=None):
+            if is_ssl and str2bool(self.config.get('use_htsts')) and not debug:
+                headers.append(('Strict-Transport-Security',
+                                'max-age=8640000; includeSubDomains'))
+            return start_response(status, headers, exc_info)
+
+        return self.application(environ, custom_start_response)
 
     def __fixup(self, environ):
         """