You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by pa...@apache.org on 2021/01/20 16:12:17 UTC

[sling-org-apache-sling-feature-cpconverter] branch master updated: SLING-10079 : Review DefaultAclManager.computePathWithTypes (#58)

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

pauls pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-cpconverter.git


The following commit(s) were added to refs/heads/master by this push:
     new 5eece57  SLING-10079 : Review DefaultAclManager.computePathWithTypes (#58)
5eece57 is described below

commit 5eece57161befac8c8b16f2b24e8059fe2788844
Author: anchela <an...@apache.org>
AuthorDate: Wed Jan 20 17:12:06 2021 +0100

    SLING-10079 : Review DefaultAclManager.computePathWithTypes (#58)
    
    
    Co-authored-by: angela <an...@adobe.com>
---
 .../accesscontrol/DefaultAclManager.java           | 69 +++++++++++++---------
 .../cpconverter/accesscontrol/AclManagerTest.java  | 16 ++---
 .../{asd => _sling_tests}/not/.content.xml         |  0
 3 files changed, 48 insertions(+), 37 deletions(-)

diff --git a/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java b/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java
index 1508a78..456e884 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/accesscontrol/DefaultAclManager.java
@@ -294,43 +294,54 @@ public class DefaultAclManager implements AclManager {
         privilegeDefinitions = null;
     }
 
-     protected @Nullable String computePathWithTypes(@NotNull RepoPath path, @NotNull List<VaultPackageAssembler> packageAssemblers) {
-        path = new RepoPath(PlatformNameFormat.getPlatformPath(path.toString()));
-
-        boolean type = false;
-        String current = "";
+    protected @Nullable String computePathWithTypes(@NotNull RepoPath path, @NotNull List<VaultPackageAssembler> packageAssemblers) {
+        boolean foundType = false;
+        String repoinitPath = "/";
+        String platformPath = "";
         for (String part : path.toString().substring(1).split("/")) {
-            current += current.isEmpty() ? part : "/" + part;
+            repoinitPath += "/".equals(repoinitPath) ? part : "/" + part;
+            String platformname = PlatformNameFormat.getPlatformName(part);
+            platformPath += platformPath.isEmpty() ? platformname : "/" + platformname;
             for (VaultPackageAssembler packageAssembler : packageAssemblers) {
-                File currentContent = packageAssembler.getEntry(current + "/" + CONTENT_XML_FILE_NAME);
+                File currentContent = packageAssembler.getEntry(platformPath + "/" + CONTENT_XML_FILE_NAME);
                 if (currentContent.isFile()) {
-                    String primary;
-                    String mixin;
-                    try (FileInputStream input = new FileInputStream(currentContent);
-                         FileInputStream input2 = new FileInputStream(currentContent)) {
-                        primary = new PrimaryTypeParser().parse(input);
-                        mixin = new MixinParser().parse(input2);
-                        current += "(" + primary;
-                        if (mixin != null) {
-                            mixin = mixin.trim();
-                            if (mixin.startsWith("[")) {
-                                mixin = mixin.substring(1, mixin.length() - 1);
-                            }
-                            current += " mixin " + mixin;
-                        }
-                        current += ")";
-                        type = true;
-                    } catch (Exception e) {
-                        throw new RuntimeException("A fatal error occurred while parsing the '"
-                                + currentContent
-                                + "' file, see nested exceptions: "
-                                + e);
+                    String typeNames = extractTypeNames(currentContent);
+                    if (typeNames != null) {
+                        repoinitPath += typeNames;
+                        foundType = true;
+                        break;
                     }
                 }
             }
         }
+        return foundType ? repoinitPath : null;
+    }
 
-        return type ? new RepoPath(current).toString() : null;
+    @Nullable
+    private String extractTypeNames(@NotNull File currentContent) {
+        String typeNames = null;
+        try (FileInputStream input = new FileInputStream(currentContent);
+             FileInputStream input2 = new FileInputStream(currentContent)) {
+            String primary = new PrimaryTypeParser().parse(input);
+            if (primary != null) {
+                typeNames = "(" + primary;
+                String mixin = new MixinParser().parse(input2);
+                if (mixin != null) {
+                    mixin = mixin.trim();
+                    if (mixin.startsWith("[")) {
+                        mixin = mixin.substring(1, mixin.length() - 1);
+                    }
+                    typeNames += " mixin " + mixin;
+                }
+                typeNames += ")";
+            }
+        } catch (Exception e) {
+            throw new RuntimeException("A fatal error occurred while parsing the '"
+                    + currentContent
+                    + "' file, see nested exceptions: "
+                    + e);
+        }
+        return typeNames;
     }
 
     @NotNull
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/accesscontrol/AclManagerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/accesscontrol/AclManagerTest.java
index bddc611..22fb5ad 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/accesscontrol/AclManagerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/accesscontrol/AclManagerTest.java
@@ -73,12 +73,12 @@ public class AclManagerTest {
     public void makeSureAclsAreCreatedOnlyoutsideSytemUsersPaths() throws Exception {
         aclManager.addSystemUser(new SystemUser("acs-commons-package-replication-status-event-service", new RepoPath("/home/users/system/foo"), new RepoPath("/home/users/system")));
 
-        aclManager.addAcl("acs-commons-package-replication-status-event-service", newAcl(true, "jcr:read,rep:write,rep:indexDefinitionManagement", "/asd/not/system/user/path"));
+        aclManager.addAcl("acs-commons-package-replication-status-event-service", newAcl(true, "jcr:read,rep:write,rep:indexDefinitionManagement", "/_sling_tests/not/system/user/path"));
         aclManager.addAcl("acs-commons-package-replication-status-event-service", newAcl(true, "jcr:read,crx:replicate,jcr:removeNode", "/home/users/system"));
 
         VaultPackageAssembler assembler = mock(VaultPackageAssembler.class);
         when(assembler.getEntry(anyString())).thenReturn(tempDir.toFile());
-        when(assembler.getEntry("asd/not/.content.xml")).thenReturn(new File(getClass().getResource("asd/not/.content.xml").getFile()));
+        when(assembler.getEntry("_sling_tests/not/.content.xml")).thenReturn(new File(getClass().getResource("_sling_tests/not/.content.xml").getFile()));
 
 
         Feature feature = new Feature(new ArtifactId("org.apache.sling", "org.apache.sling.cp2fm", "0.0.1", null, null));
@@ -95,9 +95,9 @@ public class AclManagerTest {
         // acs-commons-on-deploy-scripts-service will be missed
         String expected =
                 "create service user acs-commons-package-replication-status-event-service with path /home/users/system" + System.lineSeparator() +
-                        "create path /asd/not(nt:unstructured mixin rep:AccessControllable,mix:created)/system/user/path" + System.lineSeparator() +
+                        "create path /sling:tests/not(nt:unstructured mixin rep:AccessControllable,mix:created)/system/user/path" + System.lineSeparator() +
                         "set ACL for acs-commons-package-replication-status-event-service" + System.lineSeparator() +
-                        "allow jcr:read,rep:write,rep:indexDefinitionManagement on /asd/not/system/user/path" + System.lineSeparator() +
+                        "allow jcr:read,rep:write,rep:indexDefinitionManagement on /sling:tests/not/system/user/path" + System.lineSeparator() +
                         "allow jcr:read,crx:replicate,jcr:removeNode on /home/users/system" + System.lineSeparator() +
                         "end" + System.lineSeparator();
         String actual = repoinitExtension.getText();
@@ -117,11 +117,11 @@ public class AclManagerTest {
         aclManager.reset();
 
         aclManager.addSystemUser(new SystemUser("acs-commons-package-replication-status-event-service", new RepoPath("/home/users/system/foo"), new RepoPath("/home/users/system")));
-        aclManager.addAcl("acs-commons-package-replication-status-event-service", newAcl(true, "jcr:read,rep:write,rep:indexDefinitionManagement", "/asd/not/system/user/path"));
+        aclManager.addAcl("acs-commons-package-replication-status-event-service", newAcl(true, "jcr:read,rep:write,rep:indexDefinitionManagement", "/_sling_tests/not/system/user/path"));
 
         VaultPackageAssembler assembler = mock(VaultPackageAssembler.class);
         when(assembler.getEntry(anyString())).thenReturn(tempDir.toFile());
-        when(assembler.getEntry("asd/not/.content.xml")).thenReturn(new File(getClass().getResource("asd/not/.content.xml").getFile()));
+        when(assembler.getEntry("_sling_tests/not/.content.xml")).thenReturn(new File(getClass().getResource("_sling_tests/not/.content.xml").getFile()));
 
         Feature feature = new Feature(new ArtifactId("org.apache.sling", "org.apache.sling.cp2fm", "0.0.1", null, null));
 
@@ -137,9 +137,9 @@ public class AclManagerTest {
         // aacs-commons-ensure-oak-index-service will be missed
         String expected =
                 "create service user acs-commons-package-replication-status-event-service with path /home/users/system" + System.lineSeparator() +
-                "create path /asd/not(nt:unstructured mixin rep:AccessControllable,mix:created)/system/user/path" + System.lineSeparator() +
+                "create path /sling:tests/not(nt:unstructured mixin rep:AccessControllable,mix:created)/system/user/path" + System.lineSeparator() +
                 "set ACL for acs-commons-package-replication-status-event-service" + System.lineSeparator() +
-                "allow jcr:read,rep:write,rep:indexDefinitionManagement on /asd/not/system/user/path" + System.lineSeparator() +
+                "allow jcr:read,rep:write,rep:indexDefinitionManagement on /sling:tests/not/system/user/path" + System.lineSeparator() +
                 "end" + System.lineSeparator();
         String actual = repoinitExtension.getText();
         assertEquals(expected, actual);
diff --git a/src/test/resources/org/apache/sling/feature/cpconverter/accesscontrol/asd/not/.content.xml b/src/test/resources/org/apache/sling/feature/cpconverter/accesscontrol/_sling_tests/not/.content.xml
similarity index 100%
rename from src/test/resources/org/apache/sling/feature/cpconverter/accesscontrol/asd/not/.content.xml
rename to src/test/resources/org/apache/sling/feature/cpconverter/accesscontrol/_sling_tests/not/.content.xml