[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