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 2014/11/06 16:22:48 UTC

svn commit: r1637132 - in /jackrabbit/oak/trunk/oak-core/src: main/java/org/apache/jackrabbit/oak/security/user/RandomAuthorizableNodeName.java test/java/org/apache/jackrabbit/oak/security/user/RandomAuthorizableNodeNameTest.java

Author: angela
Date: Thu Nov  6 15:22:47 2014
New Revision: 1637132

URL: http://svn.apache.org/r1637132
Log:
OAK-2138 : improvement provided by thomas mueller (+ adjusted test cases)

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/RandomAuthorizableNodeName.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/RandomAuthorizableNodeNameTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/RandomAuthorizableNodeName.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/RandomAuthorizableNodeName.java?rev=1637132&r1=1637131&r2=1637132&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/RandomAuthorizableNodeName.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/security/user/RandomAuthorizableNodeName.java Thu Nov  6 15:22:47 2014
@@ -24,11 +24,9 @@ import javax.annotation.Nonnull;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ConfigurationPolicy;
-import org.apache.felix.scr.annotations.Modified;
 import org.apache.felix.scr.annotations.Property;
 import org.apache.felix.scr.annotations.Service;
 import org.apache.jackrabbit.oak.commons.PropertiesUtil;
-import org.apache.jackrabbit.oak.spi.security.ConfigurationParameters;
 import org.apache.jackrabbit.oak.spi.security.user.AuthorizableNodeName;
 
 /**
@@ -39,7 +37,11 @@ import org.apache.jackrabbit.oak.spi.sec
 @Service(AuthorizableNodeName.class)
 public class RandomAuthorizableNodeName implements AuthorizableNodeName {
 
-    private static char[] VALID_CHARS;
+    /**
+     * Characters used to encode the random data. This matches the Base64URL
+     * characters, which is both filename- and URL-safe.
+     */
+    private static final char[] VALID_CHARS;
     static {
         StringBuilder sb = new StringBuilder();
         char i;
@@ -52,11 +54,19 @@ public class RandomAuthorizableNodeName 
         for (i = '0'; i <= '9'; i++) {
             sb.append(i);
         }
+        sb.append("-_");
         VALID_CHARS = sb.toString().toCharArray();
     }
 
     private static final String PARAM_LENGTH = "length";
-    private static final int DEFAULT_LENGTH = 8;
+    
+    /**
+     * 21 characters, each character with 6 bit of entropy (64 possible
+     * characters), results in 126 bits of entropy. With regards to probability
+     * of duplicates, this is even better than standard UUIDs, which have 122
+     * bits of entropy and are 36 characters long.
+     */
+    public static final int DEFAULT_LENGTH = 21;
 
     @Property(name = PARAM_LENGTH, label = "Name Length", description = "Length of the generated node name.", intValue = DEFAULT_LENGTH)
     private int length = DEFAULT_LENGTH;
@@ -76,4 +86,4 @@ public class RandomAuthorizableNodeName 
     private void activate(Map<String, Object> properties) {
         length = PropertiesUtil.toInteger(properties.get(PARAM_LENGTH), DEFAULT_LENGTH);
     }
-}
\ No newline at end of file
+}

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/RandomAuthorizableNodeNameTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/RandomAuthorizableNodeNameTest.java?rev=1637132&r1=1637131&r2=1637132&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/RandomAuthorizableNodeNameTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/security/user/RandomAuthorizableNodeNameTest.java Thu Nov  6 15:22:47 2014
@@ -67,7 +67,7 @@ public class RandomAuthorizableNodeNameT
         Tree tree = root.getTree(path);
 
         assertFalse(id.equals(tree.getName()));
-        assertEquals(8, tree.getName().length());
+        assertEquals(RandomAuthorizableNodeName.DEFAULT_LENGTH, tree.getName().length());
     }
 
     private void assertNodeName(Authorizable authorizable, String relPath) throws RepositoryException {
@@ -77,7 +77,7 @@ public class RandomAuthorizableNodeNameT
         Tree tree = root.getTree(path);
 
         assertFalse(id.equals(tree.getName()));
-        assertEquals(8, tree.getName().length());
+        assertEquals(RandomAuthorizableNodeName.DEFAULT_LENGTH, tree.getName().length());
 
         String end = '/' + relPath + '/' + tree.getName();
         assertTrue(path.endsWith(end));
@@ -88,7 +88,7 @@ public class RandomAuthorizableNodeNameT
         String nodeName = nameGenerator.generateNodeName(id);
 
         assertFalse("id".equals(nodeName));
-        assertEquals(8, nodeName.length());
+        assertEquals(RandomAuthorizableNodeName.DEFAULT_LENGTH, nodeName.length());
         assertFalse(nodeName.equals(nameGenerator.generateNodeName(id)));
     }