[X2Go-Commits] [x2gobroker] 02/02: UCCS: Start working on API version 5.

git-admin at x2go.org git-admin at x2go.org
Thu May 3 12:49:09 CEST 2018


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch master
in repository x2gobroker.

commit 0bfc3653849a6ab33c5b77065fdeb4fc3a51ec71
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date:   Thu May 3 12:48:54 2018 +0200

    UCCS: Start working on API version 5.
---
 x2gobroker/defaults.py |  2 ++
 x2gobroker/uccsjson.py | 50 ++++++++++++++++++++++++++++++++++++++++++--------
 x2gobroker/web/uccs.py | 22 ++++++++++++++++++----
 3 files changed, 62 insertions(+), 12 deletions(-)

diff --git a/x2gobroker/defaults.py b/x2gobroker/defaults.py
index 9ed7abf..3b7fbc1 100644
--- a/x2gobroker/defaults.py
+++ b/x2gobroker/defaults.py
@@ -323,3 +323,5 @@ X2GOBROKER_SESSIONPROFILE_DEFAULTS = {
         'acl-any-order': 'deny-allow',
     },
 }
+
+X2GOBROKER_LATEST_UCCS_API_VERSION = 5
\ No newline at end of file
diff --git a/x2gobroker/uccsjson.py b/x2gobroker/uccsjson.py
index e271019..e582e29 100644
--- a/x2gobroker/uccsjson.py
+++ b/x2gobroker/uccsjson.py
@@ -20,6 +20,8 @@
 try: import simplejson as json
 except ImportError: import json
 
+from x2gobroker.defaults import X2GOBROKER_LATEST_UCCS_API_VERSION as latest_api_version
+
 def convert_to_builtin_type(obj):
     """\
     Helper function for converting Python objects to dictionaries.
@@ -35,7 +37,7 @@ class ManagementServer():
     Base class for generating UCCS compatible JSON object.
 
     """
-    def __init__(self, url, name):
+    def __init__(self, url, name, api_version=latest_api_version):
         """\
         Initializ instance.
 
@@ -43,8 +45,11 @@ class ManagementServer():
         @type url: C{unicode}
         @param name: human-readable, descriptive server name
         @type name: C{unicode}
+        @param api_version: API version used between remote logon service and broker
+        @type api_version: C{int}
 
         """
+        self._api_version = api_version
         self.RemoteDesktopServers = []
         self.AdditionalManagementServers = []
         self.URL = url
@@ -104,7 +109,7 @@ class RDPServer():
     Instantiate a UCCS compatible RDP server session profile object.
 
     """
-    def __init__(self, host, name, username='', password=''):
+    def __init__(self, host, name, username='', password='', api_version=latest_api_version):
         """\
         @param host: hostname of RDP server host
         @type host: C{unicode}
@@ -114,8 +119,11 @@ class RDPServer():
         @type username: C{unicode}
         @param password: password to be used for login
         @type password: C{unicode}
+        @param api_version: API version used between remote logon service and broker
+        @type api_version: C{int}
 
         """
+        self._api_version = api_version
         self.URL = 'http://{url}/'.format(url=host)
         self.Name = name
         self.Protocol = 'rdp'
@@ -153,7 +161,7 @@ class ICAServer():
     Instantiate a UCCS compatible ICA server session profile object.
 
     """
-    def __init__(self, host, name, username='', password=''):
+    def __init__(self, host, name, username='', password='', api_version=latest_api_version):
         """\
         @param host: hostname of ICA server host
         @type host: C{unicode}
@@ -163,8 +171,11 @@ class ICAServer():
         @type username: C{unicode}
         @param password: password to be used for login
         @type password: C{unicode}
+        @param api_version: API version used between remote logon service and broker
+        @type api_version: C{int}
 
         """
+        self._api_version = api_version
         self.URL = 'http://{url}/'.format(url=host)
         self.Name = name
         self.Protocol = 'ica'
@@ -202,7 +213,7 @@ class X2GoServer():
     Instantiate a UCCS compatible X2Go Server session profile object.
 
     """
-    def __init__(self, host, name, username='', password=''):
+    def __init__(self, host, name, username='', password='', api_version=latest_api_version):
         """\
         @param host: hostname of X2Go Server host
         @type host: C{unicode}
