This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch brokerclient in repository python-x2go. commit 36ec609d03eb3bc6c43139e84f2c2b5901273582 Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Mon Mar 10 16:08:20 2014 +0100 more work on session broker client code (connecting to a session now works) --- x2go/backends/profiles/httpbroker.py | 60 ++++++++++++++++++++++++---------- x2go/client.py | 13 ++++++-- 2 files changed, 54 insertions(+), 19 deletions(-) diff --git a/x2go/backends/profiles/httpbroker.py b/x2go/backends/profiles/httpbroker.py index 9b7994a..c2f8f12 100644 --- a/x2go/backends/profiles/httpbroker.py +++ b/x2go/backends/profiles/httpbroker.py @@ -29,6 +29,7 @@ __NAME__ = 'x2gosessionprofiles-pylib' import copy import re import requests +import types try: import simplejson as json except ImportError: import json @@ -46,7 +47,7 @@ class X2GoSessionProfiles(base.X2GoSessionProfiles): def __init__(self, session_profile_defaults=None, broker_url="http://localhost:8080/json/", - broker_user=None, + broker_username=None, broker_password=None, logger=None, loglevel=log.loglevel_DEFAULT, **kwargs): @@ -68,9 +69,9 @@ class X2GoSessionProfiles(base.X2GoSessionProfiles): match = re.match('^(?P<protocol>(http(|s)))://(|(?P<user>[a-zA-Z0-9_\.-]+)(|:(?P<password>.*))@)(?P<hostname>[a-zA-Z0-9\.-]+)(|:(?P<port>[0-9]+))($|/(?P<path>.*)$)', broker_url) p = match.groupdict() if p['user']: - self.broker_user = p['user'] + self.broker_username = p['user'] else: - self.broker_user = broker_user + self.broker_username = broker_username if p['password']: self.broker_password = p['password'] else: @@ -86,29 +87,47 @@ class X2GoSessionProfiles(base.X2GoSessionProfiles): base.X2GoSessionProfiles.__init__(self, session_profile_defaults=session_profile_defaults, logger=logger, loglevel=loglevel) self.logger("Using session broker at URL: %s" % self.broker_url, log.loglevel_NOTICE) - def broker_simpleauth(self, broker_user, broker_password): - payload = { - 'user': broker_user, + def get_broker_username(self): + return self.broker_username + + def get_broker_url(self): + return self.broker_url + + def broker_simpleauth(self, broker_username, broker_password): + request_data = { + 'user': broker_username, 'password': broker_password, } - r = requests.post(self.broker_url, data=payload) + r = requests.post(self.broker_url, data=request_data) if r.status_code == 200: - self.broker_user = broker_user + self.broker_username = broker_username self.broker_password = broker_password return True return False - def broker_listsessions(self): - payload = { + def broker_listprofiles(self): + request_data = { 'task': 'listprofiles', - 'user': self.broker_user, + 'user': self.broker_username, 'password': self.broker_password, } - r = requests.post(self.broker_url, data=payload) + r = requests.post(self.broker_url, data=request_data) if r.status_code == 200 and r.headers['content-type'].startswith("text/json"): payload = json.loads(r.text) return payload['profiles'] if payload['task'] == 'listprofiles' else {} + def broker_selectsession(self, profile_id): + request_data = { + 'task': 'selectsession', + 'profile-id': profile_id, + 'user': self.broker_username, + 'password': self.broker_password, + } + r = requests.post(self.broker_url, data=request_data) + if r.status_code == 200 and r.headers['content-type'].startswith("text/json"): + payload = json.loads(r.text) + return payload['selected_session'] if payload['task'] == 'selectsession' else {} + def _populate_session_profiles(self): """\ Populate the set of session profiles by loading the session @@ -118,11 +137,15 @@ class X2GoSessionProfiles(base.X2GoSessionProfiles): @rtype: C{dict} """ - session_profiles = self.broker_listsessions() + session_profiles = self.broker_listprofiles() _session_profiles = copy.deepcopy(session_profiles) for session_profile in _session_profiles: + session_profile = unicode(session_profile) for key, default_value in self.defaultSessionProfile.iteritems(): + key = unicode(key) + if type(default_value) is types.StringType: + default_value = unicode(default_value) if not session_profiles[session_profile].has_key(key): session_profiles[session_profile][key] = default_value @@ -132,16 +155,19 @@ class X2GoSessionProfiles(base.X2GoSessionProfiles): print "not suported" def _delete_profile(self, profile_id): - del self.session_profiles[profile_id] + del self.session_profiles[unicode(profile_id)] def _update_value(self, profile_id, option, value): - self.session_profiles[profile_id][option] = value + if type(value) is types.StringType: + value = unicode(value) + self.session_profiles[unicode(profile_id)][unicode(option)] = value def _get_profile_parameter(self, profile_id, option, key_type): - return key_type(self.session_profiles[profile_id][option]) + return key_type(self.session_profiles[unicode(profile_id)][unicode(option)]) def _get_profile_options(self, profile_id): - return self.session_profiles[profile_id].keys() + return self.session_profiles[unicode(profile_id)].keys() def _get_profile_ids(self): + self.session_profiles.keys() return self.session_profiles.keys() diff --git a/x2go/client.py b/x2go/client.py index b64fe9f..d23d807 100644 --- a/x2go/client.py +++ b/x2go/client.py @@ -871,10 +871,15 @@ class X2GoClient(object): """ # detect profile name and profile id properly + if profile_id and self.session_profiles.has_profile_id(profile_id): _p = profile_id elif profile_name and self.session_profiles.has_profile_name(profile_name): _p = profile_name + elif profile_id and self.session_profiles.check_profile_id_or_name(profile_id): + _p = self.session_profiles.check_profile_id_or_name(profile_id) + elif profile_name and self.session_profiles.check_profile_id_or_name(profile_name): + _p = self.session_profiles.check_profile_id_or_name(profile_name) else: _p = None @@ -892,7 +897,6 @@ class X2GoClient(object): if known_hosts is None: known_hosts = os.path.join(_LOCAL_HOME, self.ssh_rootdir, 'known_hosts') - if _p: _params = self.session_profiles.to_session_params(profile_id=_profile_id) @@ -903,7 +907,12 @@ class X2GoClient(object): if k in kwargs.keys(): _params[k] = kwargs[k] - server = _params['server'] + if hasattr(self.session_profiles, 'broker_selectsession'): + selected_session = self.session_profiles.broker_selectsession(_p) + server = selected_session['server'] + _params['port'] = int(selected_session['port']) + else: + server = _params['server'] del _params['server'] _params['client_instance'] = self -- Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/python-x2go.git