You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by an...@apache.org on 2013/10/22 11:43:40 UTC

svn commit: r1534573 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/ oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/ oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/user/ut...

Author: angela
Date: Tue Oct 22 09:43:40 2013
New Revision: 1534573

URL: http://svn.apache.org/r1534573
Log:
OAK-1098 : AuthorizableImpl methods should convert path to Oak path (WIP)

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserManagerImpl.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserProvider.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserValidator.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/ResultRowToAuthorizable.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/user/util/UserUtil.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserProviderTest.java
    jackrabbit/oak/trunk/oak-jcr/pom.xml
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/RemappingTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserManagerImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserManagerImpl.java?rev=1534573&r1=1534572&r2=1534573&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserManagerImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserManagerImpl.java Tue Oct 22 09:43:40 2013
@@ -288,7 +288,7 @@ public class UserManagerImpl implements 
         if (tree == null || !tree.exists()) {
             return null;
         }
-        return getAuthorizable(userProvider.getAuthorizableId(tree), tree);
+        return getAuthorizable(UserUtil.getAuthorizableId(tree), tree);
     }
 
     @Nonnull
@@ -325,9 +325,9 @@ public class UserManagerImpl implements 
             return null;
         }
         if (UserUtil.isType(tree, AuthorizableType.USER)) {
-            return new UserImpl(userProvider.getAuthorizableId(tree), tree, this);
+            return new UserImpl(UserUtil.getAuthorizableId(tree), tree, this);
         } else if (UserUtil.isType(tree, AuthorizableType.GROUP)) {
-            return new GroupImpl(userProvider.getAuthorizableId(tree), tree, this);
+            return new GroupImpl(UserUtil.getAuthorizableId(tree), tree, this);
         } else {
             throw new RepositoryException("Not a user or group tree " + tree.getPath() + '.');
         }

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserProvider.java?rev=1534573&r1=1534572&r2=1534573&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserProvider.java Tue Oct 22 09:43:40 2013
@@ -28,7 +28,6 @@ import javax.jcr.nodetype.ConstraintViol
 import javax.jcr.query.Query;
 
 import org.apache.jackrabbit.JcrConstants;
-import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Result;
 import org.apache.jackrabbit.oak.api.ResultRow;
 import org.apache.jackrabbit.oak.api.Root;
@@ -40,14 +39,12 @@ import org.apache.jackrabbit.oak.spi.sec
 import org.apache.jackrabbit.oak.spi.security.user.AuthorizableNodeName;
 import org.apache.jackrabbit.oak.spi.security.user.AuthorizableType;
 import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
-import org.apache.jackrabbit.oak.spi.security.user.util.UserUtil;
 import org.apache.jackrabbit.oak.util.NodeUtil;
 import org.apache.jackrabbit.util.Text;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import static com.google.common.base.Preconditions.checkNotNull;
