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)));
}