[X2Go-Commits] x2gobroker.git - uccsoutput (branch) updated: 0.0.1.0-10-g8130c9d

X2Go dev team git-admin at x2go.org
Sun Apr 7 10:08:33 CEST 2013


The branch, uccsoutput has been updated
       via  8130c9d12e3447fda3064b4b3f1ba0aef1015341 (commit)
       via  00fb61c3429809f7511f7bda5667a77facd96918 (commit)
       via  e341bd86111730b2919697a74ac18d759d2a9e74 (commit)
       via  c9c92dbff6b4e9ee872eb738121dbd51da94d329 (commit)
       via  1734e9987eebeaf7574c42c28b92f010fb827008 (commit)
       via  cd9500b7a1d12cd973af7726dbead83b79bc8581 (commit)
       via  890debb62b31a29ed482d392e7d276c5d9936d90 (commit)
      from  aea8e30472982caf3be18c73e3175becfc6d6b4a (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 8130c9d12e3447fda3064b4b3f1ba0aef1015341
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date:   Sun Apr 7 10:08:09 2013 +0200

    Fix wrong usage of session option »cmd«, has to be »command«.

commit 00fb61c3429809f7511f7bda5667a77facd96918
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date:   Sat Apr 6 14:01:40 2013 +0200

    add test that checks profile completion from hard-coded defaults

commit e341bd86111730b2919697a74ac18d759d2a9e74
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date:   Sat Apr 6 13:39:43 2013 +0200

    Add cmd and directrdp session profile parameters to defaults.

commit c9c92dbff6b4e9ee872eb738121dbd51da94d329
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date:   Sat Apr 6 13:37:33 2013 +0200

    sbin/x2gobroker: import UCCS web frontend

commit 1734e9987eebeaf7574c42c28b92f010fb827008
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date:   Sat Apr 6 13:36:38 2013 +0200

    fix x2gobroker/web/uccs.py

commit cd9500b7a1d12cd973af7726dbead83b79bc8581
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date:   Sat Apr 6 13:26:27 2013 +0200

    new parameter in default profile

commit 890debb62b31a29ed482d392e7d276c5d9936d90
Author: Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
Date:   Sat Apr 6 13:03:58 2013 +0200

    move UCCS JSON classes into separate file

-----------------------------------------------------------------------

Summary of changes:
 debian/changelog                           |    5 +-
 etc/broker/x2gobroker-sessionprofiles.conf |    3 +-
 sbin/x2gobroker                            |    1 +
 x2gobroker/brokers/zeroconf_broker.py      |    7 +-
 x2gobroker/defaults.py                     |    3 +-
 x2gobroker/tests/test_broker_base.py       |    4 +-
 x2gobroker/tests/test_broker_inifile.py    |  142 +++++++++++++---
 x2gobroker/tests/test_broker_zeroconf.py   |    4 +
 x2gobroker/uccsjson.py                     |  241 ++++++++++++++++++++++++++++
 x2gobroker/web/uccs.py                     |   93 ++---------
 10 files changed, 387 insertions(+), 116 deletions(-)
 create mode 100644 x2gobroker/uccsjson.py

The diff of changes is:
diff --git a/debian/changelog b/debian/changelog
index b460d0d..be2985b 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,7 +1,8 @@
 x2gobroker (0.0.1.1-0~x2go1) UNRELEASED; urgency=low
 
-  * New upstream version (0.0.1.0):
-    - Continue development...
+  * New upstream version (0.0.1.1):
+    - Add command and directrdp session profile parameters to defaults.
+    - Fix wrong usage of session option »cmd«, has to be »command«.
 
  -- Mike Gabriel <mike.gabriel at das-netzwerkteam.de>  Sun, 10 Mar 2013 13:00:32 +0100
 
diff --git a/etc/broker/x2gobroker-sessionprofiles.conf b/etc/broker/x2gobroker-sessionprofiles.conf
index 2f0caea..8d060ec 100644
--- a/etc/broker/x2gobroker-sessionprofiles.conf
+++ b/etc/broker/x2gobroker-sessionprofiles.conf
@@ -29,6 +29,7 @@
 
 
 [DEFAULT]
+command=TERMINAL
 defsndport=true
 useiconv=false
 iconvfrom=UTF-8
@@ -52,7 +53,7 @@ applications=TERMINAL,WWWBROWSER,MAILCLIENT,OFFICE
 multidisp=false
 sshproxyport=22
 sound=true
-rootless=false
+rootless=true
 iconvto=UTF-8
 soundtunnel=true
 dpi=96
diff --git a/sbin/x2gobroker b/sbin/x2gobroker
index 05678ab..894b3c0 100755
--- a/sbin/x2gobroker
+++ b/sbin/x2gobroker
@@ -110,6 +110,7 @@ if __name__ == "__main__":
 
 # import classes serving the different web.py URLs
 import x2gobroker.web.plain
+import x2gobroker.web.uccs
 #import x2gobroker.web.json
 #import x2gobroker.web.html
 import x2gobroker.web.extras
diff --git a/x2gobroker/brokers/zeroconf_broker.py b/x2gobroker/brokers/zeroconf_broker.py
index 5970659..6cb83ad 100644
--- a/x2gobroker/brokers/zeroconf_broker.py
+++ b/x2gobroker/brokers/zeroconf_broker.py
@@ -36,7 +36,7 @@ class X2GoBroker(base.X2GoBroker):
 
     def list_profiles(self, username):
 
-        list_of_profiles = {
+        _list_of_profiles = {
             uuid.uuid4(): {
                 'user': u'',
                 'defsndport': True,
@@ -74,6 +74,11 @@ class X2GoBroker(base.X2GoBroker):
                 'pack': u'16m-jpeg',
             },
         }
+        list_of_profiles = {}
+        for profile_id in _list_of_profiles.keys():
+            profile = self.get_profile_defaults()
+            profile.update(_list_of_profiles[profile_id])
+            list_of_profiles[profile_id] = profile
         return list_of_profiles
 
     def select_session(self, profile_id, username=None):
diff --git a/x2gobroker/defaults.py b/x2gobroker/defaults.py
index 8a930dc..9e61d83 100644
--- a/x2gobroker/defaults.py
+++ b/x2gobroker/defaults.py
@@ -161,6 +161,7 @@ X2GOBROKER_CONFIG_DEFAULTS = {
 # defaults for X2Go Sessino Broker session profiles file
 X2GOBROKER_SESSIONPROFILE_DEFAULTS = {
     u'DEFAULT': {
+        u'command': u'TERMINAL',
         u'defsndport': True,
         u'useiconv': False,
         u'iconvfrom': u'UTF-8',
@@ -184,7 +185,7 @@ X2GOBROKER_SESSIONPROFILE_DEFAULTS = {
         u'multidisp': False,
         u'sshproxyport': 22,
         u'sound': True,
-        u'rootless': False,
+        u'rootless': True,
         u'iconvto': u'UTF-8',
         u'soundtunnel': True,
         u'dpi': 96,
diff --git a/x2gobroker/tests/test_broker_base.py b/x2gobroker/tests/test_broker_base.py
index 0bda18e..1371724 100644
--- a/x2gobroker/tests/test_broker_base.py
+++ b/x2gobroker/tests/test_broker_base.py
@@ -274,6 +274,7 @@ check-credentials = false
     def test_getdefaultprofile(self):
         base_backend = self._init_base_backend()
         _expected_profile = {
+            'command': 'TERMINAL',
             'defsndport': True,
             'useiconv': False,
             'iconvfrom': 'UTF-8',
@@ -297,7 +298,7 @@ check-credentials = false
             'multidisp': False,
             'sshproxyport': 22,
             'sound': True,
-            'rootless': False,
+            'rootless': True,
             'iconvto': 'UTF-8',
             'soundtunnel': True,
             'dpi': 96,
@@ -306,6 +307,7 @@ check-credentials = false
             'pack': '16m-jpeg',
             'user': '',
             'host': [u'localhost'],
+            'directrdp': False,
         }
         _profile = base_backend.get_profile_defaults()
         self.assertEqual(len(_expected_profile.keys()), len(_profile.keys()))
diff --git a/x2gobroker/tests/test_broker_inifile.py b/x2gobroker/tests/test_broker_inifile.py
index 35b4289..6bc62f8 100644
--- a/x2gobroker/tests/test_broker_inifile.py
+++ b/x2gobroker/tests/test_broker_inifile.py
@@ -47,6 +47,96 @@ class TestX2GoBrokerBackendInifile(unittest.TestCase):
         for _profile_id in _profile_ids:
             self.assertTrue( ( 'default' not in inifile_backend.get_profile(_profile_id).keys() ) )
 
+    # TEST COMPLETION OF DEFAULTS FROM CODE IN defaults.py
+
+    def test_getprofilecompletion(self):
+        _session_profiles = """
+[DEFAULT]
+exports =
+fullscreen = false
+width = 800
+height = 600
+applications = TERMINAL, WWWBROWSER
+
+[testprofile]
+user = foo
+command = GNOME
+
+"""
+        tf = tempfile.NamedTemporaryFile()
+        print >> tf, _session_profiles
+        tf.seek(0)
+        inifile_backend = inifile.X2GoBroker(profile_config_file=tf.name)
+        _expected_defaults = copy.deepcopy(x2gobroker.defaults.X2GOBROKER_SESSIONPROFILE_DEFAULTS['DEFAULT'])
+        for key in copy.deepcopy(_expected_defaults).keys():
+            if key.startswith('acl-'):
+                del _expected_defaults[key]
+        _expected_defaults.update( {
+            u'exports': '',
+            u'fullscreen': False,
+            u'width': 800,
+            u'height': 600,
+            u'applications': ['TERMINAL','WWWBROWSER',],
+            u'user': 'foo',
+            u'command': 'GNOME',
+        } )
+        # just testing the directrdp hard-coded defaults
+        _expected_defaults.update( {
+            u'directrdp': False,
+        } )
+        _expected_profile = copy.deepcopy(_expected_defaults)
+        _profile = inifile_backend.get_profile('testprofile')
+        print _expected_defaults
+        for key in _expected_profile.keys():
+            self.assertTrue( ( key in _profile.keys() ) )
+        for key in _profile.keys():
+            self.assertTrue( ( key in _expected_profile.keys()  and _profile[key] == _expected_profile[key] ) )
+
+    # TEST COMPLETION OF DEFAULTS FROM CODE IN defaults.py
+
+    def test_getprofilecompletion(self):
+        _session_profiles = """
+[DEFAULT]
+exports =
+fullscreen = false
+width = 800
+height = 600
+applications = TERMINAL, WWWBROWSER
+
+[testprofile]
+user = foo
+command = GNOME
+
+"""
+        tf = tempfile.NamedTemporaryFile()
+        print >> tf, _session_profiles
+        tf.seek(0)
+        inifile_backend = inifile.X2GoBroker(profile_config_file=tf.name)
+        _expected_defaults = copy.deepcopy(x2gobroker.defaults.X2GOBROKER_SESSIONPROFILE_DEFAULTS['DEFAULT'])
+        for key in copy.deepcopy(_expected_defaults).keys():
+            if key.startswith('acl-'):
+                del _expected_defaults[key]
+        _expected_defaults.update( {
+            u'exports': '',
+            u'fullscreen': False,
+            u'width': 800,
+            u'height': 600,
+            u'applications': ['TERMINAL','WWWBROWSER',],
+            u'user': 'foo',
+            u'command': 'GNOME',
+        } )
+        # just testing the directrdp hard-coded defaults
+        _expected_defaults.update( {
+            u'directrdp': False,
+        } )
+        _expected_profile = copy.deepcopy(_expected_defaults)
+        _profile = inifile_backend.get_profile('testprofile')
+        for key in _expected_profile.keys():
+            self.assertTrue( ( key in _profile.keys() ) )
+        for key in _profile.keys():
+            self.assertTrue( ( key in _expected_profile.keys()  and _profile[key] == _expected_profile[key] ) )
+
+
     ### TEST SESSION PROFILES: get_profile_defaults()
 
     def test_getprofiledefaults(self):
@@ -74,16 +164,16 @@ applications = TERMINAL, WWWBROWSER
 
 [testprofile1]
 user = foo
-cmd = GNOME
+command = GNOME
 
 [testprofile2]
 user = bar
-cmd = KDE
+command = KDE
 fullscreen = true
 
 [testprofile3]
 user = bar
-cmd = KDE
+command = KDE
 fullscreen = true
 acl-users-deny = ALL
 acl-users-allow = foo,bar
@@ -102,23 +192,23 @@ acl-users-order = deny-allow
             u'fullscreen': False,
             u'width': 800,
             u'height': 600,
-            u'applications': ['TERMINAL','WWWBROWSER',]
+            u'applications': ['TERMINAL','WWWBROWSER',],
         } )
         _expected_profile1 = copy.deepcopy(_expected_defaults)
         _expected_profile1.update({
             u'user': 'foo',
-            u'cmd': 'GNOME',
+            u'command': 'GNOME',
         })
         _expected_profile2 = copy.deepcopy(_expected_defaults)
         _expected_profile2.update({
             u'user': 'bar',
-            u'cmd': 'KDE',
+            u'command': 'KDE',
             u'fullscreen': True,
         })
         _expected_profile3 = copy.deepcopy(_expected_defaults)
         _expected_profile3.update({
             u'user': 'bar',
-            u'cmd': 'KDE',
+            u'command': 'KDE',
             u'fullscreen': True,
         })
         _profile1 = inifile_backend.get_profile('testprofile1')
@@ -154,16 +244,16 @@ acl-clients-allow = 10.0.0.0/16,10.1.0.0/16,admin-1.intern,admin-2.intern
 
 [testprofile1]
 user = foo
-cmd = GNOME
+command = GNOME
 
 [testprofile2]
 user = foo
-cmd = GNOME
+command = GNOME
 acl-clients-deny = 10.0.2.0/24,ALL
 
 [testprofile3]
 user = bar
-cmd = KDE
+command = KDE
 fullscreen = true
 acl-users-deny = ALL
 acl-users-allow = foo,bar
@@ -223,15 +313,15 @@ applications = TERMINAL, WWWBROWSER
 
 [testprofile1]
 user =
-cmd = GNOME
+command = GNOME
 
 [testprofile2]
 user =
-cmd = XFCE
+command = XFCE
 
 [testprofile3]
 user =
-cmd = KDE
+command = KDE
 fullscreen = true
 """
         tf = tempfile.NamedTemporaryFile()
@@ -273,21 +363,21 @@ acl-groups-order = deny-allow
 
 [testprofile1]
 user =
-cmd = GNOME
+command = GNOME
 acl-users-allow = flip
 acl-users-deny = ALL
 acl-users-order = deny-allow
 
 [testprofile2]
 user =
-cmd = XFCE
+command = XFCE
 acl-users-allow = thekla
 acl-users-deny = ALL
 acl-users-order = deny-allow
 
 [testprofile3]
 user =
-cmd = KDE
+command = KDE
 fullscreen = true
 acl-users-deny = willi
 acl-users-order = deny-allow
@@ -302,40 +392,40 @@ acl-users-order = deny-allow
         list_of_profile_ids = list_of_profiles.keys()
         list_of_profile_ids.sort()
         self.assertEqual(list_of_profile_ids, ['testprofile1'])
-        self.assertEqual(list_of_profiles['testprofile1']['cmd'], 'GNOME')
+        self.assertEqual(list_of_profiles['testprofile1']['command'], 'GNOME')
 
         username_m = 'maja'
         list_of_profiles = inifile_backend.list_profiles(username_m)
         list_of_profile_ids = list_of_profiles.keys()
         list_of_profile_ids.sort()
         self.assertEqual(list_of_profile_ids, ['testprofile1', 'testprofile2', 'testprofile3'])
-        self.assertEqual(list_of_profiles['testprofile1']['cmd'], 'GNOME')
-        self.assertEqual(list_of_profiles['testprofile2']['cmd'], 'XFCE')
-        self.assertEqual(list_of_profiles['testprofile3']['cmd'], 'KDE')
+        self.assertEqual(list_of_profiles['testprofile1']['command'], 'GNOME')
+        self.assertEqual(list_of_profiles['testprofile2']['command'], 'XFCE')
+        self.assertEqual(list_of_profiles['testprofile3']['command'], 'KDE')
 
         username_k = 'kassandra'
         list_of_profiles = inifile_backend.list_profiles(username_k)
         list_of_profile_ids = list_of_profiles.keys()
         list_of_profile_ids.sort()
         self.assertEqual(list_of_profile_ids, ['testprofile1', 'testprofile2', 'testprofile3'])
-        self.assertEqual(list_of_profiles['testprofile1']['cmd'], 'GNOME')
-        self.assertEqual(list_of_profiles['testprofile2']['cmd'], 'XFCE')
-        self.assertEqual(list_of_profiles['testprofile3']['cmd'], 'KDE')
+        self.assertEqual(list_of_profiles['testprofile1']['command'], 'GNOME')
+        self.assertEqual(list_of_profiles['testprofile2']['command'], 'XFCE')
+        self.assertEqual(list_of_profiles['testprofile3']['command'], 'KDE')
 
         username_t = 'thekla'
         list_of_profiles = inifile_backend.list_profiles(username_t)
         list_of_profile_ids = list_of_profiles.keys()
         list_of_profile_ids.sort()
         self.assertEqual(list_of_profile_ids, ['testprofile2'])
-        self.assertEqual(list_of_profiles['testprofile2']['cmd'], 'XFCE')
+        self.assertEqual(list_of_profiles['testprofile2']['command'], 'XFCE')
 
         username_w = 'willi'
         list_of_profiles = inifile_backend.list_profiles(username_w)
         list_of_profile_ids = list_of_profiles.keys()
         list_of_profile_ids.sort()
         self.assertEqual(list_of_profile_ids, ['testprofile1', 'testprofile2'])
-        self.assertEqual(list_of_profiles['testprofile1']['cmd'], 'GNOME')
-        self.assertEqual(list_of_profiles['testprofile2']['cmd'], 'XFCE')
+        self.assertEqual(list_of_profiles['testprofile1']['command'], 'GNOME')
+        self.assertEqual(list_of_profiles['testprofile2']['command'], 'XFCE')
 
     ### TEST: select_session() method
 
diff --git a/x2gobroker/tests/test_broker_zeroconf.py b/x2gobroker/tests/test_broker_zeroconf.py
index 0e97b66..1a42278 100644
--- a/x2gobroker/tests/test_broker_zeroconf.py
+++ b/x2gobroker/tests/test_broker_zeroconf.py
@@ -63,6 +63,8 @@ class TestX2GoBrokerBackendZeroconf(unittest.TestCase):
                 'sshport': 22,
                 'setdpi': 0,
                 'pack': u'16m-jpeg',
+                # make sure, hard-coded defaults end up in the list_profiles() output of the zeroconf backend, as well
+                'directrdp': False,
             },
         }
         zeroconf_backend = x2gobroker.brokers.zeroconf_broker.X2GoBroker()
@@ -73,6 +75,8 @@ class TestX2GoBrokerBackendZeroconf(unittest.TestCase):
         _test_profiles = {
             _key: list_of_profiles['unittest']
         }
+        for key in _profiles[_key]:
+            print key, _profiles[_key][key], _test_profiles[_key][key]
         self.assertEqual(_profiles, _test_profiles)
 
     ### TEST: select_profile() method
diff --git a/x2gobroker/uccsjson.py b/x2gobroker/uccsjson.py
new file mode 100644
index 0000000..779e2ba
--- /dev/null
+++ b/x2gobroker/uccsjson.py
@@ -0,0 +1,241 @@
+# Copyright (C) 2012 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
+# Copyright (C) 2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
+# Copyright (C) 2012 by Heinz-Markus Graesing <heinz-m.graesing at obviously-nice.de>
+#
+# X2Go Session Broker is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation; either version 3 of the License, or
+# (at your option) any later version.
+#
+# X2Go Session Broker is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program; if not, write to the
+# Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
+
+import json
+
+def convert_to_builtin_type(obj):
+    """\
+    Helper function for converting Python objects to dictionaries.
+    Used for doing JSON dumps.
+
+    """
+    d = { }
+    d.update(obj.__dict__)
+    return d
+
+class ManagementServer():
+    """\
+    Base class for generating UCCS compatible JSON object.
+
+    """
+    def __init__(self, url, name):
+        """\
+        Initializ instance.
+
+        @param url: URL of the UCCS broker server
+        @type url: C{unicode}
+        @param name: human-readable, descriptive server name
+        @type name: C{unicode}
+
+        """
+        self.RemoteDesktopServers = []
+        self.AdditionalManagementServers = []
+        self.URL = url
+        self.Name = name
+
+    def set_default(self, ts_name):
+        """\
+        Define the default (terminal) server instance.
+
+        @param ts_name: name of the terminal server that is to be set as default
+        @type ts_name: C{unicode}
+
+        """
+        if isinstance(tsName, str):
+            self.DefaultServer = tsName
+        else:
+            raise TypeError("set_default expects a string argument")
+
+    def add_terminal_server(self, server):
+        """\
+        Add a terminal server to this management server object.
+
+        @param server: instance of class L{RDPServer} or L{X2GoServer}.
+        @type server: C{obj}
+
+        """
+        self.RemoteDesktopServers.append(server)
+
+    # NOT USED!!!
+    #def add_additional_management_server(self, amserver):
+    #    if isinstance(amserver, AdditionalManagementServer):
+    #        self.AdditionalManagementServers.append(amserver)
+    #    else:
+    #        raise TypeError("add_additional_management_server expects a "\
+    #            "AdditionalManagementServer argument")
+
+    def toJson(self):
+        """\
+        Dump this instance as JSON object.
+
+        """
+        return json.dumps(self, default=convert_to_builtin_type)
+
+
+# NOT USED!!!
+#class AdditionalManagementServer():
+#    def __init__(self, url, name):
+#        self.URL = url
+#        self.Name = name
+
+
+class RDPServer():
+    """\
+    Instantiate a UCCS compatible RDP server session profile object.
+
+    """
+    def __init__(self, host, name, username=None, password=None):
+        """\
+        @param host: hostname of RDP server host
+        @type host: C{unicode}
+        @param name: session profile name
+        @type name: C{unicode}
+        @param username: username to be used for login
+        @type username: C{unicode}
+        @param password: password to be used for login
+        @type password: C{unicode}
+
+        """
+        self.URL = unicode(host)
+        self.Name = unicode(name)
+        self.Protocol = u'freerdp'
+        self.DomainRequired = unicode(True)
+        self.Username = unicode(username)
+        self.Password = unicode(password)
+
+    def set_domain(self, domain):
+        """\
+        Set the domain for this RDP server.
+
+        @param domain: the domain name to be set
+        @type domain: C{unicode}
+
+        @raise TypeError: domain has to be C{str} or C{unicode}
+
+        """
+        if isinstance(domainName, str):
+            self.WindowsDomain = unicode(domain)
+        elif isinstance(domainName, unicode):
+            self.WindowsDomain = domain
+        else:
+            raise TypeError("set_domain() expects a string or unicode argument")
+
+    def toJson(self):
+        """\
+        Dump this instance as JSON object.
+
+        """
+        return json.dumps(self, default=convert_to_builtin_type)
+
+
+class ICAServer():
+    """\
+    Instantiate a UCCS compatible ICA server session profile object.
+
+    """
+    def __init__(self, host, name, username=None, password=None):
+        """\
+        @param host: hostname of ICA server host
+        @type host: C{unicode}
+        @param name: session profile name
+        @type name: C{unicode}
+        @param username: username to be used for login
+        @type username: C{unicode}
+        @param password: password to be used for login
+        @type password: C{unicode}
+
+        """
+        self.URL = unicode(host)
+        self.Name = unicode(name)
+        self.Protocol = u'ica'
+        self.DomainRequired = unicode(True)
+        self.Username = unicode(username)
+        self.Password = unicode(password)
+
+    def set_domain(self, domain):
+        """\
+        Set the domain for this ICA server.
+
+        @param domain: the domain name to be set
+        @type domain: C{unicode}
+
+        @raise TypeError: domain has to be C{str} or C{unicode}
+
+        """
+        if isinstance(domainName, str):
+            self.WindowsDomain = unicode(domain)
+        elif isinstance(domainName, unicode):
+            self.WindowsDomain = domain
+        else:
+            raise TypeError("set_domain() expects a string or unicode argument")
+
+    def toJson(self):
+        """\
+        Dump this instance as JSON object.
+
+        """
+        return json.dumps(self, default=convert_to_builtin_type)
+
+
+class X2GoServer():
+    """\
+    Instantiate a UCCS compatible X2Go Server session profile object.
+
+    """
+    def __init__(self, host, name, username=None, password=None):
+        """\
+        @param host: hostname of X2Go Server host
+        @type host: C{unicode}
+        @param name: session profile name
+        @type name: C{unicode}
+        @param username: username to be used for login
+        @type username: C{unicode}
+        @param password: password to be used for login
+        @type password: C{unicode}
+
+        """
+        self.URL = host
+        self.Name = name
+        self.Protocol = 'x2go'
+        self.SessionTypeRequired = True
+        self.Username = username
+        self.Password = password
+
+    def set_session_type(self, session_type):
+        """\
+        Set the session type to be used with this X2Go Server.
+
+        @param session_type: the session type to be set
+        @type session_type: C{unicode}
+
+        @raise TypeError: session_type has to be C{str} or C{unicode}
+
+        """
+        if isinstance(domainName, str):
+            self.SessionType = sessiontypeName
+        else:
+            raise TypeError("set_session_type() expects a string or unicode argument")
+
+    def toJson(self):
+        """\
+        Dump this instance as JSON object.
+
+        """
+        return json.dumps(self, default=convert_to_builtin_type)
+
diff --git a/x2gobroker/web/uccs.py b/x2gobroker/web/uccs.py
index be63096..6078383 100644
--- a/x2gobroker/web/uccs.py
+++ b/x2gobroker/web/uccs.py
@@ -29,84 +29,7 @@ from tornado.escape import native_str, parse_qs_bytes
 import x2gobroker.defaults
 
 from x2gobroker.loggers import logger_broker, logger_error
-
-
-def convert_to_builtin_type(obj):
-    d = { }
-    d.update(obj.__dict__)
-    return d
-
-
-class ManagementServer():
-    def __init__(self, url, name):
-        self.RemoteDesktopServers = []
-        self.AdditionalManagementServers = []
-        self.URL = url
-        self.Name = name
-
-    def set_default(self, tsName):
-        if isinstance(tsName, str):
-            self.DefaultServer = tsName
-        else:
-            raise TypeError("set_default expects a string argument")
-
-    def add_terminal_server(self, server):
-        self.RemoteDesktopServers.append(server)
-
-    def add_additional_management_server(self, amserver):
-        if isinstance(amserver, AdditionalManagementServer):
-            self.AdditionalManagementServers.append(amserver)
-        else:
-            raise TypeError("add_additional_management_server expects a "\
-                "AdditionalManagementServer argument")
-
-    def toJson(self):
-        return json.dumps(self, default=convert_to_builtin_type)
-
-
-class AdditionalManagementServer():
-    def __init__(self, url, name):
-        self.URL = url
-        self.Name = name
-
-
-class RDPServer():
-    def __init__(self, url, name, username=None, password=None):
-        self.URL = url
-        self.Name = name
-        self.Protocol = 'freerdp'
-        self.DomainRequired = True
-        self.Username = username
-        self.Password = password
-
-    def add_domain(self, domainName):
-        if isinstance(domainName, str):
-            self.WindowsDomain = domainName
-        else:
-            raise TypeError("add_domain expects a string argument")
-
-    def toJson(self):
-        return json.dumps(self, default=convert_to_builtin_type)
-
-
-class X2GoServer():
-    def __init__(self, url, name, username=None, password=None):
-        self.URL = url
-        self.Name = name
-        self.Protocol = 'x2go'
-        self.SessionTypeRequired = True
-        self.Username = username
-        self.Password = password
-
-    def add_sessiontype(self, sessiontypeName):
-        if isinstance(domainName, str):
-            self.SessionType = sessiontypeName
-        else:
-            raise TypeError("add_sessiontype expects a string argument")
-
-    def toJson(self):
-        return json.dumps(self, default=convert_to_builtin_type)
-
+import x2gobroker.uccsjson
 
 class X2GoBrokerWeb(tornado.web.RequestHandler):
 
@@ -161,6 +84,7 @@ class X2GoBrokerWeb(tornado.web.RequestHandler):
             logger_error.error('client could not provide an IP address, pretending: 404 Not Found')
             raise tornado.web.HTTPError(404)
 
+        username = 'foo'
         #username = self.get_argument('user', default='')
         #password = self.get_argument('password', default='')
         #cookie = self.get_argument('cookie', default='')
@@ -179,20 +103,21 @@ class X2GoBrokerWeb(tornado.web.RequestHandler):
 
         profiles = broker_backend.list_profiles(username)
         if profiles:
-            ms = ManagementServer('http://localhost:8080/uccs/{backend}'.format(backend=backend), 'X2Go Session Broker')
+            ms = x2gobroker.uccsjson.ManagementServer('http://localhost:8080/uccs/{backend}'.format(backend=backend), 'X2Go Session Broker')
 
             profile_ids = profiles.keys()
             profile_ids.sort()
 
             for profile_id in profile_ids:
 
-                if profiles[profile_id]['directrdp']:
+                print profiles[profile_id]
+                if profiles[profile_id][u'directrdp']:
                     pass
                 else:
-                    ts = X2GoServer(
-                            url='{hostname}:{port}'.format(hostname=profiles[profile_id]['host'], port=profiles[profile_id]['sshport'])
-                            name=profiles[profile_id]['name']
-                            username=profiles[profile_id]['user']
+                    ts = x2gobroker.uccsjson.X2GoServer(
+                            host='{hostname}:{port}'.format(hostname=profiles[profile_id][u'host'], port=profiles[profile_id][u'sshport']),
+                            name=profiles[profile_id][u'name'],
+                            username=profiles[profile_id][u'user'],
                     )
                 ms.add_terminal(ts)
 


hooks/post-receive
-- 
x2gobroker.git (HTTP(S) Session broker for X2Go)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "x2gobroker.git" (HTTP(S) Session broker for X2Go).




More information about the x2go-commits mailing list