--- a/etwist/server.py Wed Apr 29 12:51:43 2009 +0200
+++ b/etwist/server.py Wed Apr 29 17:36:49 2009 +0200
@@ -44,6 +44,14 @@
# ensure no tasks will be further added
repo._looping_tasks = ()
+def host_prefixed_baseurl(baseurl, host):
+ scheme, netloc, url, query, fragment = urlsplit(baseurl)
+ netloc_domain = '.' + '.'.join(netloc.split('.')[-2:])
+ if host.endswith(netloc_domain):
+ netloc = host
+ baseurl = urlunsplit((scheme, netloc, url, query, fragment))
+ return baseurl
+
class LongTimeExpiringFile(static.File):
"""overrides static.File and sets a far futre ``Expires`` date
@@ -169,11 +177,8 @@
https = False
baseurl = self.base_url
if self.config['use-request-subdomain']:
- scheme, netloc, url, query, fragment = urlsplit(baseurl)
- if '.' in netloc:
- netloc = '.'.join(host.split('.')[:1] + netloc.split('.')[1:])
- baseurl = urlunsplit((scheme, netloc, url, query, fragment))
- self.warning('base_url is %s for this request', baseurl)
+ baseurl = host_prefixed_baseurl(baseurl, host)
+ self.warning('used baseurl is %s for this request', baseurl)
req = CubicWebTwistedRequestAdapter(request, self.appli.vreg, https, baseurl)
if req.authmode == 'http':
# activate realm-based auth
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/etwist/test/unittest_server.py Wed Apr 29 17:36:49 2009 +0200
@@ -0,0 +1,35 @@
+from cubicweb.devtools.apptest import EnvBasedTC
+from cubicweb.etwist.server import host_prefixed_baseurl
+
+
+class HostPrefixedBaseURLTC(EnvBasedTC):
+
+ def _check(self, baseurl, host, waited):
+ self.assertEquals(host_prefixed_baseurl(baseurl, host), waited,
+ 'baseurl %s called through host %s should be considered as %s'
+ % (baseurl, host, waited))
+
+ def test1(self):
+ self._check('http://www.cubicweb.org/hg/', 'code.cubicweb.org',
+ 'http://code.cubicweb.org/hg/')
+
+ def test2(self):
+ self._check('http://www.cubicweb.org/hg/', 'cubicweb.org',
+ 'http://www.cubicweb.org/hg/')
+
+ def test3(self):
+ self._check('http://cubicweb.org/hg/', 'code.cubicweb.org',
+ 'http://code.cubicweb.org/hg/')
+
+ def test4(self):
+ self._check('http://www.cubicweb.org/hg/', 'localhost',
+ 'http://www.cubicweb.org/hg/')
+
+ def test5(self):
+ self._check('http://www.cubicweb.org/cubes/', 'hg.code.cubicweb.org',
+ 'http://hg.code.cubicweb.org/cubes/')
+
+ def test6(self):
+ self._check('http://localhost:8080/hg/', 'code.cubicweb.org',
+ 'http://localhost:8080/hg/')
+