Author: stillalex
Date: Wed Mar 27 15:03:57 2019
New Revision: 1856414
URL: http://svn.apache.org/viewvc?rev=1856414&view=rev
Log:
OAK-8175 ExternalGroupPrincipalProvider support for full text search
Modified:
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProviderTest.java
Modified:
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java?rev=1856414&r1=1856413&r2=1856414&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java
(original)
+++
jackrabbit/oak/trunk/oak-auth-external/src/main/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProvider.java
Wed Mar 27 15:03:57 2019
@@ -20,12 +20,18 @@ import java.security.Principal;
import java.text.ParseException;
import java.util.Collection;
import java.util.Collections;
+import java.util.Comparator;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
+import java.util.Spliterator;
+import java.util.Spliterators;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+
import javax.jcr.PropertyType;
import javax.jcr.RepositoryException;
import javax.jcr.Value;
@@ -173,6 +179,27 @@ class ExternalGroupPrincipalProvider imp
return findPrincipals(null, searchType);
}
+ @NotNull
+ @Override
+ public Iterator<? extends Principal> findPrincipals(@Nullable String
nameHint, boolean fullText, int searchType,
+ long offset, long limit) {
+ Iterator<? extends Principal> principals = findPrincipals(nameHint,
searchType);
+ if (!principals.hasNext()) {
+ return Collections.emptyIterator();
+ }
+
+ Spliterator<? extends Principal> spliterator =
Spliterators.spliteratorUnknownSize(principals, 0);
+ Stream<? extends Principal> stream = StreamSupport.stream(spliterator,
false);
+ stream = stream.sorted(Comparator.comparing(Principal::getName));
+ if (offset > 0) {
+ stream = stream.skip(offset);
+ }
+ if (limit >= 0) {
+ stream = stream.limit(limit);
+ }
+ return stream.iterator();
+ }
+
//------------------------------------------------------------< private
>---
@Nullable
private String getIdpName(@NotNull Tree userTree) {
Modified:
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProviderTest.java
URL:
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProviderTest.java?rev=1856414&r1=1856413&r2=1856414&view=diff
==============================================================================
---
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProviderTest.java
(original)
+++
jackrabbit/oak/trunk/oak-auth-external/src/test/java/org/apache/jackrabbit/oak/spi/security/authentication/external/impl/principal/ExternalGroupPrincipalProviderTest.java
Wed Mar 27 15:03:57 2019
@@ -17,11 +17,16 @@
package
org.apache.jackrabbit.oak.spi.security.authentication.external.impl.principal;
import java.security.Principal;
+import java.util.Arrays;
import java.util.Collections;
+import java.util.Comparator;
import java.util.HashSet;
import java.util.Iterator;
+import java.util.List;
import java.util.Set;
import com.google.common.base.Function;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
@@ -32,6 +37,7 @@ import org.apache.jackrabbit.api.securit
import org.apache.jackrabbit.api.security.user.User;
import org.apache.jackrabbit.api.security.user.UserManager;
import org.apache.jackrabbit.oak.api.Root;
+import org.apache.jackrabbit.oak.namepath.NamePathMapper;
import
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalGroup;
import
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentity;
import
org.apache.jackrabbit.oak.spi.security.authentication.external.ExternalIdentityException;
@@ -40,6 +46,7 @@ import org.apache.jackrabbit.oak.spi.sec
import
org.apache.jackrabbit.oak.spi.security.authentication.external.TestIdentityProvider;
import
org.apache.jackrabbit.oak.spi.security.authentication.external.impl.DynamicSyncContext;
import org.apache.jackrabbit.oak.spi.security.principal.PrincipalImpl;
+import org.apache.jackrabbit.oak.spi.security.user.UserConfiguration;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.junit.Test;
@@ -310,24 +317,37 @@ public class ExternalGroupPrincipalProvi
@Test
public void testFindPrincipalsByHintTypeNotGroup() {
- Iterator<? extends Principal> iter =
principalProvider.findPrincipals("a", PrincipalManager.SEARCH_TYPE_NOT_GROUP);
+ Iterator<? extends Principal> iter =
principalProvider.findPrincipals("a",
+ PrincipalManager.SEARCH_TYPE_NOT_GROUP);
assertSame(Collections.emptyIterator(), iter);
+
+ Iterator<? extends Principal> iter2 =
principalProvider.findPrincipals("a", false,
+ PrincipalManager.SEARCH_TYPE_NOT_GROUP, 0, -1);
+ assertSame(Collections.emptyIterator(), iter2);
}
@Test
public void testFindPrincipalsByHintTypeGroup() {
Set<? extends Principal> expected = ImmutableSet.of(new
PrincipalImpl("a"));
- Set<? extends Principal> res =
ImmutableSet.copyOf(principalProvider.findPrincipals("a",
PrincipalManager.SEARCH_TYPE_GROUP));
-
+ Set<? extends Principal> res = ImmutableSet
+ .copyOf(principalProvider.findPrincipals("a",
PrincipalManager.SEARCH_TYPE_GROUP));
assertEquals(expected, res);
+
+ Set<? extends Principal> res2 = ImmutableSet
+ .copyOf(principalProvider.findPrincipals("a", false,
PrincipalManager.SEARCH_TYPE_GROUP, 0, -1));
+ assertEquals(expected, res2);
}
@Test
public void testFindPrincipalsByHintTypeAll() {
Set<? extends Principal> expected = ImmutableSet.of(new
PrincipalImpl("a"));
- Set<? extends Principal> res =
ImmutableSet.copyOf(principalProvider.findPrincipals("a",
PrincipalManager.SEARCH_TYPE_ALL));
-
+ Set<? extends Principal> res = ImmutableSet
+ .copyOf(principalProvider.findPrincipals("a",
PrincipalManager.SEARCH_TYPE_ALL));
assertEquals(expected, res);
+
+ Set<? extends Principal> res2 = ImmutableSet
+ .copyOf(principalProvider.findPrincipals("a", false,
PrincipalManager.SEARCH_TYPE_ALL, 0, -1));
+ assertEquals(expected, res2);
}
@Test
@@ -335,11 +355,13 @@ public class ExternalGroupPrincipalProvi
ExternalUser externalUser =
idp.getUser(TestIdentityProvider.ID_WILDCARD_USER);
sync(externalUser);
- Set<? extends Principal> expected = ImmutableSet.of(
- new PrincipalImpl("_gr_u_"));
- Set<? extends Principal> res =
ImmutableSet.copyOf(principalProvider.findPrincipals("_",
PrincipalManager.SEARCH_TYPE_ALL));
-
+ Set<? extends Principal> expected = ImmutableSet.of(new
PrincipalImpl("_gr_u_"));
+ Set<? extends Principal> res = ImmutableSet
+ .copyOf(principalProvider.findPrincipals("_",
PrincipalManager.SEARCH_TYPE_ALL));
assertEquals(expected, res);
+ Set<? extends Principal> res2 = ImmutableSet
+ .copyOf(principalProvider.findPrincipals("_", false,
PrincipalManager.SEARCH_TYPE_ALL, 0, -1));
+ assertEquals(expected, res2);
}
@Test
@@ -350,9 +372,11 @@ public class ExternalGroupPrincipalProvi
Set<? extends Principal> expected = ImmutableSet.of(
new PrincipalImpl("g%r%"));
Set<? extends Principal> res =
ImmutableSet.copyOf(principalProvider.findPrincipals("%",
PrincipalManager.SEARCH_TYPE_ALL));
-
assertEquals(expected, res);
- }
+ Set<? extends Principal> res2 = ImmutableSet
+ .copyOf(principalProvider.findPrincipals("%", false,
PrincipalManager.SEARCH_TYPE_ALL, 0, -1));
+ assertEquals(expected, res2);
+}
@Test
public void testFindPrincipalsByTypeNotGroup() {
@@ -364,6 +388,9 @@ public class ExternalGroupPrincipalProvi
public void testFindPrincipalsByTypeGroup() throws Exception {
Set<? extends Principal> res =
ImmutableSet.copyOf(principalProvider.findPrincipals(PrincipalManager.SEARCH_TYPE_GROUP));
assertEquals(getExpectedGroupPrincipals(USER_ID), res);
+
+ Set<? extends Principal> res2 =
ImmutableSet.copyOf(principalProvider.findPrincipals(null, false,
PrincipalManager.SEARCH_TYPE_GROUP, 0, -1));
+ assertEquals(getExpectedGroupPrincipals(USER_ID), res2);
}
@Test
@@ -387,8 +414,27 @@ public class ExternalGroupPrincipalProvi
Iterator<? extends Principal> res =
principalProvider.findPrincipals("a", PrincipalManager.SEARCH_TYPE_ALL);
assertTrue(res.hasNext());
-
assertEquals(expected, ImmutableSet.copyOf(res));
+ Iterator<? extends Principal> res2 =
principalProvider.findPrincipals("a", false,
+ PrincipalManager.SEARCH_TYPE_ALL, 0, -1);
+ assertTrue(res2.hasNext());
+ assertEquals(expected, ImmutableSet.copyOf(res2));
+ }
+
+ @Test
+ public void testFindPrincipalsSorted() throws Exception {
+ List<Principal> in = Arrays.asList(new PrincipalImpl("p3"), new
PrincipalImpl("p1"), new PrincipalImpl("p2"));
+ ExternalGroupPrincipalProvider p = new
ExternalGroupPrincipalProvider(root,
+
getSecurityProvider().getConfiguration(UserConfiguration.class),
NamePathMapper.DEFAULT,
+ ImmutableMap.of(idp.getName(), new String[0])) {
+ @Override
+ public Iterator<? extends Principal> findPrincipals(@Nullable
String nameHint, int searchType) {
+ return in.iterator();
+ }
+ };
+ List<Principal> out = ImmutableList.copyOf(p.findPrincipals(null,
false, PrincipalManager.SEARCH_TYPE_ALL, 0, -1));
+ Collections.sort(in, Comparator.comparing(Principal::getName));
+ assertEquals(in, out);
}
private static final class TestUser extends
TestIdentityProvider.TestIdentity implements ExternalUser {