def test_imports_handle_unicode_values_properly(self):
        klaus = create(Builder('ldapuser')
                       .named('klaus.r\xc3\xbcegg')
                       .having(firstname='Klaus',
                               lastname='R\xc3\xbcegg',
                               l=['M\xc3\xbcnsingen'],  # noqa
                               o=['M\xc3\xbcller & Co'],  # noqa
                               ou=['M\xc3\xbcnster'],  # noqa
                               street=['F\xc3\xa4hrstrasse 13']))

        group = create(Builder('ldapgroup')
                       .named('f\xc3\xbchrung')
                       .with_members([klaus]))

        FAKE_LDAP_USERFOLDER.users = [klaus]
        FAKE_LDAP_USERFOLDER.groups = [group]

        updater = IOGDSUpdater(self.portal)

        updater.import_users()
        updater.import_groups()

        ogds_user = ogds_service().fetch_user(u'klaus.r\xfcegg')
        self.assertEquals(u'klaus.r\xfcegg', ogds_user.userid)
        self.assertEquals(u'Klaus', ogds_user.firstname)
        self.assertEquals(u'R\xfcegg', ogds_user.lastname)
        self.assertEquals(u'klaus.r\[email protected]', ogds_user.email)

        ogds_group = ogds_service().fetch_group(u'f\xfchrung')
        self.assertEquals(u'f\xfchrung', ogds_group.groupid)
    def test_imports_group_memberships(self):
        sk1m1 = create(Builder('ldapuser').named('sk1m1'))
        sk2m1 = create(Builder('ldapuser').named('sk2m1'))
        sk1m2 = create(Builder('ldapuser').named('sk1m2'))
        sk2m2 = create(Builder('ldapuser').named('sk2m2'))

        FAKE_LDAP_USERFOLDER.users = [sk1m1, sk2m1, sk1m2, sk2m2]
        FAKE_LDAP_USERFOLDER.groups = [
            create(Builder('ldapgroup')
                   .named('og_mandant1_users')
                   .with_members([sk1m1, sk2m1])),
            create(Builder('ldapgroup')
                   .named('og_mandant2_users')
                   .with_members([sk1m2, sk2m2])),
        ]

        updater = IOGDSUpdater(self.portal)

        updater.import_users()
        updater.import_groups()

        ogds = ogds_service()
        og_mandant1_users = ogds.fetch_group('og_mandant1_users')
        og_mandant2_users = ogds.fetch_group('og_mandant2_users')

        self.assertItemsEqual(
            [ogds.fetch_user('sk1m1'), ogds.fetch_user('sk2m1')],
            og_mandant1_users.users)
        self.assertItemsEqual(
            [ogds.fetch_user('sk1m2'), ogds.fetch_user('sk2m2')],
            og_mandant2_users.users)
Example #3
0
def sync_ogds(plone, users=True, groups=True):
    """Syncronize OGDS users and groups by importing users, groups and
    group membership information from LDAP into the respective OGDS SQL tables.

    If none of the `users` or `groups` keyword arguments are supplied, both
    users and groups will be imported. If one is set to false, only the other
    will be imported.

    NOTE: This function does *not* commit the transaction. Depending on from
    where you use it, you'll need to take care of that yourself, if necessary.
    """

    # Set up logging to a rotating ogds-update.log
    setup_ogds_sync_logfile(logger)

    updater = IOGDSUpdater(plone)
    start = time.clock()

    if users:
        logger.info(u"Importing users...")
        updater.import_users()

    if groups:
        logger.info(u"Importing groups...")
        updater.import_groups()

    elapsed = time.clock() - start
    logger.info(u"Done in {:0.1f} seconds.".format(elapsed))

    logger.info(u"Updating LDAP SYNC importstamp...")
    set_remote_import_stamp(plone)

    logger.info(u"Synchronization Done.")
    def test_imports_groups(self):
        FAKE_LDAP_USERFOLDER.groups = [
            create(Builder('ldapgroup').named('og_mandant1_users'))]

        updater = IOGDSUpdater(self.portal)

        updater.import_groups()
        self.assertIsNotNone(ogds_service().fetch_group('og_mandant1_users'))
    def test_imports_groups(self):
        FAKE_LDAP_USERFOLDER.groups = [
            create(Builder('ldapgroup').named('og_mandant1_users'))]

        updater = IOGDSUpdater(self.portal)

        updater.import_groups()
        self.assertIsNotNone(ogds_service().fetch_group('og_mandant1_users'))
    def test_imports_users(self):
        FAKE_LDAP_USERFOLDER.users = [
            create(Builder('ldapuser').named('sk1m1')),
            create(Builder('ldapuser').named('john'))]

        updater = IOGDSUpdater(self.portal)

        updater.import_users()
        self.assertIsNotNone(ogds_service().fetch_user('sk1m1'))
        self.assertIsNotNone(ogds_service().fetch_user('john'))
    def test_imports_users(self):
        FAKE_LDAP_USERFOLDER.users = [
            create(Builder('ldapuser').named('sk1m1')),
            create(Builder('ldapuser').named('john'))]

        updater = IOGDSUpdater(self.portal)

        updater.import_users()
        self.assertIsNotNone(ogds_service().fetch_user('sk1m1'))
        self.assertIsNotNone(ogds_service().fetch_user('john'))
    def test_flags_users_not_present_in_ldap_as_inactive(self):
        create(Builder('ogds_user').id('john.doe'))
        create(Builder('ogds_user').id('hugo.boss'))

        FAKE_LDAP_USERFOLDER.users = [
            create(Builder('ldapuser').named('hugo.boss')),
            create(Builder('ldapuser').named('new.user'))]

        updater = IOGDSUpdater(self.portal)

        updater.import_users()
        self.assertFalse(ogds_service().fetch_user('john.doe').active)
        self.assertTrue(ogds_service().fetch_user('hugo.boss').active)
        self.assertTrue(ogds_service().fetch_user('new.user').active)
    def test_flags_users_not_present_in_ldap_as_inactive(self):
        create(Builder('ogds_user').id('john.doe'))
        create(Builder('ogds_user').id('hugo.boss'))

        FAKE_LDAP_USERFOLDER.users = [
            create(Builder('ldapuser').named('hugo.boss')),
            create(Builder('ldapuser').named('new.user'))]

        updater = IOGDSUpdater(self.portal)

        updater.import_users()
        self.assertFalse(ogds_service().fetch_user('john.doe').active)
        self.assertTrue(ogds_service().fetch_user('hugo.boss').active)
        self.assertTrue(ogds_service().fetch_user('new.user').active)