-import static org.apache.jackrabbit.oak.api.Type.STRING;
 
 /**
  * User provider implementation and manager for group memberships with the
@@ -228,20 +225,6 @@ class UserProvider extends AuthorizableB
         return null;
     }
 
-    @CheckForNull
-    static String getAuthorizableId(@Nonnull Tree authorizableTree) {
-        checkNotNull(authorizableTree);
-        if (UserUtil.isType(authorizableTree, AuthorizableType.AUTHORIZABLE)) {
-            PropertyState idProp = authorizableTree.getProperty(UserConstants.REP_AUTHORIZABLE_ID);
-            if (idProp != null) {
-                return idProp.getValue(STRING);
-            } else {
-                return Text.unescapeIllegalJcrChars(authorizableTree.getName());
-            }
-        }
-        return null;
-    }
-
     //------------------------------------------------------------< private >---
 
     private Tree createAuthorizableNode(String authorizableId, boolean isGroup, String intermediatePath) throws RepositoryException {

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserValidator.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserValidator.java?rev=1534573&r1=1534572&r2=1534573&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserValidator.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/UserValidator.java Tue Oct 22 09:43:40 2013
@@ -166,7 +166,7 @@ class UserValidator extends DefaultValid
 
     private boolean isAdminUser(@Nonnull Tree userTree) {
         if (userTree.exists() && isUser(userTree)) {
-            String id = UserProvider.getAuthorizableId(userTree);
+            String id = UserUtil.getAuthorizableId(userTree);
             return UserUtil.getAdminId(provider.getConfig()).equals(id);
         } else {
             return false;
@@ -178,7 +178,7 @@ class UserValidator extends DefaultValid
     }
 
     private static boolean isValidUUID(@Nonnull Tree parent, @Nonnull String uuid) {
-        String id = UserProvider.getAuthorizableId(parent);
+        String id = UserUtil.getAuthorizableId(parent);
         return id != null && uuid.equals(UserProvider.getContentID(id));
     }
 

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/ResultRowToAuthorizable.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/ResultRowToAuthorizable.java?rev=1534573&r1=1534572&r2=1534573&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/ResultRowToAuthorizable.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/ResultRowToAuthorizable.java Tue Oct 22 09:43:40 2013
@@ -71,7 +71,10 @@ class ResultRowToAuthorizable implements
                 type = UserUtil.getType(tree);
             }
             if (tree.exists() && (targetType == null || targetType == type)) {
-                authorizable = userManager.getAuthorizableByPath(tree.getPath());
+                String id = UserUtil.getAuthorizableId(tree);
+                if (id != null) {
+                    authorizable = userManager.getAuthorizable(id);
+                }
             }
         } catch (RepositoryException e) {
             log.debug("Failed to access authorizable " + resultPath);

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java?rev=1534573&r1=1534572&r2=1534573&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/query/UserQueryManager.java Tue Oct 22 09:43:40 2013
@@ -156,8 +156,9 @@ public class UserQueryManager {
      * @throws javax.jcr.RepositoryException If an error occurs.
      */
     @Nonnull
-    public Iterator<Authorizable> findAuthorizables(String relPath, String value,
-                                                    AuthorizableType authorizableType) throws RepositoryException {
+    public Iterator<Authorizable> findAuthorizables(@Nonnull String relPath,
+                                                    @Nullable String value,
+                                                    @Nonnull AuthorizableType authorizableType) throws RepositoryException {
         return findAuthorizables(relPath, value, authorizableType, true);
     }
 
@@ -180,17 +181,21 @@ public class UserQueryManager {
      * @throws javax.jcr.RepositoryException If an error occurs.
      */
     @Nonnull
-    public Iterator<Authorizable> findAuthorizables(String relPath, String value,
-                                                    AuthorizableType authorizableType, boolean exact) throws RepositoryException {
+    public Iterator<Authorizable> findAuthorizables(@Nonnull String relPath,
+                                                    @Nullable String value,
+                                                    @Nonnull AuthorizableType authorizableType,
+                                                    boolean exact) throws RepositoryException {
         String statement = buildXPathStatement(relPath, value, authorizableType, exact);
         return findAuthorizables(statement, Long.MAX_VALUE, 0, authorizableType);
     }
 
     //------------------------------------------------------------< private >---
     @Nonnull
-    private String buildXPathStatement(String relPath, String value, AuthorizableType type, boolean exact) {
+    private String buildXPathStatement(@Nonnull String relPath,
+                                       @Nullable String value,
+                                       @Nonnull AuthorizableType type, boolean exact) {
         StringBuilder stmt = new StringBuilder();
-        String searchRoot = QueryUtil.getSearchRoot(type, config);
+        String searchRoot = namePathMapper.getJcrPath(QueryUtil.getSearchRoot(type, config));
         if (!"/".equals(searchRoot)) {
             stmt.append(searchRoot);
         }
@@ -216,7 +221,7 @@ public class UserQueryManager {
                 }
             }
             path = Strings.emptyToNull(sb.toString());
-            ntName = QueryUtil.getNodeTypeName(type);
+            ntName = namePathMapper.getJcrName(QueryUtil.getNodeTypeName(type));
         }
 
         stmt.append("//");

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/user/util/UserUtil.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/user/util/UserUtil.java?rev=1534573&r1=1534572&r2=1534573&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/user/util/UserUtil.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/security/user/util/UserUtil.java Tue Oct 22 09:43:40 2013
@@ -20,6 +20,7 @@ import javax.annotation.CheckForNull;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.apache.jackrabbit.oak.api.PropertyState;
 import org.apache.jackrabbit.oak.api.Tree;
 import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
 import org.apache.jackrabbit.oak.spi.security.user.AuthorizableType;
@@ -27,6 +28,9 @@ import org.apache.jackrabbit.oak.spi.sec
 import org.apache.jackrabbit.oak.util.TreeUtil;
 import org.apache.jackrabbit.util.Text;
 
+import static com.google.common.base.Preconditions.checkNotNull;
+import static org.apache.jackrabbit.oak.api.Type.STRING;
+
 /**
  * Utility methods for user management.
  */
@@ -94,4 +98,18 @@ public final class UserUtil implements U
         }
         return path;
     }
+
+    @CheckForNull
+    public static String getAuthorizableId(@Nonnull Tree authorizableTree) {
+        checkNotNull(authorizableTree);
+        if (UserUtil.isType(authorizableTree, AuthorizableType.AUTHORIZABLE)) {
+            PropertyState idProp = authorizableTree.getProperty(UserConstants.REP_AUTHORIZABLE_ID);
+            if (idProp != null) {
+                return idProp.getValue(STRING);
+            } else {
+                return Text.unescapeIllegalJcrChars(authorizableTree.getName());
+            }
+        }
+        return null;
+    }
 }
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserProviderTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserProviderTest.java?rev=1534573&r1=1534572&r2=1534573&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserProviderTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/UserProviderTest.java Tue Oct 22 09:43:40 2013
@@ -29,6 +29,7 @@ import org.apache.jackrabbit.oak.plugins
 import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
 import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
 import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
