better handling of cross-domain urls in parametric router, thanks Jonathan

This commit is contained in:
mdipierro
2012-09-11 09:55:58 -05:00
parent 314278ac69
commit fc3efaed3d
3 changed files with 104 additions and 3 deletions

View File

@@ -1 +1 @@
Version 2.0.8 (2012-09-11 09:53:02) stable
Version 2.0.8 (2012-09-11 09:55:54) stable

View File

@@ -895,7 +895,11 @@ class MapUrlIn(object):
self.domain_controller = None
self.domain_function = None
arg0 = self.harg0
if (self.host, self.port) in base.domains:
if not base.exclusive_domain and base.applications and arg0 in base.applications:
self.application = arg0
elif not base.exclusive_domain and arg0 and not base.applications:
self.application = arg0
elif (self.host, self.port) in base.domains:
(self.application, self.domain_controller, self.domain_function) = base.domains[(self.host, self.port)]
self.env['domain_application'] = self.application
self.env['domain_controller'] = self.domain_controller

View File

@@ -346,8 +346,13 @@ class TestRouter(unittest.TestCase):
self.assertEqual(filter_url('http://domain1.com/abc', app=True), 'app1')
self.assertEqual(filter_url('http://www.domain1.com/abc', app=True), 'app1')
self.assertEqual(filter_url('http://domain2.com/abc', app=True), 'app2')
self.assertEqual(filter_url('http://domain2.com/admin', app=True), 'admin')
routers['BASE']['exclusive_domain'] = True
load(rdict=routers)
self.assertEqual(filter_url('http://domain2.com/admin', app=True), 'app2')
self.assertEqual(filter_url('http://domain.com/goodapp', app=True), 'goodapp')
self.assertRaises(HTTP, filter_url, 'http://domain.com/bad!app', app=True)
try:
@@ -428,7 +433,7 @@ class TestRouter(unittest.TestCase):
self.assertEqual(filter_url('http://domain1.com/abc.html'), '/app1/c1/abc')
self.assertEqual(filter_url('http://domain1.com/abc.css'), '/app1/c1/abc.css')
self.assertEqual(filter_url('http://domain1.com/index/abc'), "/app1/c1/index ['abc']")
self.assertEqual(filter_url('http://domain2.com/app1'), "/app2a/c2a/app1")
self.assertEqual(filter_url('http://domain2.com/app1'), "/app1/c1/f1")
self.assertEqual(filter_url('https://domain1.com/app1/ctr/fcn', domain=('app1',None), out=True), "/ctr/fcn")
self.assertEqual(filter_url('https://www.domain1.com/app1/ctr/fcn', domain=('app1',None), out=True), "/ctr/fcn")
@@ -475,6 +480,98 @@ class TestRouter(unittest.TestCase):
pass
self.assertEqual(filter_url('http://domain1.com/app1/c1/f1', domain=('app2b',None), host='domain2.com', out=True), "/app1")
def test_router_domains_ed(self):
'''
Test URLs that map domains with exclusive_domain set
'''
routers = dict(
BASE = dict(
applications = ['app1', 'app2', 'app2A', 'app3', 'app4', 'app5', 'app6'],
exclusive_domain = True,
domains = {
# two domains to the same app
"domain1.com" : "app1",
"www.domain1.com" : "app1",
# same domain, two ports, to two apps
"domain2.com" : "app2a",
"domain2.com:8080" : "app2b",
# two domains, same app, two controllers
"domain3a.com" : "app3/c3a",
"domain3b.com" : "app3/c3b",
# two domains, same app & controller, two functions
"domain4a.com" : "app4/c4/f4a",
"domain4b.com" : "app4/c4/f4b",
# http vs https
"domain6.com:80" : "app6",
"domain6.com:443" : "app6s",
},
),
app1 = dict( default_controller = 'c1', default_function = 'f1', controllers = ['c1'], exclusive_domain=True, ),
app2a = dict( default_controller = 'c2a', default_function = 'f2a', controllers = ['c2a'], ),
app2b = dict( default_controller = 'c2b', default_function = 'f2b', controllers = ['c2b'], ),
app3 = dict( controllers = ['c3a', 'c3b'], ),
app4 = dict( default_controller = 'c4', controllers = ['c4']),
app5 = dict( default_controller = 'c5', controllers = ['c5'], domain = 'localhost' ),
app6 = dict( default_controller = 'c6', default_function = 'f6', controllers = ['c6'], ),
app6s = dict( default_controller = 'c6s', default_function = 'f6s', controllers = ['c6s'], ),
)
load(rdict=routers)
self.assertEqual(filter_url('http://domain1.com/abc'), '/app1/c1/abc')
self.assertEqual(filter_url('http://domain1.com/c1/abc'), '/app1/c1/abc')
self.assertEqual(filter_url('http://domain1.com/abc.html'), '/app1/c1/abc')
self.assertEqual(filter_url('http://domain1.com/abc.css'), '/app1/c1/abc.css')
self.assertEqual(filter_url('http://domain1.com/index/abc'), "/app1/c1/index ['abc']")
self.assertEqual(filter_url('http://domain2.com/app1'), "/app2a/c2a/app1")
self.assertEqual(filter_url('https://domain1.com/app1/ctr/fcn', domain=('app1',None), out=True), "/ctr/fcn")
self.assertEqual(filter_url('https://www.domain1.com/app1/ctr/fcn', domain=('app1',None), out=True), "/ctr/fcn")
self.assertEqual(filter_url('http://domain2.com/abc'), '/app2a/c2a/abc')
self.assertEqual(filter_url('http://domain2.com:8080/abc'), '/app2b/c2b/abc')
self.assertEqual(filter_url('http://domain2.com/app2a/ctr/fcn', domain=('app2a',None), out=True), "/ctr/fcn")
self.assertEqual(filter_url('http://domain2.com/app2a/ctr/f2a', domain=('app2a',None), out=True), "/ctr")
self.assertEqual(filter_url('http://domain2.com/app2a/c2a/f2a', domain=('app2a',None), out=True), "/")
self.assertEqual(filter_url('http://domain2.com/app2a/c2a/fcn', domain=('app2a',None), out=True), "/fcn")
self.assertRaises(SyntaxError, filter_url, 'http://domain2.com/app2a/ctr/fcn', domain=('app2b',None), out=True)
self.assertRaises(SyntaxError, filter_url, 'http://domain2.com/app2a/ctr/f2a', domain=('app2b',None), out=True)
self.assertRaises(SyntaxError, filter_url, 'http://domain2.com/app2a/c2a/f2a', domain=('app2b',None), out=True)
self.assertEqual(filter_url('http://domain3a.com/'), '/app3/c3a/index')
self.assertEqual(filter_url('http://domain3a.com/abc'), '/app3/c3a/abc')
self.assertEqual(filter_url('http://domain3a.com/c3b'), '/app3/c3b/index')
self.assertEqual(filter_url('http://domain3b.com/abc'), '/app3/c3b/abc')
self.assertEqual(filter_url('http://domain3a.com/app3/c3a/fcn', domain=('app3','c3a'), out=True), "/fcn")
self.assertEqual(filter_url('http://domain3a.com/app3/c3a/fcn', domain=('app3','c3b'), out=True), "/c3a/fcn")
self.assertRaises(SyntaxError, filter_url, 'http://domain3a.com/app3/c3a/fcn', domain=('app1',None), out=True)
self.assertEqual(filter_url('http://domain4a.com/abc'), '/app4/c4/abc')
self.assertEqual(filter_url('https://domain4a.com/app4/c4/fcn', domain=('app4',None), out=True), "/fcn")
self.assertEqual(filter_url('http://domain4a.com'), '/app4/c4/f4a')
self.assertEqual(filter_url('http://domain4b.com'), '/app4/c4/f4b')
self.assertEqual(filter_url('http://localhost/abc'), '/app5/c5/abc')
self.assertEqual(filter_url('http:///abc'), '/app5/c5/abc') # test null host => localhost
self.assertEqual(filter_url('https://localhost/app5/c5/fcn', domain=('app5',None), out=True), "/fcn")
self.assertEqual(filter_url('http://domain6.com'), '/app6/c6/f6')
self.assertEqual(filter_url('https://domain6.com'), '/app6s/c6s/f6s')
self.assertRaises(SyntaxError, filter_url, 'http://domain2.com/app3/c3a/f3', domain=('app2b',None), out=True)
self.assertRaises(SyntaxError, filter_url, 'http://domain1.com/app1/c1/f1', domain=('app2b',None), out=True)
try:
# 2.7+ only
self.assertRaisesRegexp(SyntaxError, 'cross-domain conflict', filter_url, 'http://domain1.com/app1/c1/f1', domain=('app2b',None), out=True)
except AttributeError:
pass
self.assertEqual(filter_url('http://domain1.com/app1/c1/f1', domain=('app2b',None), host='domain2.com', out=True), "/app1")
def test_router_raise(self):
'''
Test URLs that raise exceptions