Example #10
0
def run_import(app, options):
    # setup request and get plone site
    app = makerequest(app)
    plone = app.unrestrictedTraverse(options.site_root)

    # Setup logging
    config = getConfiguration()
    ogds_conf = config.product_config.get("opengever.core", dict())
    log_file = ogds_conf.get("ogds_log_file")

    if log_file:
        log_handler = logging.FileHandler(log_file)
        log_formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
        log_handler.setFormatter(log_formatter)
        logger.addHandler(log_handler)
        logger.setLevel(logging.INFO)

    # setup user context
    user = AccessControl.SecurityManagement.SpecialUsers.system
    user = user.__of__(app.acl_users)
    newSecurityManager(app, user)

    # setup site
    setSite(plone)

    updater = IOGDSUpdater(plone)
    start = time.clock()

    # Import users
    logger.info("Importing users...")
    updater.import_users()

    # Import groups
    logger.info("Importing groups...")
    updater.import_groups()

    elapsed = time.clock() - start
    logger.info("Done in %.0f seconds." % elapsed)
    logger.info("Committing transaction...")
    transaction.commit()

    if options.update_syncstamp:
        # Update sync stamp
        logger.info("Updating LDAP SYNC importstamp...")
        set_remote_import_stamp(plone)
        transaction.commit()

    logger.info("Synchronization Done.")
Example #11
0
    def test_imports_handle_unicode_values_properly(self):
        klaus = create(
            Builder('ldapuser').named('klaus.r\xc3\xbcegg').having(
                firstname='Klaus',
                lastname='R\xc3\xbcegg',
                l=['M\xc3\xbcnsingen'],  # noqa
                o=['M\xc3\xbcller & Co'],  # noqa
                ou=['M\xc3\xbcnster'],  # noqa
                street=['F\xc3\xa4hrstrasse 13']))

        group = create(
            Builder('ldapgroup').named('f\xc3\xbchrung').with_members([klaus]))

        FAKE_LDAP_USERFOLDER.users = [klaus]
        FAKE_LDAP_USERFOLDER.groups = [group]

        updater = IOGDSUpdater(self.portal)

        updater.import_users()
        updater.import_groups()

        ogds_user = ogds_service().fetch_user(u'klaus.r\xfcegg')
        self.assertEquals(u'klaus.r\xfcegg', ogds_user.userid)
        self.assertEquals(u'Klaus', ogds_user.firstname)
        self.assertEquals(u'R\xfcegg', ogds_user.lastname)
        self.assertEquals(u'klaus.r\[email protected]', ogds_user.email)

        ogds_group = ogds_service().fetch_group(u'f\xfchrung')
        self.assertEquals(u'f\xfchrung', ogds_group.groupid)
Example #12
0
    def test_imports_group_memberships(self):
        sk1m1 = create(Builder('ldapuser').named('sk1m1'))
        sk2m1 = create(Builder('ldapuser').named('sk2m1'))
        sk1m2 = create(Builder('ldapuser').named('sk1m2'))
        sk2m2 = create(Builder('ldapuser').named('sk2m2'))

        FAKE_LDAP_USERFOLDER.users = [sk1m1, sk2m1, sk1m2, sk2m2]
        FAKE_LDAP_USERFOLDER.groups = [
            create(
                Builder('ldapgroup').named('og_mandant1_users').with_members(
                    [sk1m1, sk2m1])),
            create(
                Builder('ldapgroup').named('og_mandant2_users').with_members(
                    [sk1m2, sk2m2])),
        ]

        updater = IOGDSUpdater(self.portal)

        updater.import_users()
        updater.import_groups()

        ogds = ogds_service()
        og_mandant1_users = ogds.fetch_group('og_mandant1_users')
        og_mandant2_users = ogds.fetch_group('og_mandant2_users')

        self.assertItemsEqual(
            [ogds.fetch_user('sk1m1'),
             ogds.fetch_user('sk2m1')], og_mandant1_users.users)
        self.assertItemsEqual(
            [ogds.fetch_user('sk1m2'),
             ogds.fetch_user('sk2m2')], og_mandant2_users.users)
