[X2Go-Commits] [python-x2go] 05/05: more work on session broker client code (connecting to a session now works)
git-admin at x2go.org
git-admin at x2go.org
Mon Mar 10 16:08:47 CET 2014
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 at 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
More information about the x2go-commits
mailing list