def testLDAPImplements(self): klass = PloneLDAPMultiPlugin self.assertTrue(IAuthenticationPlugin.implementedBy(klass)) self.assertTrue(ICredentialsResetPlugin.implementedBy(klass)) self.assertTrue(IDeleteCapability.implementedBy(klass)) self.assertTrue(IGroupCapability.implementedBy(klass)) self.assertTrue(IGroupEnumerationPlugin.implementedBy(klass)) self.assertTrue(IGroupIntrospection.implementedBy(klass)) self.assertTrue(IGroupManagement.implementedBy(klass)) self.assertTrue(IGroupsPlugin.implementedBy(klass)) self.assertTrue(IMutablePropertiesPlugin.implementedBy(klass)) self.assertTrue(IPasswordSetCapability.implementedBy(klass)) self.assertTrue(IPropertiesPlugin.implementedBy(klass)) self.assertTrue(IRoleEnumerationPlugin.implementedBy(klass)) self.assertTrue(IRolesPlugin.implementedBy(klass)) self.assertTrue(IUserAdderPlugin.implementedBy(klass)) self.assertTrue(IUserEnumerationPlugin.implementedBy(klass)) self.assertTrue(IUserManagement.implementedBy(klass))
def testADImplements(self): # The above checks are testing that IF we implement an # interface we really DO implement it in practice. If an # interface is not implemented, we are fine with it. But in # this test, we check that some interfaces really are # implemented. This should contain all interfaces that are # set with the 'class Implements' directive of the klass. klass = PloneActiveDirectoryMultiPlugin self.assertTrue(IAuthenticationPlugin.implementedBy(klass)) self.assertTrue(ICredentialsResetPlugin.implementedBy(klass)) self.assertTrue(IGroupEnumerationPlugin.implementedBy(klass)) self.assertTrue(IGroupIntrospection.implementedBy(klass)) self.assertTrue(IGroupsPlugin.implementedBy(klass)) self.assertTrue(IMutablePropertiesPlugin.implementedBy(klass)) self.assertTrue(IPropertiesPlugin.implementedBy(klass)) self.assertTrue(IRoleEnumerationPlugin.implementedBy(klass)) self.assertTrue(IRolesPlugin.implementedBy(klass)) self.assertTrue(IUserEnumerationPlugin.implementedBy(klass))
def testLDAPImplements(self): klass = PloneLDAPMultiPlugin self.assertTrue(IAuthenticationPlugin.implementedBy(klass)) self.assertTrue(ICredentialsResetPlugin.implementedBy(klass)) self.assertTrue(IDeleteCapability.implementedBy(klass)) self.assertTrue(IGroupCapability.implementedBy(klass)) self.assertTrue(IGroupEnumerationPlugin.implementedBy(klass)) self.assertTrue(IGroupIntrospection.implementedBy(klass)) self.assertTrue(IGroupManagement.implementedBy(klass)) self.assertTrue(IGroupsPlugin.implementedBy(klass)) self.assertTrue(IMutablePropertiesPlugin.implementedBy(klass)) self.assertTrue(IPasswordSetCapability.implementedBy(klass)) self.assertTrue(IPropertiesPlugin.implementedBy(klass)) self.assertTrue(IRoleEnumerationPlugin.implementedBy(klass)) self.assertTrue(IRolesPlugin.implementedBy(klass)) self.assertTrue(IUserAdderPlugin.implementedBy(klass)) self.assertTrue(IUserEnumerationPlugin.implementedBy(klass)) self.assertTrue(IUserManagement.implementedBy(klass))
def testADImplements(self): # The above checks are testing that IF we implement an # interface we really DO implement it in practice. If an # interface is not implemented, we are fine with it. But in # this test, we check that some interfaces really are # implemented. This should contain all interfaces that are # set with the 'class Implements' directive of the klass. klass = PloneActiveDirectoryMultiPlugin self.assertTrue(IAuthenticationPlugin.implementedBy(klass)) self.assertTrue(ICredentialsResetPlugin.implementedBy(klass)) self.assertTrue(IGroupEnumerationPlugin.implementedBy(klass)) self.assertTrue(IGroupIntrospection.implementedBy(klass)) self.assertTrue(IGroupsPlugin.implementedBy(klass)) self.assertTrue(IMutablePropertiesPlugin.implementedBy(klass)) self.assertTrue(IPropertiesPlugin.implementedBy(klass)) self.assertTrue(IRoleEnumerationPlugin.implementedBy(klass)) self.assertTrue(IRolesPlugin.implementedBy(klass)) self.assertTrue(IUserEnumerationPlugin.implementedBy(klass))
def migrate_group_members(context, mapping, mode='move', replace=False): """Migrate Plone users within a group.""" # Statistics moved = [] copied = [] deleted = [] uf = getToolByName(context, 'acl_users') for old_userid, new_userid in mapping.items(): for plugin_id, plugin in uf.plugins.listPlugins(IGroupEnumerationPlugin): if not (IZODBGroupManager.providedBy(plugin) and IGroupIntrospection.providedBy(plugin)): continue for group in plugin.enumerateGroups(): group_id = group.get('id') group_members = plugin.getGroupMembers(group_id) # Do nothing if a user with new_userid already exists and # replace is False. if new_userid in group_members and not replace: continue # Do nothing if an old user does not exist in a group. if old_userid not in group_members: continue if mode in ['move', 'delete']: plugin.removePrincipalFromGroup(old_userid, group_id) if mode in ['copy', 'move']: plugin.addPrincipalToGroup(new_userid, group_id) if mode == 'move': moved.append((group_id, old_userid, new_userid)) if mode == 'copy': copied.append((group_id, old_userid, new_userid)) if mode == 'delete': deleted.append((group_id, old_userid, None)) return(dict(moved=moved, copied=copied, deleted=deleted))
def _testGroupIntrospection(self, klass): if IGroupIntrospection.implementedBy(klass): self.assertTrue(hasattr(klass, 'getGroupById')) self.assertTrue(hasattr(klass, 'getGroupIds')) self.assertTrue(hasattr(klass, 'getGroupMembers')) self.assertTrue(hasattr(klass, 'getGroups'))
def _testGroupIntrospection(self, klass): if IGroupIntrospection.implementedBy(klass): self.assertTrue(hasattr(klass, 'getGroupById')) self.assertTrue(hasattr(klass, 'getGroupIds')) self.assertTrue(hasattr(klass, 'getGroupMembers')) self.assertTrue(hasattr(klass, 'getGroups'))