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