@@ -212,15 +223,39 @@ class X2GoServer():
         @type username: C{unicode}
         @param password: password to be used for login
         @type password: C{unicode}
+        @param api_version: API version used between remote logon service and broker
+        @type api_version: C{int}
 
         """
+        self._api_version = api_version
         self.URL = 'http://{url}/'.format(url=host)
         self.Name = name
         self.Protocol = 'x2go'
-        self.CommandRequired = True
+        if self._api_version == 4:
+            self.SessionTypeRequired = True
+        else:
+            self.CommandRequired = True
         self.Username = username
         self.Password = password
 
+    # legacy: API v4 (not used in API v5 and higher)
+    def set_session_type(self, session_type):
+        """\
+        Set the session_type to be used on this X2Go Server.
+
+        @param command: the session type to be set
+        @type command: C{unicode}
+
+        @raise TypeError: command has to be C{str}
+
+        """
+        #FIXME: throw an exception when used with API v5 or newer
+        if isinstance(session_type, str):
+            self.SessionType = session_type
+        else:
+            raise TypeError("set_session_type() expects a string argument")
+
+    # since: API v5
     def set_command(self, command):
         """\
         Set the command to be used on this X2Go Server.
@@ -231,12 +266,11 @@ class X2GoServer():
         @raise TypeError: command has to be C{str}
 
         """
+        #FIXME: throw an exception when used with API v4
         if isinstance(command, str):
             self.Command = command
-        elif isinstance(command, str):
-            self.Command = command
         else:
-            raise TypeError("set_command() expects a string or unicode argument")
+            raise TypeError("set_command() expects a string argument")
 
     def toJson(self):
         """\
diff --git a/x2gobroker/web/uccs.py b/x2gobroker/web/uccs.py
index 8985681..7b15147 100644
--- a/x2gobroker/web/uccs.py
+++ b/x2gobroker/web/uccs.py
@@ -67,6 +67,13 @@ class X2GoBrokerWeb(_RequestHandler):
 @x2gobroker.basicauth.require_basic_auth('Authentication required', credentials_validate)
 class X2GoBrokerWebAPI(tornado.web.RequestHandler):
 
+    def __init__(self, *args, **kwargs):
+        # latest API version is 5
+        self.api_version = 5
+        self.api_versions_supported = [4, 5]
+        self.latest_api_version = max (self.api_versions_supported)
+        tornado.web.RequestHandler.__init__(self, *args, **kwargs)
+
     http_header_items = {
         'Content-Type': 'text/plain; charset=utf-8',
         'Expires': '+1h',
@@ -84,9 +91,10 @@ class X2GoBrokerWebAPI(tornado.web.RequestHandler):
         backend = args[0]
         api_version = args[1]
         try:
-            api_version = int(api_version)
+            self.api_version = int(api_version)
         except TypeError:
-            api_version = 4
+            # assume latest API, shouldn't we actually throw an error here?
+            self.api_version = self.latest_api_version
 
         if not backend:
             self.backend = x2gobroker.defaults.X2GOBROKER_DEFAULT_BACKEND
@@ -157,8 +165,10 @@ class X2GoBrokerWebAPI(tornado.web.RequestHandler):
                         host='{hostname}'.format(hostname=hosts[0]),
                         name=profile['name'],
                         username=profile['user'],
+                        api_version=self.api_version,
                 )
                 ts.set_domain('LOCAL')
+
             else:
 
                 # obligatory profile keys:
@@ -185,7 +195,12 @@ class X2GoBrokerWebAPI(tornado.web.RequestHandler):
                 _cmd = profile['command']
                 if _cmd.upper() in x2gobroker.defaults.X2GO_DESKTOP_SESSIONS:
                     _cmd = _cmd.upper()
-                ts.set_command(_cmd)
+
+                if api_version == 4:
+                    ts.set_session_type(_cmd)
+                else:
+                    ts.set_command(_cmd)
+
             ms.add_terminalserver(ts)
             ms.set_default(ts.Name)
 
@@ -193,4 +208,3 @@ class X2GoBrokerWebAPI(tornado.web.RequestHandler):
 
         self.write(output)
         return
-

--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/x2gobroker.git


More information about the x2go-commits mailing list