Example #1
0
    def test_ugm_backend(self):
        backend = ugm_backend.ugm
        self.assertTrue(IUgm.providedBy(backend))

        self.assertTrue(backend is ugm_backend.ugm)
        ugm_backend.initialize()
        self.assertFalse(backend is ugm_backend.ugm)
Example #2
0
    def setUp(self, args=None):
        super(UGMLayer, self).setUp(args)
        path = pkg_resources.resource_filename('cone.ugm.testing', 'ldap.xml')
        ugm_backend.load('ldap', {'ldap.config': path})
        ugm_backend.initialize()
        ugm = ugm_backend.ugm
        roles = ['viewer', 'editor', 'admin', 'manager']

        def create_user(uid):
            data = {
                'cn': uid,
                'sn': uid,
                'mail': '*****@*****.**' % uid,
            }
            user = ugm.users.create(uid, **data)
            ugm()
            ugm.users.passwd(uid, None, 'secret')
            return user
        for uid in ['viewer', 'editor', 'admin', 'manager', 'max', 'sepp']:
            user = create_user(uid)
            if uid in roles:
                user.add_role(uid)
        for uid in ['localmanager_1', 'localmanager_2']:
            create_user(uid)
        for gid, uid in [
            ('admin_group_1', 'localmanager_1'),
            ('admin_group_2', 'localmanager_2')
        ]:
            group = ugm.groups.create(gid)
            group.add(uid)
        ugm()
Example #3
0
 def make_app(self):
     super(SQLLayer, self).make_app(
         **{
             'cone.plugins': '\n'.join(['cone.sql', 'cone.ugm']),
             'ugm.backend': 'sql',
             'ugm.config': testing.ugm_config,
             'ugm.localmanager_config': testing.localmanager_config,
             'sql.binary_attrs': 'portrait'
         })
     ugm_backend.initialize()
Example #4
0
 def make_app(self):
     kw = dict()
     plugins = ['cone.sql']
     if CONE_UGM_INSTALLED:
         plugins.append('cone.ugm')
         kw['ugm.backend'] = 'sql'
         kw['ugm.config'] = testing.ugm_config
         kw['ugm.localmanager_config'] = testing.localmanager_config
         kw['sql.binary_attrs'] = 'portrait'
     kw['cone.plugins'] = '\n'.join(plugins)
     super(SQLLayer, self).make_app(**kw)
     if CONE_UGM_INSTALLED:
         ugm_backend.initialize()
Example #5
0
 def make_app(self):
     ugm_users_file = os.path.join(self.ugm_dir, 'users')
     ugm_groups_file = os.path.join(self.ugm_dir, 'groups')
     ugm_roles_file = os.path.join(self.ugm_dir, 'roles')
     ugm_datadir = os.path.join(self.ugm_dir, 'data')
     super(UGMLayer, self).make_app(
         **{
             'cone.plugins': '\n'.join(['cone.ugm']),
             'ugm.backend': 'file',
             'ugm.config': ugm_config,
             'ugm.localmanager_config': localmanager_config,
             'ugm.users_file': ugm_users_file,
             'ugm.groups_file': ugm_groups_file,
             'ugm.roles_file': ugm_roles_file,
             'ugm.datadir': ugm_datadir
         })
     ugm_backend.initialize()
Example #6
0
    def test_FileUGMFactory(self):
        self.assertTrue('file' in ugm_backend.registry)
        self.assertTrue(ugm_backend.registry['file'] is FileUGMFactory)

        ugm_backend.load('file', {
            'ugm.users_file': 'users',
            'ugm.groups_file': 'groups',
            'ugm.roles_file': 'roles',
            'ugm.datadir': 'userdata'
        })
        ugm_backend.initialize()
        ugm = ugm_backend.ugm

        self.assertTrue(isinstance(ugm, FileUgm))
        self.assertEqual(ugm.users_file, 'users')
        self.assertEqual(ugm.groups_file, 'groups')
        self.assertEqual(ugm.roles_file, 'roles')
        self.assertEqual(ugm.data_directory, 'userdata')
Example #7
0
    def make_app(self):
        super(LDAPLayer, self).make_app(
            **{
                'cone.plugins': '\n'.join(['cone.ldap', 'cone.ugm']),
                'ugm.backend': 'ldap',
                'ugm.config': testing.ugm_config,
                'ugm.localmanager_config': testing.localmanager_config,
                'ldap.server_config': ldap_server_config,
                'ldap.users_config': ldap_users_config,
                'ldap.groups_config': ldap_groups_config,
                'ldap.roles_config': ldap_roles_config
            })

        settings = get_root()['settings']
        settings['ldap_users'].create_container()
        settings['ldap_groups'].create_container()
        settings['ldap_roles'].create_container()
        ugm_backend.initialize()
