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/05/03 13:20:59 UTC
[sling-org-apache-sling-feature-cpconverter] branch
multiple-packages-conversion updated: SLING-8390 - Converter not handling
serviceusers and acls spread across multiple packages
This is an automated email from the ASF dual-hosted git repository.
simonetripodi pushed a commit to branch multiple-packages-conversion
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-feature-cpconverter.git
The following commit(s) were added to refs/heads/multiple-packages-conversion by this push:
new ff8f0e8 SLING-8390 - Converter not handling serviceusers and acls spread across multiple packages
ff8f0e8 is described below
commit ff8f0e810d1cb65fea94c83370823c0bcb3da57a
Author: stripodi <st...@simos-mbp>
AuthorDate: Fri May 3 15:20:52 2019 +0200
SLING-8390 - Converter not handling serviceusers and acls spread across
multiple packages
implemented service user memento from previous conversions
---
.../ContentPackage2FeatureModelConverter.java | 1 +
.../sling/feature/cpconverter/acl/AclManager.java | 45 ++++++++++++++++------
.../handlers/RepPolicyEntryHandlerTest.java | 8 +++-
3 files changed, 41 insertions(+), 13 deletions(-)
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
index 1c25660..6ef0071 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/ContentPackage2FeatureModelConverter.java
@@ -316,6 +316,7 @@ public class ContentPackage2FeatureModelConverter {
}
runmodeMapper.save();
+ aclManager.reset();
}
}
diff --git a/src/main/java/org/apache/sling/feature/cpconverter/acl/AclManager.java b/src/main/java/org/apache/sling/feature/cpconverter/acl/AclManager.java
index b929520..c4b5402 100644
--- a/src/main/java/org/apache/sling/feature/cpconverter/acl/AclManager.java
+++ b/src/main/java/org/apache/sling/feature/cpconverter/acl/AclManager.java
@@ -24,6 +24,7 @@ import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeSet;
@@ -41,6 +42,8 @@ public final class AclManager {
private static final String DEFAULT_TYPE = "sling:Folder";
+ private final Set<String> preProvidedSystemUsers = new LinkedHashSet<>();
+
private final Set<String> systemUsers = new LinkedHashSet<>();
private final Set<String> paths = new TreeSet<String>();
@@ -48,7 +51,7 @@ public final class AclManager {
private final Map<String, List<Acl>> acls = new HashMap<>();
public boolean addSystemUser(String systemUser) {
- if (systemUser != null && !systemUser.isEmpty()) {
+ if (systemUser != null && !systemUser.isEmpty() && preProvidedSystemUsers.add(systemUser)) {
return systemUsers.add(systemUser);
}
return false;
@@ -105,23 +108,23 @@ public final class AclManager {
formatter.format("create path (%s) %s%n", type, path);
}
- for (String systemUser : systemUsers) {
- // create then the users
+ // create then the users
+ for (String systemUser : systemUsers) {
formatter.format("create service user %s%n", systemUser);
- // ACL can now be set
+ List<Acl> authorizations = acls.remove(systemUser);
+
+ addAclStatement(formatter, systemUser, authorizations);
+ }
- List<Acl> authorizations = acls.get(systemUser);
- if (authorizations != null && !authorizations.isEmpty()) {
- formatter.format("set ACL for %s%n", systemUser);
+ // all the resting ACLs can now be set
- for (Acl authorization : authorizations) {
- authorization.addAclStatement(formatter);
- }
+ for (Entry<String, List<Acl>> currentAcls : acls.entrySet()) {
+ String systemUser = currentAcls.getKey();
+ List<Acl> authorizations = currentAcls.getValue();
- formatter.format("end%n");
- }
+ addAclStatement(formatter, systemUser, authorizations);
}
String text = formatter.toString();
@@ -131,4 +134,22 @@ public final class AclManager {
feature.getExtensions().add(repoInitExtension);
}
+ public void reset() {
+ systemUsers.clear();
+ paths.clear();
+ acls.clear();
+ }
+
+ private void addAclStatement(Formatter formatter, String systemUser, List<Acl> authorizations) {
+ if (authorizations != null && !authorizations.isEmpty()) {
+ formatter.format("set ACL for %s%n", systemUser);
+
+ for (Acl authorization : authorizations) {
+ authorization.addAclStatement(formatter);
+ }
+
+ formatter.format("end%n");
+ }
+ }
+
}
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 acb57dd..f5d6e43 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
@@ -107,7 +107,7 @@ public final class RepPolicyEntryHandlerTest {
}
@Test
- public void notDeclaredSystemUsersWontHaveAclSettings() throws Exception {
+ public void notDeclaredSystemUsersWillHaveAclSettings() throws Exception {
Extension repoinitExtension = parseAndSetRepoinit("acs-commons-package-replication-status-event-service",
"acs-commons-ensure-service-user-service",
"acs-commons-automatic-package-replicator-service",
@@ -132,6 +132,12 @@ public final class RepPolicyEntryHandlerTest {
"create service user acs-commons-on-deploy-scripts-service\n" +
"set ACL for acs-commons-on-deploy-scripts-service\n" +
"allow jcr:read on /asd/public\n" +
+ "end\n" +
+ "set ACL for acs-commons-dispatcher-flush-service\n" +
+ "allow jcr:read,crx:replicate,jcr:removeNode on /asd/public\n" +
+ "end\n" +
+ "set ACL for acs-commons-ensure-oak-index-service\n" +
+ "allow jcr:read,rep:write,rep:indexDefinitionManagement on /asd/public restriction(*/oak:index/*)\n" +
"end\n";
String actual = repoinitExtension.getText();
assertEquals(expected, actual);