From a3ca7ed871c6731b93ebb811f8dbd485f8174380 Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Tue, 10 Dec 2024 14:34:53 +0100 Subject: [PATCH] Never emit validation errors for default config Add IT to verify this behaviour described in the readme This closes #2 --- src/it/no-config/application-package/pom.xml | 24 ++++ .../src/main/META-INF/vault/filter.xml | 7 ++ .../src/main/jcr_root/_oak_index/.content.xml | 4 + .../_oak_index/mytenant-custom-1/.content.xml | 11 ++ .../apps/mytenant/_sling_configs/.content.xml | 3 + .../.content.xml | 8 ++ .../apps/mytenant/clientlibrary1/.content.xml | 4 + .../components/component1/.content.xml | 5 + .../src/main/jcr_root/apps/mytenant/test.txt | 0 src/it/no-config/container-package/pom.xml | 23 ++++ .../src/main/META-INF/vault/filter.xml | 5 + ...com.example.mytenant.MyComponent2.cfg.json | 4 + ...example.mytenant.MyComponent~name.cfg.json | 4 + src/it/no-config/content-package/pom.xml | 27 +++++ .../src/main/META-INF/vault/filter.xml | 7 ++ .../conf/mytenant/my-segment/.content.xml | 12 ++ .../home/users/mytenant/myuser/.content.xml | 9 ++ src/it/no-config/invoker.properties | 3 + src/it/no-config/pom.xml | 111 ++++++++++++++++++ .../AuthorizableNamespaceValidator.java | 5 +- .../OsgiConfigurationNamespaceValidator.java | 48 ++++---- .../PackageIdNamespaceValidator.java | 10 +- .../ResourceTypeNamespaceValidator.java | 53 +++++---- 23 files changed, 332 insertions(+), 55 deletions(-) create mode 100644 src/it/no-config/application-package/pom.xml create mode 100644 src/it/no-config/application-package/src/main/META-INF/vault/filter.xml create mode 100644 src/it/no-config/application-package/src/main/jcr_root/_oak_index/.content.xml create mode 100644 src/it/no-config/application-package/src/main/jcr_root/_oak_index/mytenant-custom-1/.content.xml create mode 100644 src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/_sling_configs/.content.xml create mode 100644 src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/_sling_configs/com.adobe.cq.wcm.core.components.internal.DataLayerConfig/.content.xml create mode 100644 src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/clientlibrary1/.content.xml create mode 100644 src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/components/component1/.content.xml create mode 100644 src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/test.txt create mode 100644 src/it/no-config/container-package/pom.xml create mode 100644 src/it/no-config/container-package/src/main/META-INF/vault/filter.xml create mode 100644 src/it/no-config/container-package/src/main/jcr_root/apps/mytenant/config/com.example.mytenant.MyComponent2.cfg.json create mode 100644 src/it/no-config/container-package/src/main/jcr_root/apps/mytenant/config/com.example.mytenant.MyComponent~name.cfg.json create mode 100644 src/it/no-config/content-package/pom.xml create mode 100644 src/it/no-config/content-package/src/main/META-INF/vault/filter.xml create mode 100644 src/it/no-config/content-package/src/main/jcr_root/conf/mytenant/my-segment/.content.xml create mode 100644 src/it/no-config/content-package/src/main/jcr_root/home/users/mytenant/myuser/.content.xml create mode 100644 src/it/no-config/invoker.properties create mode 100644 src/it/no-config/pom.xml diff --git a/src/it/no-config/application-package/pom.xml b/src/it/no-config/application-package/pom.xml new file mode 100644 index 0000000..60723d7 --- /dev/null +++ b/src/it/no-config/application-package/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + application-package + content-package + + biz.netcentric.filevault.validator.aem.namespace.it + no-config + 1.0.0-SNAPSHOT + + + + + org.apache.jackrabbit + filevault-package-maven-plugin + + mixed + true + + + + + \ No newline at end of file diff --git a/src/it/no-config/application-package/src/main/META-INF/vault/filter.xml b/src/it/no-config/application-package/src/main/META-INF/vault/filter.xml new file mode 100644 index 0000000..b05d4c6 --- /dev/null +++ b/src/it/no-config/application-package/src/main/META-INF/vault/filter.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/it/no-config/application-package/src/main/jcr_root/_oak_index/.content.xml b/src/it/no-config/application-package/src/main/jcr_root/_oak_index/.content.xml new file mode 100644 index 0000000..86f43bb --- /dev/null +++ b/src/it/no-config/application-package/src/main/jcr_root/_oak_index/.content.xml @@ -0,0 +1,4 @@ + + diff --git a/src/it/no-config/application-package/src/main/jcr_root/_oak_index/mytenant-custom-1/.content.xml b/src/it/no-config/application-package/src/main/jcr_root/_oak_index/mytenant-custom-1/.content.xml new file mode 100644 index 0000000..175802a --- /dev/null +++ b/src/it/no-config/application-package/src/main/jcr_root/_oak_index/mytenant-custom-1/.content.xml @@ -0,0 +1,11 @@ + + + \ No newline at end of file diff --git a/src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/_sling_configs/.content.xml b/src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/_sling_configs/.content.xml new file mode 100644 index 0000000..491392d --- /dev/null +++ b/src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/_sling_configs/.content.xml @@ -0,0 +1,3 @@ + + diff --git a/src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/_sling_configs/com.adobe.cq.wcm.core.components.internal.DataLayerConfig/.content.xml b/src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/_sling_configs/com.adobe.cq.wcm.core.components.internal.DataLayerConfig/.content.xml new file mode 100644 index 0000000..5b505bd --- /dev/null +++ b/src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/_sling_configs/com.adobe.cq.wcm.core.components.internal.DataLayerConfig/.content.xml @@ -0,0 +1,8 @@ + + + + diff --git a/src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/clientlibrary1/.content.xml b/src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/clientlibrary1/.content.xml new file mode 100644 index 0000000..59ab8f2 --- /dev/null +++ b/src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/clientlibrary1/.content.xml @@ -0,0 +1,4 @@ + + \ No newline at end of file diff --git a/src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/components/component1/.content.xml b/src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/components/component1/.content.xml new file mode 100644 index 0000000..f7475eb --- /dev/null +++ b/src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/components/component1/.content.xml @@ -0,0 +1,5 @@ + + \ No newline at end of file diff --git a/src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/test.txt b/src/it/no-config/application-package/src/main/jcr_root/apps/mytenant/test.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/it/no-config/container-package/pom.xml b/src/it/no-config/container-package/pom.xml new file mode 100644 index 0000000..f5031a2 --- /dev/null +++ b/src/it/no-config/container-package/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + container-package + content-package + + biz.netcentric.filevault.validator.aem.namespace.it + no-config + 1.0.0-SNAPSHOT + + + + + org.apache.jackrabbit + filevault-package-maven-plugin + + container + + + + + \ No newline at end of file diff --git a/src/it/no-config/container-package/src/main/META-INF/vault/filter.xml b/src/it/no-config/container-package/src/main/META-INF/vault/filter.xml new file mode 100644 index 0000000..b1d4809 --- /dev/null +++ b/src/it/no-config/container-package/src/main/META-INF/vault/filter.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/it/no-config/container-package/src/main/jcr_root/apps/mytenant/config/com.example.mytenant.MyComponent2.cfg.json b/src/it/no-config/container-package/src/main/jcr_root/apps/mytenant/config/com.example.mytenant.MyComponent2.cfg.json new file mode 100644 index 0000000..0f210bc --- /dev/null +++ b/src/it/no-config/container-package/src/main/jcr_root/apps/mytenant/config/com.example.mytenant.MyComponent2.cfg.json @@ -0,0 +1,4 @@ +{ + "myproperty1": "myvalue1", + "myproperty2": 2 +} diff --git a/src/it/no-config/container-package/src/main/jcr_root/apps/mytenant/config/com.example.mytenant.MyComponent~name.cfg.json b/src/it/no-config/container-package/src/main/jcr_root/apps/mytenant/config/com.example.mytenant.MyComponent~name.cfg.json new file mode 100644 index 0000000..0f210bc --- /dev/null +++ b/src/it/no-config/container-package/src/main/jcr_root/apps/mytenant/config/com.example.mytenant.MyComponent~name.cfg.json @@ -0,0 +1,4 @@ +{ + "myproperty1": "myvalue1", + "myproperty2": 2 +} diff --git a/src/it/no-config/content-package/pom.xml b/src/it/no-config/content-package/pom.xml new file mode 100644 index 0000000..cc037cf --- /dev/null +++ b/src/it/no-config/content-package/pom.xml @@ -0,0 +1,27 @@ + + + 4.0.0 + + content-package + content-package + + biz.netcentric.filevault.validator.aem.namespace.it + no-config + 1.0.0-SNAPSHOT + + + + + + org.apache.jackrabbit + filevault-package-maven-plugin + + content + + my.custom.Hook + + + + + + \ No newline at end of file diff --git a/src/it/no-config/content-package/src/main/META-INF/vault/filter.xml b/src/it/no-config/content-package/src/main/META-INF/vault/filter.xml new file mode 100644 index 0000000..428c02b --- /dev/null +++ b/src/it/no-config/content-package/src/main/META-INF/vault/filter.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/src/it/no-config/content-package/src/main/jcr_root/conf/mytenant/my-segment/.content.xml b/src/it/no-config/content-package/src/main/jcr_root/conf/mytenant/my-segment/.content.xml new file mode 100644 index 0000000..c46a5a8 --- /dev/null +++ b/src/it/no-config/content-package/src/main/jcr_root/conf/mytenant/my-segment/.content.xml @@ -0,0 +1,12 @@ + + + + \ No newline at end of file diff --git a/src/it/no-config/content-package/src/main/jcr_root/home/users/mytenant/myuser/.content.xml b/src/it/no-config/content-package/src/main/jcr_root/home/users/mytenant/myuser/.content.xml new file mode 100644 index 0000000..cc02caf --- /dev/null +++ b/src/it/no-config/content-package/src/main/jcr_root/home/users/mytenant/myuser/.content.xml @@ -0,0 +1,9 @@ + + + diff --git a/src/it/no-config/invoker.properties b/src/it/no-config/invoker.properties new file mode 100644 index 0000000..6cf0b59 --- /dev/null +++ b/src/it/no-config/invoker.properties @@ -0,0 +1,3 @@ +invoker.debug = false +invoker.buildResult = success +invoker.goals = clean verify -fae -e \ No newline at end of file diff --git a/src/it/no-config/pom.xml b/src/it/no-config/pom.xml new file mode 100644 index 0000000..dae3608 --- /dev/null +++ b/src/it/no-config/pom.xml @@ -0,0 +1,111 @@ + + + 4.0.0 + + biz.netcentric.filevault.validator.aem.namespace.it + no-config + pom + 1.0.0-SNAPSHOT + + + + + + maven-clean-plugin + 3.1.0 + + + maven-install-plugin + 3.0.0-M1 + + + maven-deploy-plugin + 3.0.0-M1 + + + maven-resources-plugin + 3.2.0 + + + maven-compiler-plugin + 3.8.1 + + + maven-surefire-plugin + 3.0.0-M5 + + + org.apache.jackrabbit + filevault-package-maven-plugin + 1.4.0 + true + + false + src/main/META-INF/vault/filter.xml + + + + + /,/libs,/apps,/oak:index,/etc,/var,/tmp,/conf,/content,/content/campaigns,/content/cq:tags,/content/dam,/content/experience-fragments,/content/projects,/content/screens,/etc/packages,/home/users + DEBUG + + + + + tccl:aem.cnd + + + + + DEBUG + + + + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + biz.netcentric.aem + aem-nodetypes + 2023.10.0 + + + + + + + + + + + + packaging-contentpackage + + + + ${basedir}/src/main/jcr_root + + + + + + org.apache.jackrabbit + filevault-package-maven-plugin + + + + + + + + application-package + content-package + container-package + + + \ No newline at end of file diff --git a/src/main/java/biz/netcentric/filevault/validator/aem/namespace/AuthorizableNamespaceValidator.java b/src/main/java/biz/netcentric/filevault/validator/aem/namespace/AuthorizableNamespaceValidator.java index c1a13f1..f6c0a86 100644 --- a/src/main/java/biz/netcentric/filevault/validator/aem/namespace/AuthorizableNamespaceValidator.java +++ b/src/main/java/biz/netcentric/filevault/validator/aem/namespace/AuthorizableNamespaceValidator.java @@ -60,8 +60,9 @@ public AuthorizableNamespaceValidator( Collection messages = new LinkedList<>(); String principalName = node.getPropertyValue(PROPERTY_PRINCIPAL_NAME).orElse(null); - if (allowedPrincipalNamePatterns.stream() - .noneMatch(pattern -> pattern.matcher(principalName).matches())) { + if (!allowedPrincipalNamePatterns.isEmpty() + && allowedPrincipalNamePatterns.stream() + .noneMatch(pattern -> pattern.matcher(principalName).matches())) { messages.add(new ValidationMessage( severity, String.format( diff --git a/src/main/java/biz/netcentric/filevault/validator/aem/namespace/OsgiConfigurationNamespaceValidator.java b/src/main/java/biz/netcentric/filevault/validator/aem/namespace/OsgiConfigurationNamespaceValidator.java index b7bcc81..057db4e 100644 --- a/src/main/java/biz/netcentric/filevault/validator/aem/namespace/OsgiConfigurationNamespaceValidator.java +++ b/src/main/java/biz/netcentric/filevault/validator/aem/namespace/OsgiConfigurationNamespaceValidator.java @@ -60,32 +60,30 @@ public OsgiConfigurationNamespaceValidator( // is it a factory configuration? boolean isFactoryConfig = subname != null; Collection messages = new LinkedList<>(); - if (!isFactoryConfig || restrictFactoryConfigurationsToAllowedPidPatterns) { - if (allowedPidPatterns.stream() - .noneMatch(pattern -> pattern.matcher(pid).matches())) { - messages.add(new ValidationMessage( - severity, - String.format( - "OSGi configuration PID '%s' is not allowed to be configured (does not match any of the allowed patterns [%s])", - pid, - allowedPidPatterns.stream() - .map(Pattern::pattern) - .collect(Collectors.joining(","))))); - } + if (!allowedPidPatterns.isEmpty() + && (!isFactoryConfig || restrictFactoryConfigurationsToAllowedPidPatterns) + && allowedPidPatterns.stream() + .noneMatch(pattern -> pattern.matcher(pid).matches())) { + messages.add(new ValidationMessage( + severity, + String.format( + "OSGi configuration PID '%s' is not allowed to be configured (does not match any of the allowed patterns [%s])", + pid, + allowedPidPatterns.stream().map(Pattern::pattern).collect(Collectors.joining(","))))); } - if (isFactoryConfig && !allowedFactoryPidNames.isEmpty()) { - if (allowedFactoryPidNames.stream() - .noneMatch(pattern -> pattern.matcher(subname).matches())) { - messages.add(new ValidationMessage( - severity, - String.format( - "OSGi factory configuration PID '%s' is not allowed with the given subname '%s' (does not match any of the allowed patterns [%s])", - pid, - subname, - allowedFactoryPidNames.stream() - .map(Pattern::pattern) - .collect(Collectors.joining(","))))); - } + if (isFactoryConfig + && !allowedFactoryPidNames.isEmpty() + && allowedFactoryPidNames.stream() + .noneMatch(pattern -> pattern.matcher(subname).matches())) { + messages.add(new ValidationMessage( + severity, + String.format( + "OSGi factory configuration PID '%s' is not allowed with the given subname '%s' (does not match any of the allowed patterns [%s])", + pid, + subname, + allowedFactoryPidNames.stream() + .map(Pattern::pattern) + .collect(Collectors.joining(","))))); } return messages; } diff --git a/src/main/java/biz/netcentric/filevault/validator/aem/namespace/PackageIdNamespaceValidator.java b/src/main/java/biz/netcentric/filevault/validator/aem/namespace/PackageIdNamespaceValidator.java index 3516b71..006d06d 100644 --- a/src/main/java/biz/netcentric/filevault/validator/aem/namespace/PackageIdNamespaceValidator.java +++ b/src/main/java/biz/netcentric/filevault/validator/aem/namespace/PackageIdNamespaceValidator.java @@ -49,8 +49,9 @@ public PackageIdNamespaceValidator( return Collections.singleton(new ValidationMessage(severity, "Package ID is missing")); } Collection messages = new LinkedList<>(); - if (allowedGroupPatterns.stream() - .noneMatch(pattern -> pattern.matcher(id.getGroup()).matches())) { + if (!allowedGroupPatterns.isEmpty() + && allowedGroupPatterns.stream() + .noneMatch(pattern -> pattern.matcher(id.getGroup()).matches())) { messages.add(new ValidationMessage( severity, String.format( @@ -58,8 +59,9 @@ public PackageIdNamespaceValidator( id.getGroup(), allowedGroupPatterns.stream().map(Pattern::pattern).collect(Collectors.joining(","))))); } - if (allowedNamePatterns.stream() - .noneMatch(pattern -> pattern.matcher(id.getName()).matches())) { + if (!allowedNamePatterns.isEmpty() + && allowedNamePatterns.stream() + .noneMatch(pattern -> pattern.matcher(id.getName()).matches())) { messages.add(new ValidationMessage( severity, String.format( diff --git a/src/main/java/biz/netcentric/filevault/validator/aem/namespace/ResourceTypeNamespaceValidator.java b/src/main/java/biz/netcentric/filevault/validator/aem/namespace/ResourceTypeNamespaceValidator.java index 1256f7d..2513a8e 100644 --- a/src/main/java/biz/netcentric/filevault/validator/aem/namespace/ResourceTypeNamespaceValidator.java +++ b/src/main/java/biz/netcentric/filevault/validator/aem/namespace/ResourceTypeNamespaceValidator.java @@ -55,31 +55,36 @@ public ResourceTypeNamespaceValidator( public @Nullable Collection validate( @NotNull DocViewNode2 node, @NotNull NodeContext nodeContext, boolean isRoot) { Collection messages = new LinkedList<>(); - String type = node.getPropertyValue(PROPERTY_NAME_RESOURCE_TYPE).orElse(null); - if (type != null - && allowedTypePatterns.stream() - .noneMatch(pattern -> pattern.matcher(type).matches())) { - messages.add(new ValidationMessage( - severity, - String.format( - "Resource is using type '%s' which is not allowed (does not match any of the allowed patterns [%s])", - type, - allowedTypePatterns.stream().map(Pattern::pattern).collect(Collectors.joining(","))))); + if (!allowedTypePatterns.isEmpty()) { + String type = node.getPropertyValue(PROPERTY_NAME_RESOURCE_TYPE).orElse(null); + if (type != null + && allowedTypePatterns.stream() + .noneMatch(pattern -> pattern.matcher(type).matches())) { + messages.add(new ValidationMessage( + severity, + String.format( + "Resource is using type '%s' which is not allowed (does not match any of the allowed patterns [%s])", + type, + allowedTypePatterns.stream() + .map(Pattern::pattern) + .collect(Collectors.joining(","))))); + } } - String superType = - node.getPropertyValue(PROPERTY_NAME_RESOURCE_SUPER_TYPE).orElse(null); - if (superType != null - && !allowedSuperTypePatterns.isEmpty() - && allowedSuperTypePatterns.stream() - .noneMatch(pattern -> pattern.matcher(superType).matches())) { - messages.add(new ValidationMessage( - severity, - String.format( - "Resource is using super type '%s' which is not allowed (does not match any of the allowed patterns [%s])", - superType, - allowedSuperTypePatterns.stream() - .map(Pattern::pattern) - .collect(Collectors.joining(","))))); + if (!allowedSuperTypePatterns.isEmpty()) { + String superType = + node.getPropertyValue(PROPERTY_NAME_RESOURCE_SUPER_TYPE).orElse(null); + if (superType != null + && allowedSuperTypePatterns.stream() + .noneMatch(pattern -> pattern.matcher(superType).matches())) { + messages.add(new ValidationMessage( + severity, + String.format( + "Resource is using super type '%s' which is not allowed (does not match any of the allowed patterns [%s])", + superType, + allowedSuperTypePatterns.stream() + .map(Pattern::pattern) + .collect(Collectors.joining(","))))); + } } return messages; }