You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by an...@apache.org on 2021/04/08 18:39:19 UTC

[sling-whiteboard] branch master updated: Fixed an issue with script resource resolver which I fixed by using our own System User Resource Resolver

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

andysch pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-whiteboard.git


The following commit(s) were added to refs/heads/master by this push:
     new ddd50a3  Fixed an issue with script resource resolver which I fixed by using our own System User Resource Resolver
ddd50a3 is described below

commit ddd50a32a83b581a29142aad3dec684c31bee4a6
Author: Andreas Schaefer <sc...@me.com>
AuthorDate: Thu Apr 8 11:39:03 2021 -0700

    Fixed an issue with script resource resolver which I fixed by using our own System User Resource Resolver
---
 .../api/DeclarativeDynamicResourceProvider.java    |  5 +-
 .../ddr/core/DeclarativeDynamicResourceImpl.java   |  5 +-
 .../DeclarativeDynamicResourceManagerService.java  |  2 +-
 .../DeclarativeDynamicResourceProviderHandler.java | 64 +++++++++++++---------
 ...g.jcr.repoinit.RepositoryInitializer-ddr.config |  1 +
 .../core/DeclarativeDynamicResourceImplTest.java   |  2 +-
 ...larativeDynamicResourceProviderHandlerTest.java |  6 +-
 7 files changed, 50 insertions(+), 35 deletions(-)

diff --git a/org.apache.sling.ddr/api/src/main/java/org/apache/sling/ddr/api/DeclarativeDynamicResourceProvider.java b/org.apache.sling.ddr/api/src/main/java/org/apache/sling/ddr/api/DeclarativeDynamicResourceProvider.java
index 1602c1e..727db82 100644
--- a/org.apache.sling.ddr/api/src/main/java/org/apache/sling/ddr/api/DeclarativeDynamicResourceProvider.java
+++ b/org.apache.sling.ddr/api/src/main/java/org/apache/sling/ddr/api/DeclarativeDynamicResourceProvider.java
@@ -16,6 +16,7 @@
  */
 package org.apache.sling.ddr.api;
 
+import org.apache.sling.api.resource.ResourceResolver;
 import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.osgi.framework.Bundle;
 
