[X2Go-Commits] x2gobroker.git - statusflag (branch) updated: 0.0.1.0-7-gb440438

X2Go dev team git-admin at x2go.org
Tue Jun 4 21:10:00 CEST 2013


The branch, statusflag has been updated
       via  b440438bdbdcdd248957f6e2e0cfe4deaab895b5 (commit)
      from  830502fcaa69733d4c5f6561d335a5f7032c4baa (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 -----------------------------------------------------------------
-----------------------------------------------------------------------

Summary of changes:
 etc/broker/x2gobroker-sessionprofiles.conf |    1 +
 x2gobroker/defaults.py                     |    1 +
 x2gobroker/web/uccs.py                     |  205 ++++++++++++++++++++++++++++
 3 files changed, 207 insertions(+)
 create mode 100644 x2gobroker/web/uccs.py

The diff of changes is:
diff --git a/etc/broker/x2gobroker-sessionprofiles.conf b/etc/broker/x2gobroker-sessionprofiles.conf
index dc79a6b..2f0caea 100644
--- a/etc/broker/x2gobroker-sessionprofiles.conf
+++ b/etc/broker/x2gobroker-sessionprofiles.conf
@@ -59,6 +59,7 @@ dpi=96
 sshport=22
 setdpi=0
 pack=16m-jpeg
+directrdp=false
 
 ### EXAMPLES: Below you find some config examples. Adapt them to your needs or
 ### simply write your own session profiles and remove the examples below.
diff --git a/x2gobroker/defaults.py b/x2gobroker/defaults.py
index fcbb8ca..8a930dc 100644
--- a/x2gobroker/defaults.py
+++ b/x2gobroker/defaults.py
@@ -193,6 +193,7 @@ X2GOBROKER_SESSIONPROFILE_DEFAULTS = {
         u'pack': u'16m-jpeg',
         u'user': '',
         u'host': [ u'localhost', ],
+        u'directrdp': False,
         u'acl-users-allow': [],
         u'acl-users-deny': [],
         u'acl-users-order': '',
diff --git a/x2gobroker/web/uccs.py b/x2gobroker/web/uccs.py
new file mode 100644
index 0000000..be63096
--- /dev/null
+++ b/x2gobroker/web/uccs.py
@@ -0,0 +1,205 @@
+#!/usr/bin/env python
+
+# This file is part of the  X2Go Project - http://www.x2go.org
+# Copyright (C) 2011-2012 by Oleksandr Shneyder <oleksandr.shneyder at obviously-nice.de>
+# Copyright (C) 2011-2012 by Heinz-Markus Graesing <heinz-m.graesing at obviously-nice.de>
+# Copyright (C) 2012 by Mike Gabriel <mike.gabriel at das-netzwerkteam.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.
+
+# modules
+import types
+import tornado.web
+from tornado.escape import native_str, parse_qs_bytes
+
+# Python X2Go Broker modules
+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)
+
+
+class X2GoBrokerWeb(tornado.web.RequestHandler):
+
+    http_header_items = {
+        'Content-Type': 'text/plain; charset=utf-8',
+        'Expires': '+1h',
+    }
+
+    def _gen_http_header(self):
+
+        for http_header_item in self.http_header_items.keys():
+            self.set_header(http_header_item, self.http_header_items[http_header_item])
+
+    def get(self, backend):
+        if x2gobroker.defaults.X2GOBROKER_DEBUG:
+            self._gen_http_header()
+            logger_broker.warn('GET http request detected, if unwanted: disable X2GOBROKER_DEBUG')
+            return self.post(backend)
+        raise tornado.web.HTTPError(404)
+
+    def post(self, backend):
+
+        if not backend:
+            backend = x2gobroker.defaults.X2GOBROKER_DEFAULT_BACKEND
+        else:
+            backend = backend.rstrip('/')
+
+        # silence pyflakes...
+        broker_backend = None
+        # dynamically detect broker backend from given URL
+        exec("import x2gobroker.brokers.{backend}_broker".format(backend=backend))
+        exec("broker_backend = x2gobroker.brokers.{backend}_broker.X2GoBroker()".format(backend=backend))
+        global_config = broker_backend.get_global_config()
+
+        # if the broker backend is disabled in the configuration, pretend to have nothing on offer
+        if not broker_backend.is_enabled():
+            raise tornado.web.HTTPError(404)
+
+        # FIXME: this is to work around a bug in X2Go Client (http://bugs.x2go.org/138)
+        content_type = self.request.headers.get("Content-Type", "")
+        if not content_type.startswith("application/x-www-form-urlencoded"):
+            for name, values in parse_qs_bytes(native_str(self.request.body)).iteritems():
+                self.request.arguments.setdefault(name, []).extend(values)
+
+        # set the client address for the broker backend
+        ip = self.request.remote_ip
+        if ip:
+            logger_broker.info('client address is {address}'.format(address=ip))
+            broker_backend.set_client_address(ip)
+        elif not x2gobroker.defaults.X2GOBROKER_DEBUG:
+            # if the client IP is not set, we pretend to have nothing on offer
+            logger_error.error('client could not provide an IP address, pretending: 404 Not Found')
+            raise tornado.web.HTTPError(404)
+
+        #username = self.get_argument('user', default='')
+        #password = self.get_argument('password', default='')
+        #cookie = self.get_argument('cookie', default='')
+        #task = self.get_argument('task', default='')
+        #profile_id = self.get_argument('sid', default='')
+        #new_password = self.get_argument('newpass', default='')
+
+        output = ''
+
+        #logger_broker.debug ('username: {username}, password: {password}, task: {task}, profile_id: {profile_id}'.format(username=username, password='XXXXX', task=task, profile_id=profile_id))
+        #if broker_backend.check_access(username=username, password=password, cookie=cookie):
+
+        ###
+        ### CONFIRM SUCCESSFUL AUTHENTICATION FIRST
+        ###
+
+        profiles = broker_backend.list_profiles(username)
+        if profiles:
+            ms = 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']:
+                    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']
+                    )
+                ms.add_terminal(ts)
+
+            output += ms.toJson()
+
+            self.write(output)
+            return
+
+        raise tornado.web.HTTPError(401)
+


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