This is an automated email from the git hooks/post-receive script. x2go pushed a change to branch master in repository x2gobroker. from bb0bf9e follow-up fix for aef86cda9191731610c29e55ef11221de74928a4 new 8018b73 Change pre and post scripts to use common codebase across frontends. (Fixes: #469). Add ability to have script run in select session after server is selected. The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference. Summary of changes: debian/changelog | 2 ++ etc/x2gobroker.conf | 8 ++++++-- x2gobroker/brokers/base_broker.py | 24 ++++++++++++++++++++++ x2gobroker/defaults.py | 1 + x2gobroker/optional_scripts/base_script.py | 4 ++-- x2gobroker/web/json.py | 17 +++++----------- x2gobroker/web/plain.py | 30 ++++++---------------------- 7 files changed, 46 insertions(+), 40 deletions(-) -- Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/x2gobroker.git
This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository x2gobroker. commit 8018b7388e551d3d9df690fd2e1eb6ca4deb2ce1 Author: Josh Lukens <jlukens@botch.com> Date: Wed Apr 2 16:30:00 2014 +0200 Change pre and post scripts to use common codebase across frontends. (Fixes: #469). Add ability to have script run in select session after server is selected. --- debian/changelog | 2 ++ etc/x2gobroker.conf | 8 ++++++-- x2gobroker/brokers/base_broker.py | 24 ++++++++++++++++++++++ x2gobroker/defaults.py | 1 + x2gobroker/optional_scripts/base_script.py | 4 ++-- x2gobroker/web/json.py | 17 +++++----------- x2gobroker/web/plain.py | 30 ++++++---------------------- 7 files changed, 46 insertions(+), 40 deletions(-) diff --git a/debian/changelog b/debian/changelog index 15988f0..d7350da 100644 --- a/debian/changelog +++ b/debian/changelog @@ -149,6 +149,8 @@ x2gobroker (0.0.3.0-0x2go1) UNRELEASED; urgency=low (Fixes: #447). - Add support to run pre and post authentication scripts. (Fixes: #449). - Add auth mechanism https_get. (Fixes: #450). + - Change pre and post scripts to use common codebase across frontends. (Fixes: #469). + - Add ability to have script run in select session after server is selected. -- Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Fri, 07 Jun 2013 23:25:30 +0200 diff --git a/etc/x2gobroker.conf b/etc/x2gobroker.conf index 10df0c4..8dbab39 100644 --- a/etc/x2gobroker.conf +++ b/etc/x2gobroker.conf @@ -50,10 +50,14 @@ # Pre and Post authentication scripts give you the option to run outside scripts # or adjust the values of variables for users logging in. Pre scripts run just -# before user authentication and Post scripts run just after. Set to list of -# scripts, comma seperated, with no spaces between. +# before user authentication and Post scripts run just after even if authentication fails. +# Select Session scripts run after load balancing right before the chosen server is sent +# to the client. +# +# Set to list of scripts, comma seperated, with no spaces between. #pre_auth_scripts = #post_auth_scripts = +#select_session_scripts = # Every server-client communication (between X2Go Client and broker) has to be # accompanied by this initial authentication cookie if require-cookie is set above. diff --git a/x2gobroker/brokers/base_broker.py b/x2gobroker/brokers/base_broker.py index 2b1cdf4..8aef096 100644 --- a/x2gobroker/brokers/base_broker.py +++ b/x2gobroker/brokers/base_broker.py @@ -1142,3 +1142,27 @@ class X2GoBroker(object): """ return False + + def run_optional_script(self, script_type, username, password, task, profile_id, ip, cookie, authed=None, server=None): + """\ + Run all optional scripts of type script_type. Called with 3 different script types: + pre_auth_scripts - before authentication happens + post_auth_scripts - after authentication but before anything else occurs + select_session_scripts - after load balancing before a specific server is sent to the client + + These scripts allow for both addional actions to be performed as well as the mangling of any relevant fields. + + """ + + if len(global_config[script_type]) != 0: + for script in global_config[script_type]: + try: + my_script=None + exec("import x2gobroker.optional_scripts.{script}_script".format(script=script)) + exec("my_script = x2gobroker.optional_scripts.{script}_script.X2GoBrokerOptionalScript()".format(script=script)) + logger_broker.debug ('Calling {script_type} {script} with username: {username}, password: {password}, task: {task}, profile_id: {profile_id}, ip: {ip}, cookie: {cookie}, authed: {authed}, server: {server}'.format(script_type=script_type,script=script,username=username, password='XXXXX', task=task, profile_id=profile_id, ip=ip, cookie=cookie, authed=authed, server=server)) + username, password, task, profile_id, ip, cookie, authed, server = my_script.run_me(username=username, password=password, task=task, profile_id=profile_id, ip=ip, cookie=cookie, authed=authed, server=server) + logger_broker.debug ('Finished {script_type} {script} with username: {username}, password: {password}, task: {task}, profile_id: {profile_id}, ip: {ip}, cookie: {cookie}, authed: {authed}, server: {server}'.format(script_type=script_type,script=script,username=username, password='XXXXX', task=task, profile_id=profile_id, ip=ip, cookie=cookie, authed=authed, server=server)) + except ImportError: + logger_error.error('No such optional script \'{script}\''.format(script=script)) + return username, password, task, profile_id, ip, cookie, authed, server diff --git a/x2gobroker/defaults.py b/x2gobroker/defaults.py index 0cdc323..5ae9ccb 100644 --- a/x2gobroker/defaults.py +++ b/x2gobroker/defaults.py @@ -188,6 +188,7 @@ X2GOBROKER_CONFIG_DEFAULTS = { u'verify-ip': True, u'pre_auth_scripts': [], u'post_auth_scripts': [], + u'select_session_scripts': [], u'my-cookie': uuid.uuid4(), u'enable-plain-output': True, u'enable-json-output': True, diff --git a/x2gobroker/optional_scripts/base_script.py b/x2gobroker/optional_scripts/base_script.py index e284362..dd9e5e2 100755 --- a/x2gobroker/optional_scripts/base_script.py +++ b/x2gobroker/optional_scripts/base_script.py @@ -20,5 +20,5 @@ class X2GoBrokerOptionalScript(object): - def run_me(self, username, password, task, profile_id, ip, cookie): - return username, password, task, profile_id, ip, cookie + def run_me(self, username, password, task, profile_id, ip, cookie, authed, server): + return username, password, task, profile_id, ip, cookie, authed, server diff --git a/x2gobroker/web/json.py b/x2gobroker/web/json.py index 08cb973..b88ca5d 100644 --- a/x2gobroker/web/json.py +++ b/x2gobroker/web/json.py @@ -125,21 +125,13 @@ class X2GoBrokerWeb(_RequestHandler): 'task': task, } - if len(global_config['pre_auth_scripts']) != 0: - for script in global_config['pre_auth_scripts']: - try: - post_auth_script=None - exec("import x2gobroker.optional_scripts.{script}_script".format(script=script)) - exec("pre_auth_script = x2gobroker.optional_scripts.{script}_script.X2GoBrokerOptionalScript()".format(script=script)) - logger_broker.debug ('Calling pre-auth script {script} with username: {username}, password: {password}, task: {task}, profile_id: {profile_id}, ip: {ip}, cookie: {cookie}'.format(script=script,username=username, password='XXXXX', task=task, profile_id=profile_id, ip=ip, cookie=cookie)) - username, password, task, profile_id, ip, cookie = pre_auth_script.run_me(username=username, password=password, task=task, profile_id=profile_id, ip=ip, cookie=cookie) - logger_broker.debug ('Pre-auth script {script} finished with username: {username}, password: {password}, task: {task}, profile_id: {profile_id}, ip: {ip}, cookie: {cookie}'.format(script=script,username=username, password='XXXXX', task=task, profile_id=profile_id, ip=ip, cookie=cookie)) - except ImportError: - logger_error.error('No such optional script \'{script}\''.format(script=script)) + username, password, task, profile_id, ip, cookie, authed, server = broker_backend.run_optional_script(script_type='pre_auth_scripts', username=username, password=password, task=task, profile_id=profile_id, ip=ip, cookie=cookie) logger_broker.debug ('username: {username}, password: {password}, task: {task}, profile_id: {profile_id}, cookie: {cookie}'.format(username=username, password='XXXXX', task=task, profile_id=profile_id, cookie=cookie)) access, next_cookie = broker_backend.check_access(username=username, password=password, ip=ip, cookie=cookie) + username, password, task, profile_id, ip, cookie, authed, server = broker_backend.run_optional_script(script_type='post_auth_scripts', username=username, password=password, task=task, profile_id=profile_id, ip=ip, cookie=cookie, authed=access) + if access: if len(global_config['post_auth_scripts']) != 0: @@ -199,7 +191,8 @@ class X2GoBrokerWeb(_RequestHandler): profile_info = broker_backend.select_session(profile_id=profile_id, username=username, pubkey=pubkey) if profile_info.has_key('server'): - selected_session['server'] = "{server}".format(server=profile_info['server']) + username, password, task, profile_id, ip, cookie, authed, server = broker_backend.run_optional_script(script_type='select_session_scripts', username=username, password=password, task=task, profile_id=profile_id, ip=ip, cookie=cookie, authed=access, server=profile_info['server']) + selected_session['server'] = "{server}".format(server=server) if profile_info.has_key('port'): selected_session['port'] = "{port}".format(port=profile_info['port']) else: diff --git a/x2gobroker/web/plain.py b/x2gobroker/web/plain.py index 150818b..be4a81d 100644 --- a/x2gobroker/web/plain.py +++ b/x2gobroker/web/plain.py @@ -115,33 +115,14 @@ class X2GoBrokerWeb(_RequestHandler): output = '' - if len(global_config['pre_auth_scripts']) != 0: - for script in global_config['pre_auth_scripts']: - try: - post_auth_script=None - exec("import x2gobroker.optional_scripts.{script}_script".format(script=script)) - exec("pre_auth_script = x2gobroker.optional_scripts.{script}_script.X2GoBrokerOptionalScript()".format(script=script)) - logger_broker.debug ('Calling pre-auth script {script} with username: {username}, password: {password}, task: {task}, profile_id: {profile_id}, ip: {ip}, cookie: {cookie}'.format(script=script,username=username, password='XXXXX', task=task, profile_id=profile_id, ip=ip, cookie=cookie)) - username, password, task, profile_id, ip, cookie = pre_auth_script.run_me(username=username, password=password, task=task, profile_id=profile_id, ip=ip, cookie=cookie) - logger_broker.debug ('Pre-auth script {script} finished with username: {username}, password: {password}, task: {task}, profile_id: {profile_id}, ip: {ip}, cookie: {cookie}'.format(script=script,username=username, password='XXXXX', task=task, profile_id=profile_id, ip=ip, cookie=cookie)) - except ImportError: - logger_error.error('No such optional script \'{script}\''.format(script=script)) + username, password, task, profile_id, ip, cookie, authed, server = broker_backend.run_optional_script(script_type='pre_auth_scripts', username=username, password=password, task=task, profile_id=profile_id, ip=ip, cookie=cookie) logger_broker.debug ('username: {username}, password: {password}, task: {task}, profile_id: {profile_id}, cookie: {cookie}'.format(username=username, password='XXXXX', task=task, profile_id=profile_id, cookie=cookie)) access, next_cookie = broker_backend.check_access(username=username, password=password, ip=ip, cookie=cookie) + username, password, task, profile_id, ip, cookie, authed, server = broker_backend.run_optional_script(script_type='post_auth_scripts', username=username, password=password, task=task, profile_id=profile_id, ip=ip, cookie=cookie, authed=access) + if access: - if len(global_config['post_auth_scripts']) != 0: - for script in global_config['post_auth_scripts']: - try: - post_auth_script=None - exec("import x2gobroker.optional_scripts.{script}_script".format(script=script)) - exec("post_auth_script = x2gobroker.optional_scripts.{script}_script.X2GoBrokerOptionalScript()".format(script=script)) - logger_broker.debug ('Calling post-auth script {script} with username: {username}, password: {password}, task: {task}, profile_id: {profile_id}, ip: {ip}, cookie: {cookie}'.format(script=script,username=username, password='XXXXX', task=task, profile_id=profile_id, ip=ip, cookie=cookie)) - username, password, task, profile_id, ip, cookie = post_auth_script.run_me(username=username, password=password, task=task, profile_id=profile_id, ip=ip, cookie=cookie) - logger_broker.debug ('Post-auth script {script} finished with username: {username}, password: {password}, task: {task}, profile_id: {profile_id}, ip: {ip}, cookie: {cookie}'.format(script=script,username=username, password='XXXXX', task=task, profile_id=profile_id, ip=ip, cookie=cookie)) - except ImportError: - logger_error.error('No such optional script \'{script}\''.format(script=script)) ### ### CONFIRM SUCCESSFUL AUTHENTICATION FIRST @@ -192,9 +173,11 @@ class X2GoBrokerWeb(_RequestHandler): if profile_id: profile_info = broker_backend.select_session(profile_id=profile_id, username=username, pubkey=pubkey) + if profile_info.has_key('server'): + username, password, task, profile_id, ip, cookie, authed, server = broker_backend.run_optional_script(script_type='select_session_scripts', username=username, password=password, task=task, profile_id=profile_id, ip=ip, cookie=cookie, authed=access, server=profile_info['server']) output += "SERVER:" - output += profile_info['server'] + output += server if profile_info.has_key('port'): output += ":{port}".format(port=profile_info['port']) output += "\n" @@ -208,4 +191,3 @@ class X2GoBrokerWeb(_RequestHandler): return raise tornado.web.HTTPError(401) - -- Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/x2gobroker.git