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 <[email protected]>
AuthorDate: Wed Jan 20 17:12:06 2021 +0100
SLING-10079 : Review DefaultAclManager.computePathWithTypes (#58)
Co-authored-by: angela <[email protected]>
---
.../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