Index: src/main/java/org/sakaiproject/authz/impl/BaseAuthzGroupService.java
===================================================================
--- src/main/java/org/sakaiproject/authz/impl/BaseAuthzGroupService.java (revision 307891)
+++ src/main/java/org/sakaiproject/authz/impl/BaseAuthzGroupService.java (working copy)
@@ -49,7 +49,6 @@
import org.sakaiproject.authz.api.SecurityService;
import org.sakaiproject.component.api.ServerConfigurationService;
import org.sakaiproject.component.cover.ComponentManager;
-import org.sakaiproject.entity.api.Edit;
import org.sakaiproject.entity.api.Entity;
import org.sakaiproject.entity.api.EntityManager;
import org.sakaiproject.entity.api.HttpAccess;
@@ -64,7 +63,6 @@
import org.sakaiproject.tool.api.SessionManager;
import org.sakaiproject.user.api.UserDirectoryService;
import org.sakaiproject.user.api.UserNotDefinedException;
-import org.sakaiproject.util.StorageUser;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
@@ -887,7 +885,9 @@
*/
public String authzGroupReference(String id)
{
- return getAccessPoint(true) + Entity.SEPARATOR + id;
+ if (id == null) return "";
+ String accessPoint = getAccessPoint(true);
+ return id.startsWith(Entity.SEPARATOR) ? accessPoint + id : accessPoint + Entity.SEPARATOR + id;
}
/**
@@ -1131,7 +1131,7 @@
/**
* Get the realm ID from a reference string.
- * @param reference The reference to a realm. eg/realm//site/mercury
+ * @param reference The reference to a realm. eg/realm/site/mercury
* @return The ID of the realm or null
if it's not a realm reference.
*/
protected String extractEntityId(String reference)
@@ -1138,8 +1138,8 @@
{
if (reference.startsWith(REFERENCE_ROOT) && REFERENCE_ROOT.length() + 1 <= reference.length())
{
- // the azGroup id may have separators - we use everything after "/realm/"
- String id = reference.substring(REFERENCE_ROOT.length() + 1, reference.length());
+ // the azGroup id may have separators - we use everything after "/realm"
+ String id = reference.substring(REFERENCE_ROOT.length(), reference.length());
return id;
}
return null;
Index: src/test/java/org/sakaiproject/authz/impl/AuthzTestExtractEntityId.java
===================================================================
--- src/test/java/org/sakaiproject/authz/impl/AuthzTestExtractEntityId.java (revision 0)
+++ src/test/java/org/sakaiproject/authz/impl/AuthzTestExtractEntityId.java (working copy)
@@ -0,0 +1,24 @@
+package org.sakaiproject.authz.impl;
+
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * This just checks that the extraction of entity IDs by the Authz service works.
+ */
+public class AuthzTestExtractEntityId {
+
+ private BaseAuthzGroupService authz;
+
+ @Before
+ public void setUp() {
+ authz = new AuthzGroupServiceTest();
+ }
+
+ @Test
+ public void testExtractEntityId() {
+ assertEquals("/site/hello", authz.extractEntityId("/realm/site/hello"));
+ }
+}
Index: src/test/java/org/sakaiproject/authz/impl/test/AuthzTestEntityParsing.java
===================================================================
--- src/test/java/org/sakaiproject/authz/impl/test/AuthzTestEntityParsing.java (revision 307891)
+++ src/test/java/org/sakaiproject/authz/impl/test/AuthzTestEntityParsing.java (working copy)
@@ -1,6 +1,8 @@
package org.sakaiproject.authz.impl.test;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.sakaiproject.authz.api.AuthzGroupService.APPLICATION_ID;
@@ -74,4 +76,19 @@
assertTrue(authz.parseEntityReference("/realm/!site.helper", ref));
}
+ @Test
+ // KNL-966 No more unwanted extra slash in the group reference.
+ public void testGroupReferenceWithLeadingSlash() {
+ assertEquals("null/site/foobaz", authz.authzGroupReference("/site/foobaz"));
+ }
+
+ @Test
+ public void testGroupReferenceWithoutLeadingSlash() {
+ assertEquals("null/site/foobaz", authz.authzGroupReference("site/foobaz"));
+ }
+
+ @Test
+ public void testNullIdInGroupReference() {
+ assertEquals("", authz.authzGroupReference(null));
+ }
}