Example #8
0
    def test_FileUGMFactory(self):
        self.assertTrue('file' in ugm_backend.registry)
        self.assertTrue(ugm_backend.registry['file'] is FileUGMFactory)

        ugm_backend.load(
            'file', {
                'ugm.users_file': 'users',
                'ugm.groups_file': 'groups',
                'ugm.roles_file': 'roles',
                'ugm.datadir': 'userdata'
            })
        ugm_backend.initialize()
        ugm = ugm_backend.ugm

        self.assertTrue(isinstance(ugm, FileUgm))
        self.assertEqual(ugm.users_file, 'users')
        self.assertEqual(ugm.groups_file, 'groups')
        self.assertEqual(ugm.roles_file, 'roles')
        self.assertEqual(ugm.data_directory, 'userdata')
Example #9
0
    def test_ugm_backend(self):
        ugm_backend.registry = dict()
        ugm_backend.name = None
        ugm_backend.factory = None
        ugm_backend.ugm = None

        class DummyUGM(object):
            pass

        @ugm_backend('dummy')
        class DummyUGMFactory(UGMFactory):
            def __init__(self, settings):
                pass

            def __call__(self):
                return DummyUGM()

        self.assertEqual(ugm_backend.registry, {'dummy': DummyUGMFactory})

        err = self.expect_error(ValueError, ugm_backend.load, 'inexistent', {})
        self.assertEqual(str(err), 'Unknown UGM backend "inexistent"')

        err = self.expect_error(ValueError, ugm_backend.initialize)
        self.assertEqual(str(err), 'UGM backend not loaded')

        self.assertEqual(ugm_backend.name, None)
        self.assertEqual(ugm_backend.factory, None)
        self.assertEqual(ugm_backend.ugm, None)

        ugm_backend.load('dummy', {})

        self.assertEqual(ugm_backend.name, 'dummy')
        self.assertTrue(isinstance(ugm_backend.factory, DummyUGMFactory))
        self.assertEqual(ugm_backend.ugm, None)

        ugm_backend.initialize()
        self.assertTrue(isinstance(ugm_backend.ugm, DummyUGM))

        ugm = ugm_backend.ugm
        ugm_backend.initialize()
        self.assertFalse(ugm is ugm_backend.ugm)
Example #10
0
    def test_ugm_backend(self):
        ugm_backend.registry = dict()
        ugm_backend.name = None
        ugm_backend.factory = None
        ugm_backend.ugm = None

        class DummyUGM(object):
            pass

        @ugm_backend('dummy')
        class DummyUGMFactory(UGMFactory):
            def __init__(self, settings):
                pass

            def __call__(self):
                return DummyUGM()

        self.assertEqual(ugm_backend.registry, {'dummy': DummyUGMFactory})

        err = self.expect_error(ValueError, ugm_backend.load, 'inexistent', {})
        self.assertEqual(str(err), 'Unknown UGM backend "inexistent"')

        err = self.expect_error(ValueError, ugm_backend.initialize)
        self.assertEqual(str(err), 'UGM backend not loaded')

        self.assertEqual(ugm_backend.name, None)
        self.assertEqual(ugm_backend.factory, None)
        self.assertEqual(ugm_backend.ugm, None)

        ugm_backend.load('dummy', {})

        self.assertEqual(ugm_backend.name, 'dummy')
        self.assertTrue(isinstance(ugm_backend.factory, DummyUGMFactory))
        self.assertEqual(ugm_backend.ugm, None)

        ugm_backend.initialize()
        self.assertTrue(isinstance(ugm_backend.ugm, DummyUGM))

        ugm = ugm_backend.ugm
        ugm_backend.initialize()
        self.assertFalse(ugm is ugm_backend.ugm)
Example #11
0
 def save(self, widget, data):
     # XXX: user data.write(model)
     model = self.model
     for attr_name in [
             'users_account_expiration', 'users_expires_attr',
             'users_expires_unit', 'user_id_autoincrement',
             'user_id_autoincrement_prefix', 'user_id_autoincrement_start',
             'users_portrait', 'users_portrait_attr',
             'users_portrait_accept', 'users_portrait_width',
             'users_portrait_height', 'users_local_management_enabled',
             'users_login_name_attr', 'users_exposed_attributes',
             'users_form_attrmap', 'users_listing_columns',
             'users_listing_default_column', 'groups_form_attrmap',
             'groups_listing_columns', 'groups_listing_default_column',
             'roles_principal_roles_enabled'
     ]:
         val = data.fetch('ugm_settings.%s' % attr_name).extracted
         setattr(model.attrs, attr_name, val)
     model()
     model.invalidate()
     ugm_backend.initialize()
