/** * Returns an enumeration of the members in the group. * @param principal the principal whose membership is listed. * @return an enumeration of the group members. */ public static Enumeration<? extends Principal> members(@NotNull Principal principal) { if (principal instanceof Group) { return ((Group) principal).members(); } if (principal instanceof GroupPrincipal) { return ((GroupPrincipal) principal).members(); } return Collections.emptyEnumeration(); }
private static Enumeration<? extends Principal> members(Principal principal) { if (principal instanceof Group) { return ((Group) principal).members(); } if (principal instanceof GroupPrincipal) { return ((GroupPrincipal) principal).members(); } return Collections.emptyEnumeration(); } }
/** * Returns an enumeration of the members in the group. * @param principal the principal whose membership is listed. * @return an enumeration of the group members. */ public static Enumeration<? extends Principal> members(Principal principal) { if (principal instanceof Group) { return ((Group) principal).members(); } if (principal instanceof GroupPrincipal) { return ((GroupPrincipal) principal).members(); } return Collections.emptyEnumeration(); }
/** * Returns an enumeration of the members in the group. * @param principal the principal whose membership is listed. * @return an enumeration of the group members. */ public static Enumeration<? extends Principal> members(Principal principal) { if (principal instanceof Group) { return ((Group) principal).members(); } if (principal instanceof GroupPrincipal) { return ((GroupPrincipal) principal).members(); } return Collections.emptyEnumeration(); }
@Test public void testAllMembersKnown() { for (Principal p : testPrincipals) { if (isGroup(p)) { Enumeration<? extends Principal> en = ((GroupPrincipal) p).members(); while (en.hasMoreElements()) { Principal memb = en.nextElement(); assertTrue(principalMgr.hasPrincipal(memb.getName())); } } } }
public void testGroupMembers() { PrincipalIterator it = principalMgr.getPrincipals(PrincipalManager.SEARCH_TYPE_ALL); while (it.hasNext()) { Principal p = it.nextPrincipal(); if (isGroup(p) && !p.equals(principalMgr.getEveryone())) { Enumeration<? extends Principal> en = ((GroupPrincipal) p).members(); while (en.hasMoreElements()) { Principal memb = en.nextElement(); assertTrue(principalMgr.hasPrincipal(memb.getName())); } } } }
@Test public void testMembers() { PrincipalIterator it = principalMgr.getPrincipals(PrincipalManager.SEARCH_TYPE_ALL); while (it.hasNext()) { Principal p = it.nextPrincipal(); if (p.equals(principalMgr.getEveryone())) { continue; } if (isGroup(p)) { Enumeration<? extends Principal> en = ((GroupPrincipal) p).members(); while (en.hasMoreElements()) { Principal memb = en.nextElement(); assertTrue(principalMgr.hasPrincipal(memb.getName())); } } } }
@Test public void testMembers2() throws Exception { Authorizable gr = null; try { gr = ((JackrabbitSession) superuser).getUserManager().createGroup(getClass().getName()); superuser.save(); PrincipalIterator it = principalMgr.getPrincipals(PrincipalManager.SEARCH_TYPE_ALL); while (it.hasNext()) { Principal p = it.nextPrincipal(); if (p.equals(principalMgr.getEveryone())) { continue; } if (isGroup(p)) { Enumeration<? extends Principal> en = ((GroupPrincipal) p).members(); while (en.hasMoreElements()) { Principal memb = en.nextElement(); assertTrue(principalMgr.hasPrincipal(memb.getName())); } } } } finally { if (gr != null) { gr.remove(); superuser.save(); } } }
@Test public void testMembers() throws Exception { GroupPrincipal principal = getGroupPrincipal(); Principal[] expectedMembers = new Principal[] { getUserManager(root).getAuthorizable(USER_ID).getPrincipal(), new PrincipalImpl(idp.getUser(USER_ID).getPrincipalName()) }; for (Principal expected : expectedMembers) { Enumeration<? extends Principal> members = principal.members(); assertTrue(members.hasMoreElements()); assertEquals(expected, members.nextElement()); assertFalse(members.hasMoreElements()); } } }
Set<? extends Principal> everyoneMembers = ImmutableSet.copyOf(Collections.list(((GroupPrincipal) ep).members()));
@Test public void testGroupPrincipals() throws Exception { // a) force the cache to be created PrincipalProvider pp = createPrincipalProvider(systemRoot); Iterable<? extends Principal> principals = Iterables.filter(pp.getPrincipals(userId), new GroupPredicate()); for (Principal p : principals) { String className = p.getClass().getName(); assertEquals("org.apache.jackrabbit.oak.security.user.UserPrincipalProvider$GroupPrincipalImpl", className); } Principal testPrincipal = getTestUser().getPrincipal(); // b) retrieve principals again (this time from the cache) // -> verify that they are a different implementation Iterable<? extends Principal> principalsAgain = Iterables.filter(pp.getPrincipals(userId), new GroupPredicate()); for (Principal p : principalsAgain) { String className = p.getClass().getName(); assertEquals("org.apache.jackrabbit.oak.security.user.UserPrincipalProvider$CachedGroupPrincipal", className); assertTrue(p instanceof TreeBasedPrincipal); assertEquals(testGroup.getPath(), ((TreeBasedPrincipal) p).getPath()); GroupPrincipal principalGroup = (GroupPrincipal) p; assertTrue(principalGroup.isMember(testPrincipal)); Enumeration<? extends Principal> members = principalGroup.members(); assertTrue(members.hasMoreElements()); assertEquals(testPrincipal, members.nextElement()); assertEquals(testGroup2.getPrincipal(), members.nextElement()); assertFalse(members.hasMoreElements()); } }
public void testGetMembersConsistentWithMembership() { Principal everyone = principalMgr.getEveryone(); PrincipalIterator it = principalMgr.getPrincipals(PrincipalManager.SEARCH_TYPE_GROUP); while (it.hasNext()) { Principal p = it.nextPrincipal(); if (p.equals(everyone)) { continue; } assertTrue(isGroup(p)); Enumeration<? extends Principal> members = ((GroupPrincipal) p).members(); while (members.hasMoreElements()) { Principal memb = members.nextElement(); Principal group = null; PrincipalIterator mship = principalMgr.getGroupMembership(memb); while (mship.hasNext() && group == null) { Principal gr = mship.nextPrincipal(); if (p.equals(gr)) { group = gr; } } assertNotNull("Group member " + memb.getName() + "does not reveal group upon getGroupMembership", p.getName()); } } }
@Test public void testGroupMembers() throws Exception { Group group = getUserManager(root).createGroup("testGroup" + UUID.randomUUID()); group.addMember(getTestUser()); root.commit(); try { Principal principal = principalProvider.getPrincipal(group.getPrincipal().getName()); assertTrue(principal instanceof GroupPrincipal); boolean found = false; Enumeration<? extends Principal> members = ((GroupPrincipal) principal).members(); while (members.hasMoreElements() && !found) { found = members.nextElement().equals(getTestUser().getPrincipal()); } assertTrue(found); } finally { group.remove(); root.commit(); } }
@Test public void testGetMembersConsistentWithMembership() { Principal everyone = principalMgr.getEveryone(); PrincipalIterator it = principalMgr.getPrincipals(PrincipalManager.SEARCH_TYPE_GROUP); while (it.hasNext()) { Principal p = it.nextPrincipal(); if (p.equals(everyone)) { continue; } assertTrue(isGroup(p)); Enumeration<? extends Principal> members = ((GroupPrincipal) p).members(); while (members.hasMoreElements()) { Principal memb = members.nextElement(); Principal group = null; PrincipalIterator mship = principalMgr.getGroupMembership(memb); while (mship.hasNext() && group == null) { Principal gr = mship.nextPrincipal(); if (p.equals(gr)) { group = gr; } } assertNotNull("Group member " + memb.getName() + "does not reveal group upon getGroupMembership", p.getName()); } } }
@Test public void testGetMembersConsistentWithMembership() { Principal everyone = principalMgr.getEveryone(); PrincipalIterator it = principalMgr.getPrincipals(PrincipalManager.SEARCH_TYPE_GROUP); while (it.hasNext()) { Principal p = it.nextPrincipal(); if (p.equals(everyone)) { continue; } assertTrue(isGroup(p)); Enumeration<? extends Principal> members = ((GroupPrincipal) p).members(); while (members.hasMoreElements()) { Principal memb = members.nextElement(); Principal group = null; PrincipalIterator mship = principalMgr.getGroupMembership(memb); while (mship.hasNext() && group == null) { Principal gr = mship.nextPrincipal(); if (p.equals(gr)) { group = gr; } } assertNotNull("Group member " + memb.getName() + "does not reveal group upon getGroupMembership", p.getName()); } } }
@Test public void testCachedPrincipalsGroupRemoved() throws Exception { // a) force the cache to be created PrincipalProvider pp = createPrincipalProvider(systemRoot); Iterable<? extends Principal> principals = Iterables.filter(pp.getPrincipals(userId), new GroupPredicate()); for (Principal p : principals) { String className = p.getClass().getName(); assertEquals("org.apache.jackrabbit.oak.security.user.UserPrincipalProvider$GroupPrincipalImpl", className); } testGroup.remove(); root.commit(); systemRoot.refresh(); // b) retrieve principals again (this time from the cache) // principal for 'testGroup' is no longer backed by an user mgt group // verify that this doesn't lead to runtime exceptions Iterable<? extends Principal> principalsAgain = Iterables.filter(pp.getPrincipals(userId), new GroupPredicate()); for (Principal p : principalsAgain) { String className = p.getClass().getName(); assertEquals("org.apache.jackrabbit.oak.security.user.UserPrincipalProvider$CachedGroupPrincipal", className); assertTrue(p instanceof TreeBasedPrincipal); assertNull(((TreeBasedPrincipal) p).getPath()); GroupPrincipal principalGroup = (GroupPrincipal) p; assertFalse(principalGroup.isMember(getTestUser().getPrincipal())); Enumeration<? extends Principal> members = principalGroup.members(); assertFalse(members.hasMoreElements()); } }