You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by si...@apache.org on 2019/07/02 15:07:52 UTC

[sling-org-apache-sling-feature-cpconverter] branch master updated: SLING-8555 - Converter generates broken repoinit statements when package contains type indicators for restriction

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

simonetripodi 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 b6af63e  SLING-8555 - Converter generates broken repoinit statements when package contains type indicators for restriction
b6af63e is described below

commit b6af63e57937c77c380fdf94ca8c9ba00f2c607a
Author: Simo Tripodi <st...@adobe.com>
AuthorDate: Tue Jul 2 17:07:45 2019 +0200

    SLING-8555 - Converter generates broken repoinit statements when package
    contains type indicators for restriction
    
    type indicators filtered out via regex
    added the RepoInitParser in the tests
---
 pom.xml                                                   |  6 ++++++
 .../cpconverter/handlers/RepPolicyEntryHandler.java       | 10 +++++++---
 .../cpconverter/handlers/RepPolicyEntryHandlerTest.java   | 15 ++++++++++++++-
 3 files changed, 27 insertions(+), 4 deletions(-)

diff --git a/pom.xml b/pom.xml
index 660d07e..bc50bb7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -216,6 +216,12 @@
       <version>2.25.0</version>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.apache.sling</groupId>
+      <artifactId>org.apache.sling.repoinit.parser</artifactId>
+      <version>1.2.4</version>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
 
   <build>
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandler.java b/src/main/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandler.java
index f377ca1..877fe37 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandler.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandler.java
@@ -24,6 +24,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Stack;
 import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
@@ -84,6 +85,8 @@ public final class RepPolicyEntryHandler extends AbstractRegexEntryHandler {
             operations.put(REP_DENY_ACE, "deny");
         }
 
+        private static final Pattern typeIndicatorPattern = Pattern.compile("\\{[^\\}]+\\}\\[(.+)\\]");
+
         private final Stack<Acl> acls = new Stack<>();
 
         private final String path;
@@ -109,9 +112,10 @@ public final class RepPolicyEntryHandler extends AbstractRegexEntryHandler {
                     String operation = operations.get(primaryType);
 
                     String privileges = attributes.getValue(REP_PRIVILEGES);
-                    int beginIndex = privileges.indexOf('[') + 1;
-                    int endIndex = privileges.indexOf(']');
-                    privileges = privileges.substring(beginIndex, endIndex);
+                    Matcher matcher = typeIndicatorPattern.matcher(privileges);
+                    if (matcher.matches()) {
+                        privileges = matcher.group(1);
+                    }
 
                     Acl acl = new Acl(operation, privileges, Paths.get(path));
 
diff --git a/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java b/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java
index e39c660..5f8f27c 100644
--- a/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java
+++ b/src/test/java/org/apache/sling/feature/cpconverter/handlers/RepPolicyEntryHandlerTest.java
@@ -16,18 +16,20 @@
  */
 package org.apache.sling.feature.cpconverter.handlers;
 
-import static org.mockito.ArgumentMatchers.anyString;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
 import java.io.File;
+import java.io.StringReader;
 import java.nio.file.Paths;
+import java.util.List;
 
 import org.apache.jackrabbit.vault.fs.io.Archive;
 import org.apache.jackrabbit.vault.fs.io.Archive.Entry;
@@ -41,6 +43,9 @@ import org.apache.sling.feature.cpconverter.acl.SystemUser;
 import org.apache.sling.feature.cpconverter.features.DefaultFeaturesManager;
 import org.apache.sling.feature.cpconverter.features.FeaturesManager;
 import org.apache.sling.feature.cpconverter.vltpkg.VaultPackageAssembler;
+import org.apache.sling.repoinit.parser.RepoInitParser;
+import org.apache.sling.repoinit.parser.impl.RepoInitParserService;
+import org.apache.sling.repoinit.parser.operations.Operation;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -114,6 +119,10 @@ public final class RepPolicyEntryHandlerTest {
                 "end\n";
         String actual = repoinitExtension.getText();
         assertEquals(expected, actual);
+
+        RepoInitParser repoInitParser = new RepoInitParserService();
+        List<Operation> operations = repoInitParser.parse(new StringReader(actual));
+        assertFalse(operations.isEmpty());
     }
 
     @Test
@@ -145,6 +154,10 @@ public final class RepPolicyEntryHandlerTest {
                 "end\n";
         String actual = repoinitExtension.getText();
         assertEquals(expected, actual);
+
+        RepoInitParser repoInitParser = new RepoInitParserService();
+        List<Operation> operations = repoInitParser.parse(new StringReader(actual));
+        assertFalse(operations.isEmpty());
     }
 
     @Test