Example #12
0
    def test_utils(self):
        server_settings = ugm_server(root)
        self.assertTrue(isinstance(server_settings, ServerSettings))
        self.assertEqual(server_settings.name, 'ugm_server')

        users_settings = ugm_users(root)
        self.assertTrue(isinstance(users_settings, UsersSettings))
        self.assertEqual(users_settings.name, 'ugm_users')

        groups_settings = ugm_groups(root)
        self.assertTrue(isinstance(groups_settings, GroupsSettings))
        self.assertEqual(groups_settings.name, 'ugm_groups')

        self.assertEqual(ugm_backend.name, 'ldap')

        backend = ugm_backend.ugm
        self.assertTrue(isinstance(backend, Ugm))
        self.assertEqual(backend.name, 'ldap_ugm')

        self.assertTrue(backend is ugm_backend.ugm)
        ugm_backend.initialize()
        self.assertFalse(backend is ugm_backend.ugm)
Example #13
0
def initialize_ugm_backend():
    if ugm_backend.name == 'ldap':
        ugm_backend.initialize()
Example #14
0
def main(global_config, **settings):
    """Returns WSGI application.
    """
    # set authentication related application properties
    security.ADMIN_USER = settings.get('cone.admin_user')
    security.ADMIN_PASSWORD = settings.get('cone.admin_password')

    auth_secret = settings.pop('cone.auth_secret', 'secret')
    auth_cookie_name = settings.pop('cone.auth_cookie_name', 'auth_tkt')
    auth_secure = settings.pop('cone.auth_secure', False)
    auth_include_ip = settings.pop('cone.auth_include_ip', False)
    auth_timeout = settings.pop('cone.auth_timeout', None)
    auth_reissue_time = settings.pop('cone.auth_reissue_time', None)
    if auth_reissue_time is not None:
        auth_reissue_time = int(auth_reissue_time)
    auth_max_age = settings.pop('cone.auth_max_age', None)
    if auth_max_age is not None:
        auth_max_age = int(auth_max_age)
    auth_http_only = settings.pop('cone.auth_http_only', False)
    auth_path = settings.pop('cone.auth_path', "/")
    auth_wild_domain = settings.pop('cone.auth_wild_domain', True)

    auth_policy = auth_tkt_factory(
        secret=auth_secret,
        cookie_name=auth_cookie_name,
        secure=auth_secure,
        include_ip=auth_include_ip,
        timeout=auth_timeout,
        reissue_time=auth_reissue_time,
        max_age=auth_max_age,
        http_only=auth_http_only,
        path=auth_path,
        wild_domain=auth_wild_domain,
    )

    configure_root(settings)

    if settings.get('testing.hook_global_registry'):
        globalreg = getGlobalSiteManager()
        config = Configurator(registry=globalreg)
        config.setup_registry(root_factory=get_root, settings=settings)
    else:
        config = Configurator(root_factory=get_root, settings=settings)

    # set authentication and authorization policies
    config.set_authentication_policy(auth_policy)
    config.set_authorization_policy(acl_factory())
    config.commit()

    # begin configuration
    config.begin()

    # include general dependencies
    config.include(pyramid_chameleon)
    config.include(pyramid_zcml)

    # add translation
    config.add_translation_dirs('cone.app:locale/')

    # XXX: register yafowil and all yafowil addon widget locales.
    #      provide locales either in yafowil resources or as entry points in
    #      all yafowil packages providing translations

    # static routes
    config.add_route("favicon", "/favicon.ico")
    # XXX: robots.txt
    # XXX: humans.txt

    # register static resources
    config.add_view(browser.static_resources, name='static')

    # scan browser package
    config.scan(browser)

    # load zcml
    config.load_zcml('configure.zcml')

    # read plugin configurator
    plugins = settings.get('cone.plugins', '')
    plugins = plugins.split('\n')
    plugins = [pl for pl in plugins if pl and not pl.startswith('#')]
    for plugin in plugins:
        try:
            importlib.import_module(plugin)
        except ImportError:
            msg = 'Cannot import plugin {}\n{}'.format(plugin,
                                                       format_traceback())
            logger.error(msg)
            continue
        try:
            config.load_zcml('{}:configure.zcml'.format(plugin))
        except IOError:  # pragma: no cover
            msg = 'No configure.zcml in {}'.format(plugin)
            logger.info(msg)

    # execute main hooks
    filtered_hooks = list()
    for hook in main_hooks:
        for plugin in plugins:
            if hook.__module__.startswith(plugin):
                filtered_hooks.append(hook)
                continue
    for hook in filtered_hooks:
        hook(config, global_config, settings)

    # load and initialize UGM
    backend_name = settings.get('ugm.backend')
    # B/C
    if not backend_name:
        backend_name = settings.get('cone.auth_impl')
    if backend_name:
        try:
            ugm_backend.load(backend_name, settings)
            ugm_backend.initialize()
        except Exception:  # pragma: no cover
            msg = 'Failed to create UGM backend:\n{}'.format(
                format_traceback())
            logger.error(msg)

    user_display_attr = settings.get('ugm.user_display_attr')
    if user_display_attr:
        ugm_backend.user_display_attr = user_display_attr

    group_display_attr = settings.get('ugm.group_display_attr')
    if group_display_attr:
        ugm_backend.group_display_attr = group_display_attr

    # register yafowil static resources
    # done after addon config - addon code may disable yafowil resource groups
    configure_yafowil_addon_resources(config)

    # end configuration
    config.end()

    # return wsgi app
    return config.make_wsgi_app()
