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)
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_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 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_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)
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 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 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)
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)
def run_update(self): self.log("Starting groups import...") updater = IOGDSUpdater(self.context) updater.import_groups()