Example #13
0
def sync_ogds(plone, users=True, groups=True):
    """Syncronize OGDS users and groups by importing users, groups and
    group membership information from LDAP into the respective OGDS SQL tables.

    If none of the `users` or `groups` keyword arguments are supplied, both
    users and groups will be imported. If one is set to false, only the other
    will be imported.

    NOTE: This function does *not* commit the transaction. Depending on from
    where you use it, you'll need to take care of that yourself, if necessary.
    """
    # Set up logging to a rotating ogds-update.log
    setup_ogds_sync_logfile(logger)

    updater = IOGDSUpdater(plone)
    start = time.clock()

    if users:
        logger.info(u"Importing users...")
        updater.import_users()

    if groups:
        logger.info(u"Importing groups...")
        updater.import_groups()

    elapsed = time.clock() - start
    logger.info(u"Done in {:0.1f} seconds.".format(elapsed))

    logger.info(u"Updating LDAP SYNC importstamp...")
    set_remote_import_stamp(plone)

    logger.info(u"Synchronization Done.")
Example #14
0
    def test_uses_title_attribute_for_group_title_when_set(self):
        FAKE_LDAP_USERFOLDER.groups = [
            create(
                Builder('ldapgroup').having(description=u'OG Mandant1 users').
                named('og_mandant1_users'))
        ]

        updater = IOGDSUpdater(self.portal)
        updater.import_groups()
        group = ogds_service().fetch_group('og_mandant1_users')
        self.assertIsNone(group.title)

        api.portal.set_registry_record(name='group_title_ldap_attribute',
                                       value=u'description',
                                       interface=IOGDSSyncConfiguration)
        updater = IOGDSUpdater(self.portal)
        updater.import_groups()

        group = ogds_service().fetch_group('og_mandant1_users')
        self.assertEquals(u'OG Mandant1 users', group.title)
Example #15
0
def run_import(app, options):
    # setup request and get plone site
    app = makerequest(app)
    plone = app.unrestrictedTraverse(options.site_root)

    # Setup logging
    config = getConfiguration()
    ogds_conf = config.product_config.get('opengever.core', dict())
    log_file = ogds_conf.get('ogds_log_file')

    if log_file:
        log_handler = logging.FileHandler(log_file)
        log_formatter = logging.Formatter(
            "%(asctime)s - %(name)s - %(levelname)s - %(message)s")
        log_handler.setFormatter(log_formatter)
        logger.addHandler(log_handler)
        logger.setLevel(logging.INFO)

    # setup user context
    user = AccessControl.SecurityManagement.SpecialUsers.system
    user = user.__of__(app.acl_users)
    newSecurityManager(app, user)

    # setup site
    setSite(plone)

    updater = IOGDSUpdater(plone)
    start = time.clock()

    # Import users
    logger.info("Importing users...")
    updater.import_users()

    # Import groups
    logger.info("Importing groups...")
    updater.import_groups()

    elapsed = time.clock() - start
    logger.info("Done in %.0f seconds." % elapsed)
    logger.info("Committing transaction...")
    transaction.commit()

    if options.update_syncstamp:
        # Update sync stamp
        logger.info("Updating LDAP SYNC importstamp...")
        set_remote_import_stamp(plone)
        transaction.commit()

    logger.info("Synchronization Done.")
    def test_handles_multivalues_group_titles(self):
        FAKE_LDAP_USERFOLDER.groups = [
            create(Builder('ldapgroup')
                   .having(description=[u'OG Mandant1 users', u'\xc4ddition'])
                   .named('og_mandant1_users'))]

        updater = IOGDSUpdater(self.portal)
        updater.import_groups()
        group = ogds_service().fetch_group('og_mandant1_users')
        self.assertIsNone(group.title)

        api.portal.set_registry_record(name='group_title_ldap_attribute',
                                       value=u'description',
                                       interface=IOGDSSyncConfiguration)
        updater = IOGDSUpdater(self.portal)
        updater.import_groups()

        group = ogds_service().fetch_group('og_mandant1_users')
        self.assertEquals(u'OG Mandant1 users \xc4ddition', group.title)
Example #17
0
 def run_update(self):
     self.log("Starting user import...")
     updater = IOGDSUpdater(self.context)
     updater.import_users()
Example #18
0
 def run_update(self):
     self.log("Starting groups import...")
     updater = IOGDSUpdater(self.context)
     updater.import_groups()