[X2Go-Commits] x2gobroker.git - build-main (branch) updated: 0.0.0.5-50-gb6a0588
X2Go dev team
git-admin at x2go.org
Sun May 19 13:03:23 CEST 2013
The branch, build-main has been updated
via b6a0588c151b322dfcf2418b6d6df289946710d1 (commit)
from 9fcd2186c96f07d41302fae68112e9b3dd7fb66e (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
-----------------------------------------------------------------------
Summary of changes:
debian/changelog | 1 +
debian/control | 4 +--
sbin/x2gobroker | 48 +++++++++++++++------------
x2gobroker/tests/test_web_plain_base.py | 17 ++++------
x2gobroker/tests/test_web_plain_zeroconf.py | 14 ++++----
x2gobroker/web/extras.py | 9 ++---
x2gobroker/web/html.py | 40 +++++++++++-----------
x2gobroker/web/json.py | 4 ++-
x2gobroker/web/plain.py | 39 +++++++++++-----------
9 files changed, 92 insertions(+), 84 deletions(-)
The diff of changes is:
diff --git a/debian/changelog b/debian/changelog
index 0bc27b3..0bfda42 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -8,6 +8,7 @@ x2gobroker (0.0.0.6-0~x2go1) UNRELEASED; urgency=low
- If X2Go Session Broker's PAM Auth Service is not available, try to
fallback to direct PAM authentication (only works if x2gobroker
runs as super-user root).
+ - Switch from webpy to using tornado as http engine.
* /debian/*.default:
- Be more explanatory about the X2GOBROKER_DEBUG option and allow
to enable debug mode for the different services independently.
diff --git a/debian/control b/debian/control
index 38cfc6b..ece5439 100644
--- a/debian/control
+++ b/debian/control
@@ -22,7 +22,7 @@ Depends:
python,
python-argparse,
python-setproctitle,
- python-webpy (>= 1:0.37),
+ python-tornado,
python-x2gobroker (>= ${source:Version}), python-x2gobroker (<< ${source:Version}.1~),
Suggests:
apache2 | httpd,
@@ -150,7 +150,7 @@ Depends:
${python:Depends},
python-pampy,
python-netaddr,
- python-webpy (>= 1:0.37),
+ python-tornado,
python-paramiko,
Suggests:
apache2 | httpd,
diff --git a/sbin/x2gobroker b/sbin/x2gobroker
index fb6d052..adbde81 100755
--- a/sbin/x2gobroker
+++ b/sbin/x2gobroker
@@ -27,8 +27,9 @@ import argparse
import socket
import logging
import thread
-import web
-from web.wsgiserver import CherryPyWSGIServer
+import tornado.web
+import tornado.httpserver
+import tornado.ioloop
try:
import x2gobroker.defaults
@@ -99,12 +100,12 @@ if __name__ == "__main__":
# some people just give the port but prepend a colon, webpy does not like this, so we strip if off
cmdline_args.bind = cmdline_args.bind.lstrip(':')
- # tweak cmdline args so that they become suitable for the web.py framework
- if len(sys.argv) <= 1:
- sys.argv.append('')
- sys.argv.append('')
- sys.argv[1] = cmdline_args.bind
- sys.argv[2:] = []
+ if ':' in cmdline_args.bind:
+ bind_address, bind_port = cmdline_args.bind.split(':')[0:2]
+ bind_port = int(bind_port)
+ else:
+ bind_address = None
+ bind_port = int(cmdline_args)
# import classes serving the different web.py URLs
import x2gobroker.web.plain
@@ -112,25 +113,30 @@ import x2gobroker.web.plain
#import x2gobroker.web.html
import x2gobroker.web.extras
-# switch on https:// mode
-if x2gobroker.defaults.X2GOBROKER_SSL_CERTFILE and x2gobroker.defaults.X2GOBROKER_SSL_KEYFILE:
- CherryPyWSGIServer.ssl_certificate = x2gobroker.defaults.X2GOBROKER_SSL_CERTFILE
- CherryPyWSGIServer.ssl_private_key = x2gobroker.defaults.X2GOBROKER_SSL_KEYFILE
-
# define the web.py URLs
-urls = ( '/plain/(.*)', 'x2gobroker.web.plain.X2GoBrokerWeb',
-# '/json/(.*)', 'x2gobroker.web.json.X2GoBrokerWeb',
-# '/html/(.*)', 'x2gobroker.web.html.X2GoBrokerWeb',
- '/pubkeys/', 'x2gobroker.web.extras.X2GoBrokerPubKeyService',
+urls = ( ('/plain/(.*)', x2gobroker.web.plain.X2GoBrokerWeb,),
+# ('/json/(.*)', x2gobroker.web.json.X2GoBrokerWeb,),
+# ('/html/(.*)', x2gobroker.web.html.X2GoBrokerWeb,),
+ ('/pubkeys/', x2gobroker.web.extras.X2GoBrokerPubKeyService,),
)
-app = web.application(urls, globals(), autoreload=False)
-app.internalerror = web.debugerror
-application = app.wsgifunc()
+application = tornado.web.Application(urls)
# run the web.py standalone daemon...
if __name__ == "__main__":
try:
- thread.start_new_thread(app.run(), ())
+ if x2gobroker.defaults.X2GOBROKER_SSL_CERTFILE and x2gobroker.defaults.X2GOBROKER_SSL_KEYFILE:
+ # switch on https:// mode
+ http_server = tornado.httpserver.HTTPServer(application,
+ ssl_options={
+ "certfile": x2gobroker.defaults.X2GOBROKER_SSL_CERTFILE,
+ "keyfile": x2gobroker.defaults.X2GOBROKER_SSL_KEYFILE,
+ },
+ )
+ else:
+ # run without https
+ http_server = tornado.httpserver.HTTPServer(application)
+ http_server.listen(8080, address=)
+ tornado.ioloop.IOLoop.instance().start()
except socket.error, e:
print (e)
diff --git a/x2gobroker/tests/test_web_plain_base.py b/x2gobroker/tests/test_web_plain_base.py
index 74953ff..dd5a3ba 100644
--- a/x2gobroker/tests/test_web_plain_base.py
+++ b/x2gobroker/tests/test_web_plain_base.py
@@ -21,21 +21,20 @@ import unittest
import tempfile
from paste.fixture import TestApp
from nose.tools import *
-import web
+import tornado.wsgi
# Python X2GoBroker modules
import x2gobroker.defaults
import x2gobroker.web.plain
-urls = ( '/plain/(.*)', 'x2gobroker.web.plain.X2GoBrokerWeb',)
-app = web.application(urls, globals())
+urls = ( ('/plain/(.*)', x2gobroker.web.plain.X2GoBrokerWeb,) ,)
+application = tornado.wsgi.WSGIApplication(urls)
class TestX2GoBrokerWebPlainBase(unittest.TestCase):
### TEST RESPONSE: is enabled?
def test_isenabled(self):
- middleware = []
_config = """
[base]
enable = false
@@ -45,7 +44,7 @@ enable = false
tf.seek(0)
_cf_bak = x2gobroker.defaults.X2GOBROKER_CONFIG
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
- testApp = TestApp(app.wsgifunc(*middleware))
+ testApp = TestApp(application)
r = testApp.get('/plain/base/', expect_errors=True)
assert_equal(r.status, 404)
tf.close()
@@ -57,7 +56,7 @@ enable = true
print >> tf, _config
tf.seek(0)
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
- testApp = TestApp(app.wsgifunc(*middleware))
+ testApp = TestApp(application)
r = testApp.get('/plain/base/', expect_errors=True)
assert_equal(r.status, 401)
tf.close()
@@ -66,8 +65,7 @@ enable = true
### TEST RESPONSE: simple authentication (check_access)
def test_checkaccess(self):
- middleware = []
- testApp = TestApp(app.wsgifunc(*middleware))
+ testApp = TestApp(application)
r = testApp.get('/plain/base/', expect_errors=True)
assert_equal(r.status, 401)
_config = """
@@ -88,7 +86,6 @@ auth-mech = testsuite
### TEST TASK: listsessions (nothing should be returned for the base backend)
def test_listsessions(self):
- middleware = []
_config = """
[base]
enable = true
@@ -99,7 +96,7 @@ auth-mech = testsuite
tf.seek(0)
_cf_bak = x2gobroker.defaults.X2GOBROKER_CONFIG
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
- testApp = TestApp(app.wsgifunc(*middleware))
+ testApp = TestApp(application)
r = testApp.get('/plain/base/', params={'user': 'test', 'password': 'sweet', 'task': 'listsessions', }, expect_errors=True)
assert_equal(r.status, 200)
r.mustcontain('Access granted')
diff --git a/x2gobroker/tests/test_web_plain_zeroconf.py b/x2gobroker/tests/test_web_plain_zeroconf.py
index c258646..dad829b 100644
--- a/x2gobroker/tests/test_web_plain_zeroconf.py
+++ b/x2gobroker/tests/test_web_plain_zeroconf.py
@@ -21,21 +21,20 @@ import unittest
import tempfile
from paste.fixture import TestApp
from nose.tools import *
-import web
+import tornado.wsgi
# Python X2GoBroker modules
import x2gobroker.defaults
import x2gobroker.web.plain
-urls = ( '/plain/(.*)', 'x2gobroker.web.plain.X2GoBrokerWeb',)
-app = web.application(urls, globals())
+urls = ( ('/plain/(.*)', x2gobroker.web.plain.X2GoBrokerWeb,) ,)
+application = tornado.wsgi.WSGIApplication(urls)
class TestX2GoBrokerWebPlainZeroconf(unittest.TestCase):
### TEST TASK: listsessions (you can influence the session command via the X2Go Broker's configurationfile)
def test_listsessions_checkcommand(self):
- middleware = []
_config = """
[zeroconf]
enable = true
@@ -46,7 +45,7 @@ desktop-shell = KDE
print >> tf, _config
tf.seek(0)
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
- testApp = TestApp(app.wsgifunc(*middleware))
+ testApp = TestApp(application)
r = testApp.get('/plain/zeroconf/', params={'user': 'test', 'password': 'sweet', 'task': 'listsessions', }, expect_errors=True)
assert_equal(r.status, 200)
r.mustcontain('Access granted')
@@ -69,7 +68,7 @@ desktop-shell = GNOME
print >> tf, _config
tf.seek(0)
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
- testApp = TestApp(app.wsgifunc(*middleware))
+ testApp = TestApp(application)
r = testApp.get('/plain/zeroconf/', params={'user': 'test', 'password': 'sweet', 'task': 'listsessions', }, expect_errors=True)
assert_equal(r.status, 200)
r.mustcontain('Access granted')
@@ -85,7 +84,6 @@ desktop-shell = GNOME
### TEST TASK: selectsession (returns localhost as the only server, no SSH key, no session info)
def test_selectsession(self):
- middleware = []
_config = """
[zeroconf]
enable = true
@@ -95,7 +93,7 @@ auth-mech = testsuite
print >> tf, _config
tf.seek(0)
x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
- testApp = TestApp(app.wsgifunc(*middleware))
+ testApp = TestApp(application)
r = testApp.get('/plain/zeroconf/', params={'user': 'test', 'password': 'sweet', 'task': 'selectsession', 'sid': 'LOCALHOST',}, expect_errors=True)
assert_equal(r.status, 200)
r.mustcontain('Access granted')
diff --git a/x2gobroker/web/extras.py b/x2gobroker/web/extras.py
index 75571e6..df48008 100644
--- a/x2gobroker/web/extras.py
+++ b/x2gobroker/web/extras.py
@@ -23,13 +23,14 @@
# modules
import os.path
import paramiko
+import tornado.web
import x2gobroker._paramiko
x2gobroker._paramiko.monkey_patch_paramiko()
import x2gobroker.defaults
-class X2GoBrokerPubKeyService:
+class X2GoBrokerPubKeyService(tornado.web.RequestHandler):
http_header_items = {
'Content-Type': 'text/plain; charset=utf-8',
@@ -39,7 +40,7 @@ class X2GoBrokerPubKeyService:
def _gen_http_header(self):
for http_header_item in self.http_header_items.keys():
- web.header(http_header_item, self.http_header_items[http_header_item])
+ self.add_header(http_header_item, self.http_header_items[http_header_item])
def GET(self):
@@ -56,6 +57,6 @@ class X2GoBrokerPubKeyService:
output += 'ssh-dss {pubkey} {user}@{hostname}\n'.format(pubkey=str(pubkey.get_base64()), user=x2gobroker.defaults.X2GOBROKER_DAEMON_USER, hostname=x2gobroker.defaults.X2GOBROKER_HOSTNAME)
if not output:
- return web.notfound()
+ raise tornado.web.HTTPError(404)
- return output
+ self.write(output)
diff --git a/x2gobroker/web/html.py b/x2gobroker/web/html.py
index 1a0b1db..d45f5d0 100644
--- a/x2gobroker/web/html.py
+++ b/x2gobroker/web/html.py
@@ -21,12 +21,13 @@
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
# modules
-import web
+import tornado.web
# Python X2Go Broker modules
from x2gobroker.defaults import X2GOBROKER_DEFAULT_BACKEND as _X2GOBROKER_DEFAULT_BACKEND
-class X2GoBrokerWeb:
+
+class X2GoBrokerWeb(tornado.web.RequestHandler):
http_header_items = {
'Content-Type': 'text/html; charset=utf-8',
@@ -61,12 +62,12 @@ $output
def _gen_http_header(self):
for http_header_item in self.http_header_items.keys():
- web.header(http_header_item, self.http_header_items[http_header_item])
+ self.add_header(http_header_item, self.http_header_items[http_header_item])
- def GET(self, backend):
- return self.POST(backend)
+ def get(self, backend):
+ return self.post(backend)
- def POST(self, backend):
+ def post(self, backend):
if not backend:
backend = _X2GOBROKER_DEFAULT_BACKEND
@@ -81,24 +82,23 @@ $output
backend_config = broker_backend.get_backend_config(backend)
if not backend_config['enable']:
- return web.notfound()
+ raise tornado.web.HTTPError(404)
- data = web.input()
- try: username = data.user
+ try: username = self.get_argument('user', default='')
except AttributeError: username = ''
- try: password = data.password
+ try: password = self.get_argument('password', default='')
except AttributeError: password = ''
- try: authid = data.authid
- except AttributeError: authid = ''
- try: task = data.task
+ try: cookie = self.get_argument('cookie', default='')
+ except AttributeError: cookie = ''
+ try: task = self.get_argument('task')
except AttributeError: task = ''
- try: session_name = data.sid
- except AttributeError: session_name = ''
- try: new_password = data.newpass
+ try: profile_id = self.get_argument('sid', default='')
+ except AttributeError: profile_id = ''
+ try: new_password = self.get_argument('newpass', default='')
except AttributeError: new_password = ''
output = ''
-
+ self._gen_http_header()
self._gen_http_header()
if broker_backend.check_access(username=username, password=password, authid=authid):
@@ -116,6 +116,8 @@ $output
###
pass
- return self.page(self.html_header_items, output)
+ self.write(output)
+ return
+
+ raise tornado.web.HTTPError(401)
- return self.page(self.html_header_items, "<hr>Access denied")
diff --git a/x2gobroker/web/json.py b/x2gobroker/web/json.py
index ef35a0f..2e97f89 100644
--- a/x2gobroker/web/json.py
+++ b/x2gobroker/web/json.py
@@ -21,8 +21,10 @@
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
# modules
+import tornado.web
-class X2GoBrokerWeb:
+
+class X2GoBrokerWeb(tornado.web.RequestHandler):
# MUSIC OF THE FUTURE
pass
\ No newline at end of file
diff --git a/x2gobroker/web/plain.py b/x2gobroker/web/plain.py
index c9fd55b..e4fa9aa 100644
--- a/x2gobroker/web/plain.py
+++ b/x2gobroker/web/plain.py
@@ -21,7 +21,7 @@
# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
# modules
-import web
+import tornado.web
import types
# Python X2Go Broker modules
@@ -29,7 +29,7 @@ import x2gobroker.defaults
from x2gobroker.loggers import logger_broker, logger_error
-class X2GoBrokerWeb:
+class X2GoBrokerWeb(tornado.web.RequestHandler):
http_header_items = {
'Content-Type': 'text/plain; charset=utf-8',
@@ -39,15 +39,15 @@ class X2GoBrokerWeb:
def _gen_http_header(self):
for http_header_item in self.http_header_items.keys():
- web.header(http_header_item, self.http_header_items[http_header_item])
+ self.add_header(http_header_item, self.http_header_items[http_header_item])
- def GET(self, backend):
+ def get(self, backend):
if x2gobroker.defaults.X2GOBROKER_DEBUG:
logger_broker.warn('GET http request detected, if unwanted: disable X2GOBROKER_DEBUG')
- return self.POST(backend)
- return web.notfound()
+ return self.post(backend)
+ raise tornado.web.HTTPError(404)
- def POST(self, backend):
+ def post(self, backend):
if not backend:
backend = x2gobroker.defaults.X2GOBROKER_DEFAULT_BACKEND
@@ -62,31 +62,30 @@ class X2GoBrokerWeb:
global_config = broker_backend.get_global_config()
# set the client address for the broker backend
- ip = web.ctx.env.get('HTTP_X_FORWARDED_FOR', web.ctx.get('ip', ''))
+ ip = self.request.remote_ip
if ip:
logger_broker.info('client address is {address}'.format(address=ip))
broker_backend.set_client_address(ip)
elif not x2gobroker.defaults.X2GOBROKER_DEBUG:
# if the client IP is not set, we pretend to have nothing on offer
logger_error.error('client could not provide an IP address, pretending: 404 Not Found')
- return web.notfound()
+ raise tornado.web.HTTPError(404)
# if the broker backend is disabled in the configuration, pretend to have nothing on offer
if not broker_backend.is_enabled():
- return web.notfound()
+ raise tornado.web.HTTPError(404)
- data = web.input()
- try: username = data.user
+ try: username = self.get_argument('user', default='')
except AttributeError: username = ''
- try: password = data.password
+ try: password = self.get_argument('password', default='')
except AttributeError: password = ''
- try: cookie = data.cookie
+ try: cookie = self.get_argument('cookie', default='')
except AttributeError: cookie = ''
- try: task = data.task
+ try: task = self.get_argument('task', default='')
except AttributeError: task = ''
- try: profile_id = data.sid
+ try: profile_id = self.get_argument('sid', default='')
except AttributeError: profile_id = ''
- try: new_password = data.newpass
+ try: new_password = self.get_argument('newpass', default='')
except AttributeError: new_password = ''
output = ''
@@ -160,6 +159,8 @@ class X2GoBrokerWeb:
output += "SESSION_INFO:"
output += profile_info['session_info'] + "\n"
- return output
+ self.write(output)
+ return
+
+ raise tornado.web.HTTPError(401)
- return web.unauthorized()
hooks/post-receive
--
x2gobroker.git (HTTP(S) Session broker for X2Go)
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "x2gobroker.git" (HTTP(S) Session broker for X2Go).
More information about the x2go-commits
mailing list