This is an automated email from the ASF dual-hosted git repository.

enorman pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-launchpad-integration-tests.git


The following commit(s) were added to refs/heads/master by this push:
     new 767c800  SLING-7835 PrivilegesInfo#getEffectiveAccessControlEntries 
returns incorrect information
767c800 is described below

commit 767c8001f7ec0e074ffa69ed50c0595ac9809139
Author: Eric Norman <[email protected]>
AuthorDate: Sun Aug 19 13:26:30 2018 -0700

    SLING-7835 PrivilegesInfo#getEffectiveAccessControlEntries returns
    incorrect information
---
 .../accessManager/AccessPrivilegesInfoTest.java    | 186 +++++++++++++++++++++
 .../accessmanager/privileges-info.json.esp         |  99 ++++++++++-
 2 files changed, 276 insertions(+), 9 deletions(-)

diff --git 
a/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/accessManager/AccessPrivilegesInfoTest.java
 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/accessManager/AccessPrivilegesInfoTest.java
index a4476ae..13a9017 100644
--- 
a/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/accessManager/AccessPrivilegesInfoTest.java
+++ 
b/src/main/java/org/apache/sling/launchpad/webapp/integrationtest/accessManager/AccessPrivilegesInfoTest.java
@@ -18,6 +18,7 @@ package 
org.apache.sling.launchpad.webapp.integrationtest.accessManager;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -26,6 +27,7 @@ import java.util.List;
 import java.util.Random;
 import java.util.Set;
 
+import javax.json.JsonArray;
 import javax.json.JsonException;
 import javax.json.JsonObject;
 import javax.servlet.http.HttpServletResponse;
