[X2Go-Commits] x2gobroker.git - build-main (branch) updated: c095f00db803b2e547a190aa1ff4b55f865e816f

X2Go dev team git-admin at x2go.org
Sun May 19 13:02:59 CEST 2013


The branch, build-main has been updated
       via  c095f00db803b2e547a190aa1ff4b55f865e816f (commit)
      from  28c20041e7709026e6f4518e4ad05d87895524bf (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:
 x2gobroker/backends/base.py               |   22 ++++-
 x2gobroker/config.py                      |   18 +++++
 x2gobroker/defaults.py                    |    6 +-
 x2gobroker/tests/__init__.py              |   10 +--
 x2gobroker/tests/test_backend_base.py     |    4 +-
 x2gobroker/tests/test_backend_zeroconf.py |    4 +-
 x2gobroker/tests/test_web_plain_base.py   |  125 +++++++++++++++++++++++++++++
 x2gobroker/web/plain.py                   |    3 +-
 8 files changed, 174 insertions(+), 18 deletions(-)
 create mode 100644 x2gobroker/tests/test_web_plain_base.py

The diff of changes is:
diff --git a/x2gobroker/backends/base.py b/x2gobroker/backends/base.py
index 7919e2b..e08db6c 100644
--- a/x2gobroker/backends/base.py
+++ b/x2gobroker/backends/base.py
@@ -48,12 +48,14 @@ class X2GoBroker(object):
 
     backend_name = 'base'
 
-    def __init__(self, config_file="/etc/x2go/x2gobroker.conf", config_defaults=x2gobroker.defaults.X2GOBROKER_CONFIG_DEFAULTS):
+    def __init__(self, config_file=None, config_defaults=None):
         """\
         Initialize a new X2GoBroker instance to control X2Go session through an
         X2Go Client with an intermediate session broker.
 
         """
+        if config_file is None: config_file = x2gobroker.defaults.X2GOBROKER_CONFIG
+        if config_defaults is None: config_defaults = x2gobroker.defaults.X2GOBROKER_CONFIG_DEFAULTS
         self.config = x2gobroker.config.X2GoBrokerConfigFile(config_files=config_file, defaults=config_defaults)
 
         self._dynamic_authid_map = {}
@@ -120,6 +122,10 @@ class X2GoBroker(object):
         #}
         return 'OK'
 
+    def _auth_mech_testsuite(self, username='', password=''):
+        if username == 'test' and password == 'sweet':
+            return True
+
     def _auth_mech_pam(self, username='', password=''):
 
         # do a simple PAM authentication against the PAM service ,,x2gobroker''
@@ -134,12 +140,20 @@ class X2GoBroker(object):
 
     def _do_authenticate(self, username='', password=''):
 
-        if self.config.get_value(self.backend_name, 'auth-mech').lower() == 'pam':
+        if self.config.has_value(self.backend_name, 'auth-mech'):
+            _auth_mech = self.config.get_value(self.backend_name, 'auth-mech').lower()
+        else:
+            _auth_mech = "pam"
+
+        if _auth_mech == 'pam':
             return self._auth_mech_pam(username=username, password=password)
 
-        elif self.config.get_value(self.backend_name, 'auth-mech').lower() == 'htpasswd':
+        elif _auth_mech == 'htpasswd':
             return self._auth_mech_htpasswd(username=username, password=password)
 
+        elif _auth_mech == 'testsuite':
+            return self._auth_mech_testsuite(username=username, password=password)
+
         return False
 
     def check_access(self, username='', password='', authid=None, ):
@@ -166,7 +180,7 @@ class X2GoBroker(object):
         ### when inheriting from the base.X2GoBroker class.
 
         access = False
-        access = self._do_authenticate(username=username, password=password, authid=authid)
+        access = self._do_authenticate(username=username, password=password)
 
         # using authid as extra security?
         if self.config.get_value('global', 'use-authid'):
diff --git a/x2gobroker/config.py b/x2gobroker/config.py
index 51524d8..02d500d 100644
--- a/x2gobroker/config.py
+++ b/x2gobroker/config.py
@@ -218,6 +218,24 @@ class X2GoBrokerConfigFile(object):
         """
         return type(self.defaultValues[section][key])
 
+    def has_value(self, section, key):
+        """\
+        Test if a given C{key} in C{section} exists (and
+        has some sort of a value).
+
+        @param section: the ini file section
+        @type section: C{str}
+        @param key: the ini file key in the given section
+        @type key: C{str}
+
+        @return: return C{True} if <key> in <section> exists
+        @rtype: C{bool}
+
+        """
+        if section in self.iniConfig.sections():
+            return ( key in self.iniConfig.options(section) )
+        return False
+
     def get_value(self, section, key, key_type=None):
         """\
         Retrieve a value for a given section and key.
diff --git a/x2gobroker/defaults.py b/x2gobroker/defaults.py
index 34a33fb..2523166 100644
--- a/x2gobroker/defaults.py
+++ b/x2gobroker/defaults.py
@@ -26,7 +26,11 @@ import uuid
 # the home directory of the user that the daemon/cgi runs as
 X2GOBROKER_HOME = os.path.normpath(os.path.expanduser('~'))
 
-# FIXME: this path must not be hard-coded
+if os.environ.has_key('X2GOBROKER_CONFIG'):
+    X2GOBROKER_CONFIG=os.environ['X2GOBROKER_CONFIG']
+else:
+    X2GOBROKER_CONFIG="/etc/x2go/x2gobroker.conf"
+
 if os.environ.has_key('X2GOBROKER_AGENT_CMD'):
     X2GOBROKER_AGENT_CMD=os.environ['X2GOBROKER_AGENT_CMD']
 else:
diff --git a/x2gobroker/tests/__init__.py b/x2gobroker/tests/__init__.py
index 7b5de7d..c4b0dcb 100644
--- a/x2gobroker/tests/__init__.py
+++ b/x2gobroker/tests/__init__.py
@@ -2,12 +2,12 @@
 
 # Copyright (C) 2010 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
 # 
-# Python X2Go is free software; you can redistribute it and/or modify
+# 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.
 #
-# Python X2Go is distributed in the hope that it will be useful,
+# 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.
@@ -19,10 +19,4 @@
 
 import os
 import sys
-base = os.path.join(os.path.split(os.path.split(os.getcwd())[0])[0])
-
-# prepend the X2Go path (useful for building new packages)
-sys.path = [ os.path.normpath(base), ] + sys.path
-
 import runalltests
-import test_printing
diff --git a/x2gobroker/tests/test_backend_base.py b/x2gobroker/tests/test_backend_base.py
index 2cdd066..7c4d13e 100644
--- a/x2gobroker/tests/test_backend_base.py
+++ b/x2gobroker/tests/test_backend_base.py
@@ -2,12 +2,12 @@
 
 # Copyright (C) 2010 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
 # 
-# Python X2Go is free software; you can redistribute it and/or modify
+# 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.
 #
-# Python X2Go is distributed in the hope that it will be useful,
+# 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.
diff --git a/x2gobroker/tests/test_backend_zeroconf.py b/x2gobroker/tests/test_backend_zeroconf.py
index f7d9b9d..f47e8b2 100644
--- a/x2gobroker/tests/test_backend_zeroconf.py
+++ b/x2gobroker/tests/test_backend_zeroconf.py
@@ -2,12 +2,12 @@
 
 # Copyright (C) 2010 by Mike Gabriel <mike.gabriel at das-netzwerkteam.de>
 # 
-# Python X2Go is free software; you can redistribute it and/or modify
+# 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.
 #
-# Python X2Go is distributed in the hope that it will be useful,
+# 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.
diff --git a/x2gobroker/tests/test_web_plain_base.py b/x2gobroker/tests/test_web_plain_base.py
new file mode 100644
index 0000000..a1d7513
--- /dev/null
+++ b/x2gobroker/tests/test_web_plain_base.py
@@ -0,0 +1,125 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2010 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.
+
+import unittest
+import tempfile
+from paste.fixture import TestApp
+from paste.request import EnvironHeaders
+from nose.tools import *
+
+# remove later, for debugging
+import subprocess
+
+# Python X2GoBroker modules
+import x2gobroker.backends.base
+import x2gobroker.defaults
+
+from x2gobroker.web.plain import *
+
+urls = ( '/plain/(.*)', 'X2GoBrokerWebPlain',)
+app = web.application(urls, globals())
+
+x2gobroker.defaults.X2GOBROKER_CONFIG_DEFAULTS.update({'base': {'enable': True, 'auth-mech': 'pam', }, })
+
+class TestX2GoBrokerWebPlainBase(unittest.TestCase):
+
+    ### TEST RESPONSE: is enabled?
+
+    def test_isenabled(self):
+        middleware = []
+        _config = """
+[base]
+enable = false
+"""
+        tf = tempfile.NamedTemporaryFile()
+        print >> tf, _config
+        tf.seek(0)
+        x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
+        testApp = TestApp(app.wsgifunc(*middleware))
+        r = testApp.get('/plain/base/', expect_errors=True)
+        assert_equal(r.status, 404)
+        tf.close()
+        _config = """
+[base]
+enable = true
+"""
+        tf = tempfile.NamedTemporaryFile()
+        print >> tf, _config
+        tf.seek(0)
+        x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
+        testApp = TestApp(app.wsgifunc(*middleware))
+        r = testApp.get('/plain/base/', expect_errors=True)
+        assert_equal(r.status, 200)
+        r.mustcontain('Access denied')
+        tf.close()
+
+
+    ### TEST RESPONSE: simple authentication (check_access)
+
+    def test_checkaccess(self):
+        middleware = []
+        testApp = TestApp(app.wsgifunc(*middleware))
+        r = testApp.get('/plain/base/', expect_errors=True)
+        assert_equal(r.status, 200)
+        r.mustcontain('Access denied')
+
+        _config = """
+[base]
+enable = true
+auth-mech = testsuite
+"""
+        tf = tempfile.NamedTemporaryFile()
+        print >> tf, _config
+        tf.seek(0)
+        x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
+        r = testApp.get('/plain/base/', params={'user': 'test', 'password': 'sweet', }, expect_errors=True)
+        assert_equal(r.status, 200)
+        r.mustcontain('Access granted')
+
+    ### TEST TASK: listsessions (nothing should be returned for the base backend)
+
+    def test_listsessions(self):
+        middleware = []
+        _config = """
+[base]
+enable = true
+auth-mech = testsuite
+"""
+        tf = tempfile.NamedTemporaryFile()
+        print >> tf, _config
+        tf.seek(0)
+        x2gobroker.defaults.X2GOBROKER_CONFIG = tf.name
+        testApp = TestApp(app.wsgifunc(*middleware))
+        r = testApp.get('/plain/base/', params={'user': 'test', 'password': 'sweet',  'task': 'listsessions', }, expect_errors=True)
+        assert_equal(r.status, 200)
+        r.mustcontain('Access granted')
+        r.mustcontain(no='START_USER_SESSIONS')
+        r.mustcontain(no='END_USER_SESSIONS')
+        r.mustcontain(no='<BR>',)
+        r.mustcontain(no='<br>',)
+        r.mustcontain(no='<BR />', )
+        r.mustcontain(no='<br />', )
+
+
+
+def test_suite():
+    from unittest import TestSuite, makeSuite
+    suite = TestSuite()
+    suite.addTest(makeSuite(TestX2GoBrokerWebPlainBase))
+    return suite
diff --git a/x2gobroker/web/plain.py b/x2gobroker/web/plain.py
index d64f0ae..d557bcc 100644
--- a/x2gobroker/web/plain.py
+++ b/x2gobroker/web/plain.py
@@ -51,10 +51,11 @@ class X2GoBrokerWebPlain:
 
         # silence pyflakes...
         broker_backend = None
+        # dynamically detect broker backend from given URL
         exec("import x2gobroker.backends.{backend}".format(backend=backend))
         exec("broker_backend = x2gobroker.backends.{backend}.X2GoBroker()".format(backend=backend))
         global_config = broker_backend.get_global_config()
-        backend_config = broker_backend.get_backend_config(backend)
+        backend_config = broker_backend.get_backend_config()
 
         if not broker_backend.is_enabled():
             return web.notfound()


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