@@ -33,11 +34,11 @@ public interface DeclarativeDynamicResourceProvider {
      * @param bundle The Bundle where the Resource Provider is registered with
      * @param targetRootPath The Parent Path of the Dynamic Resources
      * @param providerRootPath The Source Folder of the Resources that provide the data
-     * @param resourceResolverFactory Resource Resolver Factory that allows to create new Synthetic Resources
+     * @param resourceResolver Resource Resolver to create new Synthetic Resources
      * @return
      */
     long registerService(
-        Bundle bundle, String targetRootPath, String providerRootPath, ResourceResolverFactory resourceResolverFactory,
+        Bundle bundle, String targetRootPath, String providerRootPath, ResourceResolver resourceResolver,
         DeclarativeDynamicResourceManager declarativeDynamicResourceManager,
         Map<String, List<String>> allowedDDRFilter, Map<String, List<String>> prohibitedDDRFilter, List<String> followedLinkNames
     );
diff --git a/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceImpl.java b/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceImpl.java
index 6151770..eec1248 100644
--- a/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceImpl.java
+++ b/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceImpl.java
@@ -48,12 +48,11 @@ public class DeclarativeDynamicResourceImpl
      * Creates a Resource that adds a Resource from a given location (source)
      * into a different location (target path)
      *
-     * @param resourceResolver Resource Resolver to be used here
      * @param source Resource that provides the data
      * @param targetPath Path of the new, dynamic location of the resource
      * @return The Synthetic Resource that will provide the Dynamic Resource
      */
-    public static DeclarativeDynamicResource createSyntheticFromResource(ResourceResolver resourceResolver, Resource source, String targetPath, boolean mark) {
+    public static DeclarativeDynamicResource createSyntheticFromResource(Resource source, String targetPath, boolean mark) {
         ValueMap properties = source.getValueMap();
         Map<String,String> parameters = new HashMap<>();
         String resourceSuperType = source.getResourceSuperType();
@@ -71,7 +70,7 @@ public class DeclarativeDynamicResourceImpl
         metadata.setResolutionPathInfo(targetPath);
         metadata.setCreationTime(System.currentTimeMillis());
         return new DeclarativeDynamicResourceImpl(
-            resourceResolver,
+            source.getResourceResolver(),
             metadata,
             source.getResourceType(),
             resourceSuperType
diff --git a/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceManagerService.java b/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceManagerService.java
index 1c8c9cd..e9cf0ad 100644
--- a/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceManagerService.java
+++ b/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceManagerService.java
@@ -203,7 +203,7 @@ public class DeclarativeDynamicResourceManagerService
                         DeclarativeDynamicResourceProviderHandler service = new DeclarativeDynamicResourceProviderHandler();
                         log.info("Dynamic Target: '{}', Dynamic Provider: '{}'", ddrTargetResource, ddrProvider);
                         long id = service.registerService(
-                            bundleContext.getBundle(), ddrTargetPath, ddrProvider.getPath(), resourceResolverFactory,
+                            bundleContext.getBundle(), ddrTargetPath, ddrProvider.getPath(), resourceResolver,
                             this,
                             allowedFilter, prohibitedFilter, followedLinkNames
                         );
diff --git a/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandler.java b/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandler.java
index 9f0f4a9..b0c4d2c 100644
--- a/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandler.java
+++ b/org.apache.sling.ddr/core/src/main/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandler.java
@@ -16,10 +16,8 @@
  */
 package org.apache.sling.ddr.core;
 
-import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
-import org.apache.sling.api.resource.ResourceResolverFactory;
 import org.apache.sling.api.resource.ValueMap;
 import org.apache.sling.ddr.api.DeclarativeDynamicResourceManager;
 import org.apache.sling.ddr.api.DeclarativeDynamicResourceProvider;
@@ -67,7 +65,7 @@ public class DeclarativeDynamicResourceProviderHandler
     private String targetRootPath;
     private String providerRootPath;
     private boolean active;
-    private ResourceResolverFactory resourceResolverFactory;
+    private ResourceResolver resourceResolver;
     private DeclarativeDynamicResourceManager declarativeDynamicResourceManager;
     private Map<String, List<String>> allowedDDRFilter;
     private Map<String, List<String>> prohibitedDDRFilter;
@@ -80,13 +78,13 @@ public class DeclarativeDynamicResourceProviderHandler
     //---------- Service Registration
 
     public long registerService(
-        Bundle bundle, String targetRootPath, String providerRootPath, ResourceResolverFactory resourceResolverFactory,
+        Bundle bundle, String targetRootPath, String providerRootPath, ResourceResolver resourceResolver,
         DeclarativeDynamicResourceManager declarativeDynamicResourceManager,
         Map<String, List<String>> allowedDDRFilter, Map<String, List<String>> prohibitedDDRFilter, List<String> followedLinkNames
     ) {
         this.targetRootPath = targetRootPath;
         this.providerRootPath = providerRootPath;
-        this.resourceResolverFactory = resourceResolverFactory;
+        this.resourceResolver = resourceResolver;
         this.declarativeDynamicResourceManager = declarativeDynamicResourceManager;
         this.allowedDDRFilter = allowedDDRFilter == null ? new HashMap<String, List<String>>(): allowedDDRFilter;
         this.prohibitedDDRFilter = prohibitedDDRFilter == null ? new HashMap<String, List<String>>(): prohibitedDDRFilter;
@@ -145,7 +143,7 @@ public class DeclarativeDynamicResourceProviderHandler
 
     @Override
     public Resource getResource(ResolveContext ctx, String path, ResourceContext resourceContext, Resource parent) {
-        ResourceResolver resourceResolver = ctx.getResourceResolver();
+        ResourceResolver contextResourceResolver = ctx.getResourceResolver();
         log.info("Get Resource, path: '{}', parent: '{}', provider root: '{}'", path, parent, providerRootPath);
         String resourcePath;
         if(path.startsWith(SLASH)) {
@@ -155,7 +153,7 @@ public class DeclarativeDynamicResourceProviderHandler
         }
         Resource answer = null;
         if(resourcePath.startsWith(providerRootPath)) {
-            answer = resourceResolver.getResource(resourcePath);
+            answer = getResource(contextResourceResolver, resourcePath);
         } else if(resourcePath.startsWith(targetRootPath)) {
             log.info("Before Getting Resource from Parent, path: '{}'", resourcePath);
             ResourceProvider parentResourceProvider = ctx.getParentResourceProvider();
@@ -174,25 +172,29 @@ public class DeclarativeDynamicResourceProviderHandler
                         int index = resourcePath.lastIndexOf('/');
                         if (index > 0 && index < resourcePath.length() - 1) {
                             String parentPath = resourcePath.substring(0, index);
-                            obtainChildren(resourceResolver, parentPath, false);
+                            obtainChildren(contextResourceResolver, parentPath, false);
                             mappedPath = mappings.get(resourcePath);
                         }
                     }
                     if (mappedPath != null) {
-                        Resource source = resourceResolver.getResource(mappedPath.getReference());
+                        Resource source = getResource(
+                            contextResourceResolver, mappedPath.isRef() ?
+                                mappedPath.getReference():
+                                mappedPath.getSource()
+                        );
                         int index = resourcePath.lastIndexOf('/');
                         String parentPath = "";
                         if (index > 0 && index < resourcePath.length() - 1) {
                             parentPath = resourcePath.substring(0, index);
                         }
                         answer = createSyntheticFromResource(
-                            resourceResolver, source, resourcePath, parentPath.equals(targetRootPath)
+                            source, resourcePath, parentPath.equals(targetRootPath)
                         );
                     }
                 }
             }
         } else {
-            answer = resourceResolver.getResource(resourcePath);
+            answer = getResource(contextResourceResolver, resourcePath);
         }
         log.info("Return resource: '{}'", answer);
         return answer;
@@ -203,7 +205,7 @@ public class DeclarativeDynamicResourceProviderHandler
         Iterator<Resource> answer = null;
         log.info("List Children, resolve-context: '{}', parent: '{}'", ctx, parent);
         String resourcePath = parent.getPath();
-        ResourceResolver resourceResolver = ctx.getResourceResolver();
+        ResourceResolver contextResourceResolver = ctx.getResourceResolver();
         if(resourcePath.equals(providerRootPath)) {
             // Handle the Source / Provider Path -> no DDRs here
             answer = parent.listChildren();
@@ -228,19 +230,18 @@ public class DeclarativeDynamicResourceProviderHandler
                 log.info("Resource Path: '{}', Children List: '{}'", resourcePath, childrenList);
                 if (childrenList != null) {
                     for (Reference childPath : childrenList) {
-                        Resource child = resourceResolver.getResource(childPath.getReference());
+                        Resource child = getResource(contextResourceResolver, childPath.getReference());
                         int index = childPath.getSource().lastIndexOf('/');
                         String childName = childPath.getSource().substring(index);
                         items.add(
                             createSyntheticFromResource(
-                                resourceResolver, child,
-                                resourcePath + childName,
+                                child, resourcePath + childName,
                                 resourcePath.equals(targetRootPath)
                             )
                         );
                     }
                 } else {
-                    items = obtainChildren(resourceResolver, resourcePath, true);
+                    items = obtainChildren(contextResourceResolver, resourcePath, true);
                 }
             }
             answer = items.iterator();
@@ -298,7 +299,7 @@ public class DeclarativeDynamicResourceProviderHandler
         return true;
     }
 
-    private List<Resource> obtainChildren(ResourceResolver resourceResolver, String resourcePath, boolean returnChildren) {
+    private List<Resource> obtainChildren(ResourceResolver contextResourceResolver, String resourcePath, boolean returnChildren) {
         List<Resource> answer = new ArrayList<>();
         String postfix = resourcePath.substring(targetRootPath.length());
         if (!postfix.isEmpty() && postfix.charAt(0) == '/') {
@@ -308,10 +309,13 @@ public class DeclarativeDynamicResourceProviderHandler
         childrenMappings.put(resourcePath, childrenList);
         String targetPath = providerRootPath + SLASH + postfix;
         Reference ref = mappings.get(resourcePath);
-        Resource provider = ref == null || !ref.isRef() ?
-            resourceResolver.getResource(targetPath) :
-            resourceResolver.getResource(ref.getReference());
-            ;
+        Resource provider =
+            getResource(
+                contextResourceResolver,
+                ref == null || !ref.isRef() ?
+                    targetPath:
+                    ref.getReference()
+            );
         log.info("Provider, Path: '{}', Resource: '{}'", targetPath, provider);
         if (provider != null) {
             Iterator<Resource> i = provider.listChildren();
@@ -329,7 +333,7 @@ public class DeclarativeDynamicResourceProviderHandler
                     for (String followedLinkName : followedLinkNames) {
                         referencePath = properties.get(followedLinkName, String.class);
                         if (referencePath != null && !referencePath.isEmpty()) {
-                            Resource reference = resourceResolver.getResource(referencePath);
+                            Resource reference = getResource(contextResourceResolver, referencePath);
                             if (reference != null && !reference.isResourceType(RESOURCE_TYPE_NON_EXISTING)) {
                                 log.info("Add Path: '{}' to children list", resourcePath);
                                 childrenList.add(new Reference(child.getPath(), referencePath));
@@ -339,7 +343,7 @@ public class DeclarativeDynamicResourceProviderHandler
                                 if(returnChildren) {
                                     answer.add(
                                         createSyntheticFromResource(
-                                            resourceResolver, reference,
+                                            reference,
                                             parentPath + SLASH + child.getName(),
                                             parentPath.equals(targetRootPath)
                                         )
@@ -366,8 +370,7 @@ public class DeclarativeDynamicResourceProviderHandler
                         if(returnChildren) {
                             answer.add(
                                 createSyntheticFromResource(
-                                    resourceResolver, child,
-                                    parentPath + SLASH + child.getName(),
+                                    child, parentPath + SLASH + child.getName(),
                                     parentPath.equals(targetRootPath)
                                 )
                             );
@@ -379,6 +382,17 @@ public class DeclarativeDynamicResourceProviderHandler
         return answer;
     }
 
+    private Resource getResource(ResourceResolver contextResourceResolver, String path) {
+        Resource answer = null;
+        if(contextResourceResolver != null) {
+            answer = contextResourceResolver.getResource(path);
+        }
+        if(answer == null) {
+            answer = resourceResolver.getResource(path);
+        }
+        return answer;
+    }
+
     private class Reference {
         private String source;
         private String reference;
diff --git a/org.apache.sling.ddr/core/src/main/resources/SLING-CONTENT/apps/ddr/config/org.apache.sling.jcr.repoinit.RepositoryInitializer-ddr.config b/org.apache.sling.ddr/core/src/main/resources/SLING-CONTENT/apps/ddr/config/org.apache.sling.jcr.repoinit.RepositoryInitializer-ddr.config
index 39a45b1..0f525bd 100644
--- a/org.apache.sling.ddr/core/src/main/resources/SLING-CONTENT/apps/ddr/config/org.apache.sling.jcr.repoinit.RepositoryInitializer-ddr.config
+++ b/org.apache.sling.ddr/core/src/main/resources/SLING-CONTENT/apps/ddr/config/org.apache.sling.jcr.repoinit.RepositoryInitializer-ddr.config
@@ -24,6 +24,7 @@ scripts=[\
     set ACL for ddr-serviceuser
         allow jcr:read on /
     end
+
 "\
 ]
 
diff --git a/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceImplTest.java b/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceImplTest.java
index 32cdb0e..b8f2e22 100644
--- a/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceImplTest.java
+++ b/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceImplTest.java
@@ -62,7 +62,7 @@ public class DeclarativeDynamicResourceImplTest {
             resourceResolver
         );
         DeclarativeDynamicResource declarativeDynamicResource = DeclarativeDynamicResourceImpl.createSyntheticFromResource(
-            resourceResolver, source, dynamicResourceRoot + "/" + resourceName, true
+            source, dynamicResourceRoot + "/" + resourceName, true
         );
         assertEquals("Wrong DD-Resource Name", resourceName, declarativeDynamicResource.getName());
         assertEquals("Wrong Resource Type", resourceType, declarativeDynamicResource.getResourceType());
diff --git a/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandlerTest.java b/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandlerTest.java
index 14e995d..d42ca9f 100644
--- a/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandlerTest.java
+++ b/org.apache.sling.ddr/core/src/test/java/org/apache/sling/ddr/core/DeclarativeDynamicResourceProviderHandlerTest.java
@@ -116,7 +116,7 @@ public class DeclarativeDynamicResourceProviderHandlerTest {
         Resource dynamicParent = resourceResolver.getResource(dynamicResourceRoot);
         declarativeDynamicResourceProviderHandler.registerService(
             context.bundleContext().getBundle(), dynamicResourceRoot, confResourceRoot,
-            resourceResolverFactory, null, null,
+            resourceResolver, null, null,
             new HashMap<String, List<String>>() {{
                 put("jcr:primaryType", Arrays.asList("nt:file"));
             }},
@@ -161,7 +161,7 @@ public class DeclarativeDynamicResourceProviderHandlerTest {
 
         declarativeDynamicResourceProviderHandler.registerService(
             context.bundleContext().getBundle(), dynamicResourceRoot, confResourceRoot,
-            resourceResolverFactory, null, null,
+            resourceResolver, null, null,
             new HashMap<String, List<String>>() {{
                 put("jcr:primaryType", Arrays.asList("nt:file", "nt:resource"));
             }},
@@ -205,7 +205,7 @@ public class DeclarativeDynamicResourceProviderHandlerTest {
 
         declarativeDynamicResourceProviderHandler.registerService(
             context.bundleContext().getBundle(), dynamicResourceRoot, confResourceRoot,
-            resourceResolverFactory, declarativeDynamicResourceManager,null, null,
+            resourceResolver, declarativeDynamicResourceManager,null, null,
             Arrays.asList("sling:ddrRef")
         );