[Secure-testing-commits] r26143 - lib/python

Florian Weimer fw at moszumanska.debian.org
Mon Mar 17 10:57:24 UTC 2014


Author: fw
Date: 2014-03-17 10:57:24 +0000 (Mon, 17 Mar 2014)
New Revision: 26143

Modified:
   lib/python/web_support.py
Log:
web_support: Pass down https:// URLs to sever redirects

This is required because security-tracker.debian.org sets STS and
redirects to HTTPS, and recent Firefox versions do not handle http://
redirects in this context.


Modified: lib/python/web_support.py
===================================================================
--- lib/python/web_support.py	2014-03-17 08:31:45 UTC (rev 26142)
+++ lib/python/web_support.py	2014-03-17 10:57:24 UTC (rev 26143)
@@ -148,7 +148,7 @@
     generate URLs which reference to itself (see scriptRelative)."""
     
     def __init__(self, server_name, script_name, path_info='',
-                 params={}):
+                 params={}, secure=False):
         self.server_name = server_name or 'localhost'
         script_name = self._stripSlashes(script_name or '')
         if script_name[-1:] == '/' or script_name == '':
@@ -157,6 +157,7 @@
             self.script_name = script_name + '/'
         self.path_info = self._stripSlashes(path_info)
         self.params = params
+        self.secure = secure
 
     def _convertArgs(self, args):
         arglist = []
@@ -198,11 +199,15 @@
     def scriptRelativeFull(self, path, **args):
         """Like scriptRelative, but returns an absolute URL, including
         the http:// prefix."""
+        if self.secure:
+            schema = "https"
+        else:
+            schema = "http"
+        return URL("%s://%s/%s%s%s" % (schema,
+                                       self.server_name, self.script_name,
+                                       self._stripSlashes(path),
+                                       self._convertArgs(args)))
 
-        return URL("http://%s/%s%s%s" % (self.server_name, self.script_name,
-                                         self._stripSlashes(path),
-                                         self._convertArgs(args)))
-
     def updateParamsDict(self, args):
         new_args = {}
         for (key, value) in self.params.items():
@@ -745,7 +750,7 @@
                           SocketServer.ThreadingMixIn):
     pass
 
-RE_BASE_URL = re.compile(r'^http://([^/]+)(.*)')
+RE_BASE_URL = re.compile(r'^(https?)://([^/]+)(.*)')
 
 class WebServiceHTTP(WebServiceBase):
     def __init__(self, socket_name):
@@ -764,7 +769,8 @@
 
                 url = URLFactory(service_self.server_name,
                                  service_self.script_name,
-                                 path, params)
+                                 path, params,
+                                 secure=service_self.secure)
 
                 service_self.lock.acquire()
                 try:
@@ -811,8 +817,9 @@
         m = RE_BASE_URL.match(url)
         if m is None:
             raise ValueError("invalid base URL: " + url)
-        self.server_name = m.group(1)
-        self.script_name = m.group(2)
+        self.secure = m.group(1) == "https"
+        self.server_name = m.group(2)
+        self.script_name = m.group(3)
         
 
 def __test():
@@ -829,6 +836,14 @@
     assert str(u.scriptRelativeFull("/a/b", t='123')) \
            == "http://localhost/a/b?t=123"
 
+    u = URLFactory(server_name=None, script_name=None, secure=True)
+    assert str(u.absolute("http://www.enyo.de/")) == "http://www.enyo.de/"
+    assert str(u.absolute("http://www.enyo.de/", t='123')) \
+           == "http://www.enyo.de/?t=123"
+    assert str(u.scriptRelative("/a/b", t='123')) == "/a/b?t=123"
+    assert str(u.scriptRelativeFull("/a/b", t='123')) \
+           == "https://localhost/a/b?t=123"
+
     u = URLFactory(server_name='localhost.localdomain',
                    script_name='/cgi-bin/test.cgi')
     assert str(u.scriptRelative("a/b", t='123')) \




More information about the Secure-testing-commits mailing list