mirror of
https://github.com/Tygs/0bin.git
synced 2023-08-10 21:13:00 +03:00
Porting zerobin to python 3
This commit is contained in:
137
libs/cherrypy/test/test_proxy.py
Normal file
137
libs/cherrypy/test/test_proxy.py
Normal file
@ -0,0 +1,137 @@
|
||||
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")
|
||||
#Fix bug #1268
|
||||
self.getPage("/remoteip",
|
||||
headers=[
|
||||
('X-Forwarded-For', '67.15.36.43, 192.168.0.20')
|
||||
])
|
||||
self.assertBody("67.15.36.43")
|
||||
|
||||
# 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
|
||||
# https://bitbucket.org/cherrypy/cherrypy/issue/562).
|
||||
self.getPage("/xhost/", headers=[('X-Host', 'www.example.test')])
|
||||
self.assertHeader('Location', "%s://www.example.test/xhost"
|
||||
% self.scheme)
|
Reference in New Issue
Block a user