@@ -44,6 +46,7 @@ public class AccessPrivilegesInfoTest {
     private static Random random = new Random(System.currentTimeMillis());
        
        String testUserId = null;
+       String testUserId2 = null;
        String testGroupId = null;
        String testFolderUrl = null;
     Set<String> toDelete = new HashSet<String>();
@@ -87,6 +90,12 @@ public class AccessPrivilegesInfoTest {
                        List<NameValuePair> postParams = new 
ArrayList<NameValuePair>();
                        H.assertAuthenticatedPostStatus(creds, postUrl, 
HttpServletResponse.SC_OK, postParams, null);
                }
+               if (testUserId2 != null) {
+                       //remove the test user if it exists.
+                       String postUrl = HttpTest.HTTP_BASE_URL + 
"/system/userManager/user/" + testUserId2 + ".delete.html";
+                       List<NameValuePair> postParams = new 
ArrayList<NameValuePair>();
+                       H.assertAuthenticatedPostStatus(creds, postUrl, 
HttpServletResponse.SC_OK, postParams, null);
+               }
                
         for(String script : toDelete) {
             H.getTestClient().delete(script);
@@ -331,4 +340,181 @@ public class AccessPrivilegesInfoTest {
                JsonObject jsonObj = JsonUtil.parseObject(json);
                assertEquals(true, jsonObj.getBoolean("canDelete"));
        }
+       
+       /**
+        * Test for SLING-2600, PrivilegesInfo#getDeclaredAccessRights returns 
incorrect information
+        */
+       @Test 
+       public void testDeclaredAclForUser() throws IOException, JsonException {
+               testUserId = H.createTestUser();
+               testUserId2 = H.createTestUser();
+
+               testFolderUrl = H.createTestFolder("{ \"jcr:primaryType\": 
\"nt:unstructured\", \"propOne\" : \"propOneValue\", \"child\" : { 
\"childPropOne\" : true } }");
+               
+        String postUrl = testFolderUrl + ".modifyAce.html";
+
+        //1. create an initial set of privileges
+               List<NameValuePair> postParams = new ArrayList<NameValuePair>();
+               postParams.add(new NameValuePair("principalId", testUserId));
+               postParams.add(new NameValuePair("privilege@jcr:write", 
"granted"));
+               
+               Credentials creds = new UsernamePasswordCredentials("admin", 
"admin");
+               H.assertAuthenticatedPostStatus(creds, postUrl, 
HttpServletResponse.SC_OK, postParams, null);
+               
+               postParams = new ArrayList<NameValuePair>();
+               postParams.add(new NameValuePair("principalId", testUserId2));
+               postParams.add(new NameValuePair("privilege@jcr:write", 
"granted"));
+               
+               H.assertAuthenticatedPostStatus(creds, postUrl, 
HttpServletResponse.SC_OK, postParams, null);
+               
+               postParams = new ArrayList<NameValuePair>();
+               postParams.add(new NameValuePair("principalId", testUserId2));
+               postParams.add(new 
NameValuePair("privilege@jcr:lockManagement", "granted"));
+               
+        postUrl = testFolderUrl + "/child.modifyAce.html";
+               H.assertAuthenticatedPostStatus(creds, postUrl, 
HttpServletResponse.SC_OK, postParams, null);
+
+               
+               //fetch the JSON for the eacl to verify the settings.
+               String getUrl = testFolderUrl + "/child.privileges-info.json";
+               Credentials testUserCreds = new 
UsernamePasswordCredentials("admin", "admin");
+               String json = H.getAuthenticatedContent(testUserCreds, getUrl, 
HttpTest.CONTENT_TYPE_JSON, null, HttpServletResponse.SC_OK);
+               assertNotNull(json);
+               JsonObject jsonObject = JsonUtil.parseObject(json);
+               jsonObject = jsonObject.getJsonObject("declaredAccessRights");
+               
+               assertNull(jsonObject.get(testUserId));
+
+               JsonObject aceObject2 = jsonObject.getJsonObject(testUserId2);
+               assertNotNull(aceObject2);
+
+               JsonArray grantedArray2 = aceObject2.getJsonArray("granted");
+               assertNotNull(grantedArray2);
+               assertEquals(1, grantedArray2.size());
+               Set<String> grantedPrivilegeNames2 = new HashSet<String>();
+               for (int i=0; i < grantedArray2.size(); i++) {
+                       grantedPrivilegeNames2.add(grantedArray2.getString(i));
+               }
+               H.assertPrivilege(grantedPrivilegeNames2, true, 
"jcr:lockManagement");
+
+               JsonArray deniedArray2 = aceObject2.getJsonArray("denied");
+               assertNotNull(deniedArray2);
+               assertEquals(0, deniedArray2.size());
+
+       
+               getUrl = testFolderUrl + ".privileges-info.json";
+               json = H.getAuthenticatedContent(testUserCreds, getUrl, 
HttpTest.CONTENT_TYPE_JSON, null, HttpServletResponse.SC_OK);
+               assertNotNull(json);
+               jsonObject = JsonUtil.parseObject(json);
+               jsonObject = jsonObject.getJsonObject("declaredAccessRights");
+               
+               JsonObject aceObject = jsonObject.getJsonObject(testUserId);
+               assertNotNull(aceObject);
+
+               JsonArray grantedArray = aceObject.getJsonArray("granted");
+               assertNotNull(grantedArray);
+               assertEquals(1, grantedArray.size());
+               Set<String> grantedPrivilegeNames = new HashSet<String>();
+               for (int i=0; i < grantedArray.size(); i++) {
+                       grantedPrivilegeNames.add(grantedArray.getString(i));
+               }
+               H.assertPrivilege(grantedPrivilegeNames,true,"jcr:write");
+
+               JsonArray deniedArray = aceObject.getJsonArray("denied");
+               assertNotNull(deniedArray);
+               assertEquals(0, deniedArray.size());
+
+               aceObject2 = jsonObject.getJsonObject(testUserId2);
+               assertNotNull(aceObject2);
+
+               grantedArray2 = aceObject2.getJsonArray("granted");
+               assertNotNull(grantedArray2);
+               assertEquals(1, grantedArray2.size());
+               grantedPrivilegeNames2 = new HashSet<String>();
+               for (int i=0; i < grantedArray2.size(); i++) {
+                       grantedPrivilegeNames2.add(grantedArray2.getString(i));
+               }
+               H.assertPrivilege(grantedPrivilegeNames2, true, "jcr:write");
+
+               deniedArray2 = aceObject2.getJsonArray("denied");
+               assertNotNull(deniedArray2);
+               assertEquals(0, deniedArray2.size());
+       }
+       
+       /**
+        * Test for SLING-2600, PrivilegesInfo#getEffectiveAccessRights returns 
incorrect information
+        */
+       @Test 
+       public void testEffectiveAclForUser() throws IOException, JsonException 
{
+               testUserId = H.createTestUser();
+               testUserId2 = H.createTestUser();
+
+               testFolderUrl = H.createTestFolder("{ \"jcr:primaryType\": 
\"nt:unstructured\", \"propOne\" : \"propOneValue\", \"child\" : { 
\"childPropOne\" : true } }");
+               
+        String postUrl = testFolderUrl + ".modifyAce.html";
+
+        //1. create an initial set of privileges
+               List<NameValuePair> postParams = new ArrayList<NameValuePair>();
+               postParams.add(new NameValuePair("principalId", testUserId));
+               postParams.add(new NameValuePair("privilege@jcr:write", 
"granted"));
+               
+               Credentials creds = new UsernamePasswordCredentials("admin", 
"admin");
+               H.assertAuthenticatedPostStatus(creds, postUrl, 
HttpServletResponse.SC_OK, postParams, null);
+               
+               postParams = new ArrayList<NameValuePair>();
+               postParams.add(new NameValuePair("principalId", testUserId2));
+               postParams.add(new NameValuePair("privilege@jcr:write", 
"granted"));
+               
+               H.assertAuthenticatedPostStatus(creds, postUrl, 
HttpServletResponse.SC_OK, postParams, null);
+               
+               postParams = new ArrayList<NameValuePair>();
+               postParams.add(new NameValuePair("principalId", testUserId2));
+               postParams.add(new 
NameValuePair("privilege@jcr:lockManagement", "granted"));
+               
+        postUrl = testFolderUrl + "/child.modifyAce.html";
+               H.assertAuthenticatedPostStatus(creds, postUrl, 
HttpServletResponse.SC_OK, postParams, null);
+
+               
+               //fetch the JSON for the eacl to verify the settings.
+               String getUrl = testFolderUrl + "/child.privileges-info.json";
+               Credentials testUserCreds = new 
UsernamePasswordCredentials("admin", "admin");
+               String json = H.getAuthenticatedContent(testUserCreds, getUrl, 
HttpTest.CONTENT_TYPE_JSON, null, HttpServletResponse.SC_OK);
+               assertNotNull(json);
+               JsonObject jsonObject = JsonUtil.parseObject(json);
+               jsonObject = jsonObject.getJsonObject("effectiveAccessRights");
+               
+               JsonObject aceObject = jsonObject.getJsonObject(testUserId);
+               assertNotNull(aceObject);
+
+               JsonArray grantedArray = aceObject.getJsonArray("granted");
+               assertNotNull(grantedArray);
+               assertEquals(1, grantedArray.size());
+               Set<String> grantedPrivilegeNames = new HashSet<String>();
+               for (int i=0; i < grantedArray.size(); i++) {
+                       grantedPrivilegeNames.add(grantedArray.getString(i));
+               }
+               H.assertPrivilege(grantedPrivilegeNames,true,"jcr:write");
+
+               JsonArray deniedArray = aceObject.getJsonArray("denied");
+               assertNotNull(deniedArray);
+               assertEquals(0, deniedArray.size());
+
+               JsonObject aceObject2 = jsonObject.getJsonObject(testUserId2);
+               assertNotNull(aceObject2);
+
+               JsonArray grantedArray2 = aceObject2.getJsonArray("granted");
+               assertNotNull(grantedArray2);
+               assertEquals(2, grantedArray2.size());
+               Set<String> grantedPrivilegeNames2 = new HashSet<String>();
+               for (int i=0; i < grantedArray2.size(); i++) {
+                       grantedPrivilegeNames2.add(grantedArray2.getString(i));
+               }
+               H.assertPrivilege(grantedPrivilegeNames2, true, "jcr:write");
+               H.assertPrivilege(grantedPrivilegeNames2, true, 
"jcr:lockManagement");
+
+               JsonArray deniedArray2 = aceObject2.getJsonArray("denied");
+               assertNotNull(deniedArray2);
+               assertEquals(0, deniedArray2.size());
+       }
+
 }
diff --git 
a/src/main/resources/integration-test/accessmanager/privileges-info.json.esp 
b/src/main/resources/integration-test/accessmanager/privileges-info.json.esp
index 1fcd010..01b32b6 100644
--- a/src/main/resources/integration-test/accessmanager/privileges-info.json.esp
+++ b/src/main/resources/integration-test/accessmanager/privileges-info.json.esp
@@ -18,13 +18,94 @@
  * under the License.
  */
 
- var privilegesInfo = new 
Packages.org.apache.sling.jcr.jackrabbit.accessmanager.PrivilegesInfo();
-%>
-{
-       "canAddChildren" : <%=privilegesInfo.canAddChildren(currentNode)%>,
-       "canDeleteChildren" : 
<%=privilegesInfo.canDeleteChildren(currentNode)%>,
-       "canDelete" : <%=privilegesInfo.canDelete(currentNode)%>,
-       "canModifyProperties" : 
<%=privilegesInfo.canModifyProperties(currentNode)%>,
-       "canReadAccessControl" : 
<%=privilegesInfo.canReadAccessControl(currentNode)%>,
-       "canModifyAccessControl" : 
<%=privilegesInfo.canModifyAccessControl(currentNode)%>
+var factory = 
Packages.javax.json.Json.createBuilderFactory(Packages.java.util.Collections.emptyMap());
+var jsonObjBuilder = factory.createObjectBuilder();
+
+var privilegesInfo = new 
Packages.org.apache.sling.jcr.jackrabbit.accessmanager.PrivilegesInfo();
+ 
+jsonObjBuilder.add("canAddChildren", 
privilegesInfo.canAddChildren(currentNode));
+jsonObjBuilder.add("canDeleteChildren", 
privilegesInfo.canDeleteChildren(currentNode));
+jsonObjBuilder.add("canDelete", privilegesInfo.canDelete(currentNode));
+jsonObjBuilder.add("canModifyProperties", 
privilegesInfo.canModifyProperties(currentNode));
+jsonObjBuilder.add("canReadAccessControl", 
privilegesInfo.canReadAccessControl(currentNode));
+jsonObjBuilder.add("canModifyAccessControl", 
privilegesInfo.canModifyAccessControl(currentNode));
+
+if (privilegesInfo.canReadAccessControl(currentNode)) {
+  var declaredBuilder = factory.createObjectBuilder();
+  var declared = privilegesInfo.getDeclaredAccessRights(currentNode);
+  if (declared != null) {
+    var iterator = declared.entrySet().iterator();
+    while (iterator.hasNext()) {
+      var next = iterator.next();
+      var principal = next.getKey();
+      var accessRights = next.getValue();
+
+      var entryBuilder = factory.createObjectBuilder();
+                       
+      var grantedBuilder = factory.createArrayBuilder();
+      var granted = accessRights.getGranted();
+      var grantedIt = granted.iterator();
+      while (grantedIt.hasNext()) {
+        var next = grantedIt.next();
+        var name = next.getName();
+        grantedBuilder.add(name);
+      }
+      entryBuilder.add("granted", grantedBuilder);
+    
+      var deniedBuilder = factory.createArrayBuilder();
+      var denied = accessRights.getDenied();
+      var deniedIt = denied.iterator();
+      while (deniedIt.hasNext()) {
+        var next = deniedIt.next();
+        var name = next.getName();
+        deniedBuilder.add(name);
+      }
+      entryBuilder.add("denied", deniedBuilder);
+    
+      declaredBuilder.add(principal.getName(), entryBuilder);
+    }
+  }
+  jsonObjBuilder.add("declaredAccessRights", declaredBuilder);
+
+  var effectiveBuilder = factory.createObjectBuilder();
+  var effective = privilegesInfo.getEffectiveAccessRights(currentNode);
+  if (effective != null) {
+    var iterator = effective.entrySet().iterator();
+    while (iterator.hasNext()) {
+      var next = iterator.next();
+      var principal = next.getKey();
+      var accessRights = next.getValue();
+
+      var entryBuilder = factory.createObjectBuilder();
+                       
+      var grantedBuilder = factory.createArrayBuilder();
+      var granted = accessRights.getGranted();
+      var grantedIt = granted.iterator();
+      while (grantedIt.hasNext()) {
+        var next = grantedIt.next();
+        var name = next.getName();
+        grantedBuilder.add(name);
+      }
+      entryBuilder.add("granted", grantedBuilder);
+    
+      var deniedBuilder = factory.createArrayBuilder();
+      var denied = accessRights.getDenied();
+      var deniedIt = denied.iterator();
+      while (deniedIt.hasNext()) {
+        var next = deniedIt.next();
+        var name = next.getName();
+        deniedBuilder.add(name);
+      }
+      entryBuilder.add("denied", deniedBuilder);
+    
+      effectiveBuilder.add(principal.getName(), entryBuilder);
+    }
+  }
+  jsonObjBuilder.add("effectiveAccessRights", effectiveBuilder);
 }
+ 
+var jsonObj = jsonObjBuilder.build();
+var jsonWriter = Packages.javax.json.Json.createWriter(response.getWriter());
+jsonWriter.writeObject(jsonObj);
+jsonWriter.close(); 
+%>
\ No newline at end of file

Reply via email to