Example #15
0
def main(global_config, **settings):
    """Returns WSGI application.
    """
    # set authentication related application properties
    security.ADMIN_USER = settings.get('cone.admin_user')
    security.ADMIN_PASSWORD = settings.get('cone.admin_password')

    auth_secret = settings.pop('cone.auth_secret', 'secret')
    auth_cookie_name = settings.pop('cone.auth_cookie_name', 'auth_tkt')
    auth_secure = settings.pop('cone.auth_secure', False)
    auth_include_ip = settings.pop('cone.auth_include_ip', False)
    auth_timeout = settings.pop('cone.auth_timeout', None)
    auth_reissue_time = settings.pop('cone.auth_reissue_time', None)
    if auth_reissue_time is not None:
        auth_reissue_time = int(auth_reissue_time)
    auth_max_age = settings.pop('cone.auth_max_age', None)
    if auth_max_age is not None:
        auth_max_age = int(auth_max_age)
    auth_http_only = settings.pop('cone.auth_http_only', False)
    auth_path = settings.pop('cone.auth_path', "/")
    auth_wild_domain = settings.pop('cone.auth_wild_domain', True)

    auth_policy = auth_tkt_factory(
        secret=auth_secret,
        cookie_name=auth_cookie_name,
        secure=auth_secure,
        include_ip=auth_include_ip,
        timeout=auth_timeout,
        reissue_time=auth_reissue_time,
        max_age=auth_max_age,
        http_only=auth_http_only,
        path=auth_path,
        wild_domain=auth_wild_domain,
    )

    configure_root(settings)

    if settings.get('testing.hook_global_registry'):
        globalreg = getGlobalSiteManager()
        config = Configurator(registry=globalreg)
        config.setup_registry(root_factory=get_root, settings=settings)
    else:
        config = Configurator(root_factory=get_root, settings=settings)

    # set authentication and authorization policies
    config.set_authentication_policy(auth_policy)
    config.set_authorization_policy(acl_factory())
    config.commit()

    # begin configuration
    config.begin()

    # include general dependencies
    config.include(pyramid_chameleon)
    config.include(pyramid_zcml)

    # register default layout adapter
    config.registry.registerAdapter(default_layout)

    # add translation
    config.add_translation_dirs('cone.app:locale/')

    # XXX: register yafowil and all yafowil addon widget locales.
    #      provide locales either in yafowil resources or as entry points in
    #      all yafowil packages providing translations

    # static routes
    config.add_route("favicon", "/favicon.ico")
    # XXX: robots.txt
    # XXX: humans.txt

    # register static resources
    config.add_view(browser.static_resources, name='static')

    # scan browser package
    config.scan(browser)

    # load zcml
    config.load_zcml('configure.zcml')

    # read plugin configurator
    plugins = settings.get('cone.plugins', '')
    plugins = plugins.split('\n')
    plugins = [pl for pl in plugins if pl and not pl.startswith('#')]
    for plugin in plugins:
        try:
            importlib.import_module(plugin)
        except ImportError:
            msg = 'Cannot import plugin {}\n{}'.format(
                plugin,
                format_traceback()
            )
            logger.error(msg)
            continue
        try:
            config.load_zcml('{}:configure.zcml'.format(plugin))
        except IOError:  # pragma: no cover
            msg = 'No configure.zcml in {}'.format(plugin)
            logger.info(msg)

    # execute main hooks
    filtered_hooks = list()
    for hook in main_hooks:
        for plugin in plugins:
            if hook.__module__.startswith(plugin):
                filtered_hooks.append(hook)
                continue
    for hook in filtered_hooks:
        hook(config, global_config, settings)

    # load and initialize UGM
    backend_name = settings.get('ugm.backend')
    # B/C
    if not backend_name:
        backend_name = settings.get('cone.auth_impl')
    if backend_name:
        try:
            ugm_backend.load(backend_name, settings)
            ugm_backend.initialize()
        except Exception:  # pragma: no cover
            msg = 'Failed to create UGM backend:\n{}'.format(format_traceback())
            logger.error(msg)

    # register yafowil static resources
    # done after addon config - addon code may disable yafowil resource groups
    configure_yafowil_addon_resources(config)

    # end configuration
    config.end()

    # return wsgi app
    return config.make_wsgi_app()