mirror of
https://gitlab.com/LazyLibrarian/LazyLibrarian.git
synced 2026-02-06 10:47:15 +00:00
So branching to new branch, and will merge my changes from itsmeg ontop will merge branch back to head once everyone happy its stable.
130 lines
5.0 KiB
Python
Executable File
130 lines
5.0 KiB
Python
Executable File
import cherrypy
|
|
from cherrypy.test import helper
|
|
|
|
script_names = ["", "/path/to/myapp"]
|
|
|
|
|
|
class ProxyTest(helper.CPWebCase):
|
|
|
|
def setup_server():
|
|
|
|
# Set up site
|
|
cherrypy.config.update({
|
|
'tools.proxy.on': True,
|
|
'tools.proxy.base': 'www.mydomain.test',
|
|
})
|
|
|
|
# Set up application
|
|
|
|
class Root:
|
|
|
|
def __init__(self, sn):
|
|
# Calculate a URL outside of any requests.
|
|
self.thisnewpage = cherrypy.url("/this/new/page", script_name=sn)
|
|
|
|
def pageurl(self):
|
|
return self.thisnewpage
|
|
pageurl.exposed = True
|
|
|
|
def index(self):
|
|
raise cherrypy.HTTPRedirect('dummy')
|
|
index.exposed = True
|
|
|
|
def remoteip(self):
|
|
return cherrypy.request.remote.ip
|
|
remoteip.exposed = True
|
|
|
|
def xhost(self):
|
|
raise cherrypy.HTTPRedirect('blah')
|
|
xhost.exposed = True
|
|
xhost._cp_config = {'tools.proxy.local': 'X-Host',
|
|
'tools.trailing_slash.extra': True,
|
|
}
|
|
|
|
def base(self):
|
|
return cherrypy.request.base
|
|
base.exposed = True
|
|
|
|
def ssl(self):
|
|
return cherrypy.request.base
|
|
ssl.exposed = True
|
|
ssl._cp_config = {'tools.proxy.scheme': 'X-Forwarded-Ssl'}
|
|
|
|
def newurl(self):
|
|
return ("Browse to <a href='%s'>this page</a>."
|
|
% cherrypy.url("/this/new/page"))
|
|
newurl.exposed = True
|
|
|
|
for sn in script_names:
|
|
cherrypy.tree.mount(Root(sn), sn)
|
|
setup_server = staticmethod(setup_server)
|
|
|
|
def testProxy(self):
|
|
self.getPage("/")
|
|
self.assertHeader('Location',
|
|
"%s://www.mydomain.test%s/dummy" %
|
|
(self.scheme, self.prefix()))
|
|
|
|
# Test X-Forwarded-Host (Apache 1.3.33+ and Apache 2)
|
|
self.getPage("/", headers=[('X-Forwarded-Host', 'http://www.example.test')])
|
|
self.assertHeader('Location', "http://www.example.test/dummy")
|
|
self.getPage("/", headers=[('X-Forwarded-Host', 'www.example.test')])
|
|
self.assertHeader('Location', "%s://www.example.test/dummy" % self.scheme)
|
|
# Test multiple X-Forwarded-Host headers
|
|
self.getPage("/", headers=[
|
|
('X-Forwarded-Host', 'http://www.example.test, www.cherrypy.test'),
|
|
])
|
|
self.assertHeader('Location', "http://www.example.test/dummy")
|
|
|
|
# Test X-Forwarded-For (Apache2)
|
|
self.getPage("/remoteip",
|
|
headers=[('X-Forwarded-For', '192.168.0.20')])
|
|
self.assertBody("192.168.0.20")
|
|
self.getPage("/remoteip",
|
|
headers=[('X-Forwarded-For', '67.15.36.43, 192.168.0.20')])
|
|
self.assertBody("192.168.0.20")
|
|
|
|
# Test X-Host (lighttpd; see https://trac.lighttpd.net/trac/ticket/418)
|
|
self.getPage("/xhost", headers=[('X-Host', 'www.example.test')])
|
|
self.assertHeader('Location', "%s://www.example.test/blah" % self.scheme)
|
|
|
|
# Test X-Forwarded-Proto (lighttpd)
|
|
self.getPage("/base", headers=[('X-Forwarded-Proto', 'https')])
|
|
self.assertBody("https://www.mydomain.test")
|
|
|
|
# Test X-Forwarded-Ssl (webfaction?)
|
|
self.getPage("/ssl", headers=[('X-Forwarded-Ssl', 'on')])
|
|
self.assertBody("https://www.mydomain.test")
|
|
|
|
# Test cherrypy.url()
|
|
for sn in script_names:
|
|
# Test the value inside requests
|
|
self.getPage(sn + "/newurl")
|
|
self.assertBody("Browse to <a href='%s://www.mydomain.test" % self.scheme
|
|
+ sn + "/this/new/page'>this page</a>.")
|
|
self.getPage(sn + "/newurl", headers=[('X-Forwarded-Host',
|
|
'http://www.example.test')])
|
|
self.assertBody("Browse to <a href='http://www.example.test"
|
|
+ sn + "/this/new/page'>this page</a>.")
|
|
|
|
# Test the value outside requests
|
|
port = ""
|
|
if self.scheme == "http" and self.PORT != 80:
|
|
port = ":%s" % self.PORT
|
|
elif self.scheme == "https" and self.PORT != 443:
|
|
port = ":%s" % self.PORT
|
|
host = self.HOST
|
|
if host in ('0.0.0.0', '::'):
|
|
import socket
|
|
host = socket.gethostname()
|
|
expected = ("%s://%s%s%s/this/new/page"
|
|
% (self.scheme, host, port, sn))
|
|
self.getPage(sn + "/pageurl")
|
|
self.assertBody(expected)
|
|
|
|
# Test trailing slash (see http://www.cherrypy.org/ticket/562).
|
|
self.getPage("/xhost/", headers=[('X-Host', 'www.example.test')])
|
|
self.assertHeader('Location', "%s://www.example.test/xhost"
|
|
% self.scheme)
|
|
|