+import org.apache.jackrabbit.oak.spi.security.user.util.UserUtil;
 import org.apache.jackrabbit.util.Text;
 import org.junit.After;
 import org.junit.Before;
@@ -224,7 +225,7 @@ public class UserProviderTest {
             root.commit();
 
             assertEquals(defaultUserPath + m.get(uid), user.getPath());
-            assertEquals(uid, userProvider.getAuthorizableId(user));
+            assertEquals(uid, UserUtil.getAuthorizableId(user));
 
             Tree ath = userProvider.getAuthorizable(uid);
             assertNotNull("Tree with id " + uid + " must exist.", ath);
@@ -272,11 +273,11 @@ public class UserProviderTest {
 
         String userID = "Amanda";
         Tree user = up.createUser(userID, null);
-        assertEquals(userID, up.getAuthorizableId(user));
+        assertEquals(userID, UserUtil.getAuthorizableId(user));
 
         String groupID = "visitors";
         Tree group = up.createGroup(groupID, null);
-        assertEquals(groupID, up.getAuthorizableId(group));
+        assertEquals(groupID, UserUtil.getAuthorizableId(group));
     }
 
     @Test

Modified: jackrabbit/oak/trunk/oak-jcr/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/pom.xml?rev=1534573&r1=1534572&r2=1534573&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/pom.xml (original)
+++ jackrabbit/oak/trunk/oak-jcr/pom.xml Tue Oct 22 09:43:40 2013
@@ -119,6 +119,8 @@
 
       <!-- User Management -->
       org.apache.jackrabbit.oak.jcr.security.user.MemberNodeImportTest                               <!-- OAK-414, OAK-482 -->
+      org.apache.jackrabbit.oak.jcr.security.user.RemappingTest#testFindAuthorizable                 <!-- OAK-1098 -->
+      org.apache.jackrabbit.oak.jcr.security.user.RemappingTest#testFindAuthorizable2                <!-- OAK-1098 -->
 
       <!-- Query -->
       org.apache.jackrabbit.test.api.query.ElementTest#testElementTestNameTestSomeNTWithSNS          <!-- OAK-203 -->

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/RemappingTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/RemappingTest.java?rev=1534573&r1=1534572&r2=1534573&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/RemappingTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/security/user/RemappingTest.java Tue Oct 22 09:43:40 2013
@@ -18,12 +18,14 @@ package org.apache.jackrabbit.oak.jcr.se
 
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import javax.jcr.PropertyType;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.Value;
 
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import org.apache.jackrabbit.api.security.user.Authorizable;
 import org.apache.jackrabbit.oak.plugins.name.NamespaceConstants;
 import org.apache.jackrabbit.oak.spi.security.user.UserConstants;
@@ -40,16 +42,15 @@ public class RemappingTest extends Abstr
 
     private List<String> unmappedPaths = ImmutableList.of("uTest:property", "uTest:node/uTest:property2");
     private List<String> mappedPaths = ImmutableList.of("my:property", "my:node/my:property2");
-    private Value value;
-    private Value value2;
+    private Value nameValue;
 
     @Override
     protected void setUp() throws Exception {
         super.setUp();
 
         superuser.getWorkspace().getNamespaceRegistry().registerNamespace("uTest", "http://jackrabbit-oak.apache.org");
-        value = superuser.getValueFactory().createValue("uTest:value", PropertyType.NAME);
-        value2 = superuser.getValueFactory().createValue("uTest:value2", PropertyType.NAME);
+        Value value = superuser.getValueFactory().createValue("value");
+        nameValue = superuser.getValueFactory().createValue("uTest:value", PropertyType.NAME);
         for (String relPath : unmappedPaths) {
             user.setProperty(relPath, value);
         }
@@ -93,6 +94,38 @@ public class RemappingTest extends Abstr
 
     @Test
     public void testFindAuthorizable() throws Exception {
+        user.setProperty("prop", superuser.getValueFactory().createValue(true));
+        superuser.save();
+        session.refresh(false);
+
+        Map<String, String> m = ImmutableMap.of("prop", "true", "my:property", "value", "my:node/my:property2", "value");
+        for (String relPath : m.keySet()) {
+            String value = m.get(relPath);
+            Iterator<Authorizable> result = getUserManager(session).findAuthorizables(relPath, value);
+            assertTrue(result.hasNext());
+            assertEquals(user.getID(), result.next().getID());
+        }
+    }
+
+    @Test
+    public void testFindAuthorizable2() throws Exception {
+        for (String relPath : unmappedPaths) {
+            user.setProperty(relPath, nameValue);
+        }
+        superuser.save();
+        session.refresh(false);
+
+        Map<String, String> m = ImmutableMap.of("my:property", "my:value", "my:node/my:property2", "my:value");
+        for (String relPath : m.keySet()) {
+            String value = m.get(relPath);
+            Iterator<Authorizable> result = getUserManager(session).findAuthorizables(relPath, value);
+            assertTrue(result.hasNext());
+            assertEquals(user.getID(), result.next().getID());
+        }
+    }
+
+    @Test
+    public void testQuery() throws Exception {
         // TODO
     }
 
@@ -143,11 +176,22 @@ public class RemappingTest extends Abstr
 
     @Test
     public void testGetProperty() throws Exception {
+        for (String relPath : unmappedPaths) {
+            user.setProperty(relPath, nameValue);
+            user.setProperty(relPath, new Value[] {nameValue});
+        }
+        superuser.save();
+        session.refresh(false);
+
         for (String relPath : mappedPaths) {
             Value[] values = authorizable.getProperty(relPath);
             assertNotNull(values);
             assertEquals(1, values.length);
-            assertEquals("my:value", values[0].getString());
+            if (PropertyType.STRING == values[0].getType()) {
+                assertEquals("value", values[0].getString());
+            } else {
+                assertEquals("my:value", values[0].getString());
+            }
         }
     }
 
@@ -166,8 +210,8 @@ public class RemappingTest extends Abstr
     @Test
     public void testSetProperty() throws Exception {
         for (String relPath : mappedPaths) {
-            authorizable.setProperty(relPath, value2);
-            authorizable.setProperty(relPath, new Value[] {value2});
+            authorizable.setProperty(relPath, nameValue);
+            authorizable.setProperty(relPath, new Value[] {nameValue});
         }
     }
 
@@ -175,14 +219,14 @@ public class RemappingTest extends Abstr
     public void testSetProperty2() throws Exception {
         for (String relPath : unmappedPaths) {
             try {
-                authorizable.setProperty(relPath, value2);
+                authorizable.setProperty(relPath, nameValue);
                 fail();
             } catch (RepositoryException e) {
                 // success
             }
 
             try {
-                authorizable.setProperty(relPath, new Value[] {value2});
+                authorizable.setProperty(relPath, new Value[] {nameValue});
                 fail();
             } catch (RepositoryException e) {
                 // success