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 {


Reply via email to