[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