You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 10:12:02 UTC

[sling-org-apache-sling-scripting-sightly-js-provider] 02/04: SLING-6156 - The JsUseProvider should use the sling-scripting service user for solving scripting dependencies

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

rombert pushed a commit to annotated tag org.apache.sling.scripting.sightly.js.provider-1.0.16
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-scripting-sightly-js-provider.git

commit d0b8c1502c3b0386b0dfe767209977aa0df6e6a3
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Mon Oct 17 11:26:47 2016 +0000

    SLING-6156 - The JsUseProvider should use the sling-scripting service user for solving scripting dependencies
    
    * switched to using a service user for solving dependencies
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/scripting/sightly/js-use-provider@1765242 13f79535-47bb-0310-9956-ffa450edef68
---
 .../scripting/sightly/js/impl/JsUseProvider.java   | 26 +++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsUseProvider.java b/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsUseProvider.java
index 0e17a7b..f80471c 100644
--- a/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsUseProvider.java
+++ b/src/main/java/org/apache/sling/scripting/sightly/js/impl/JsUseProvider.java
@@ -18,11 +18,16 @@
  ******************************************************************************/
 package org.apache.sling.scripting.sightly.js.impl;
 
+import java.util.HashMap;
+import java.util.Map;
 import javax.script.Bindings;
 import javax.script.ScriptEngine;
 import javax.script.ScriptEngineManager;
 
+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.scripting.SlingScriptHelper;
 import org.apache.sling.scripting.sightly.SightlyException;
 import org.apache.sling.scripting.sightly.js.impl.async.AsyncContainer;
@@ -38,6 +43,8 @@ import org.osgi.service.component.annotations.Reference;
 import org.osgi.service.metatype.annotations.AttributeDefinition;
 import org.osgi.service.metatype.annotations.Designate;
 import org.osgi.service.metatype.annotations.ObjectClassDefinition;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Use provider for JavaScript Use-API objects.
@@ -69,8 +76,10 @@ public class JsUseProvider implements UseProvider {
 
     }
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(JsUseProvider.class);
     private static final String JS_ENGINE_NAME = "javascript";
     private static final JsValueAdapter jsValueAdapter = new JsValueAdapter(new AsyncExtractor());
+    private static final String SLING_SCRIPTING_USER = "sling-scripting";
 
     @Reference
     private ScriptEngineManager scriptEngineManager = null;
@@ -78,6 +87,9 @@ public class JsUseProvider implements UseProvider {
     @Reference
     private ProxyAsyncScriptableFactory proxyAsyncScriptableFactory = null;
 
+    @Reference
+    private ResourceResolverFactory rrf = null;
+
     @Override
     public ProviderOutcome provide(String identifier, RenderContext renderContext, Bindings arguments) {
         Bindings globalBindings = renderContext.getBindings();
@@ -90,18 +102,30 @@ public class JsUseProvider implements UseProvider {
         }
         SlingScriptHelper scriptHelper = Utils.getHelper(globalBindings);
         JsEnvironment environment = null;
+        ResourceResolver slingScriptingResolver = null;
         try {
             environment = new JsEnvironment(jsEngine);
             environment.initialize();
-            Resource scriptResource = Utils.getScriptResource(scriptHelper.getScript().getScriptResource(), identifier, globalBindings);
+            Map<String, Object> authenticationInfo = new HashMap<String, Object>() {{
+                put(ResourceResolverFactory.SUBSERVICE, SLING_SCRIPTING_USER);
+            }};
+            slingScriptingResolver = rrf.getServiceResourceResolver(authenticationInfo);
+            Resource callerScript = slingScriptingResolver.getResource(scriptHelper.getScript().getScriptResource().getPath());
+            Resource scriptResource = Utils.getScriptResource(callerScript, identifier, globalBindings);
             globalBindings.put(ScriptEngine.FILENAME, scriptResource.getPath());
             proxyAsyncScriptableFactory.registerProxies(globalBindings);
             AsyncContainer asyncContainer = environment.runResource(scriptResource, globalBindings, arguments);
             return ProviderOutcome.success(jsValueAdapter.adapt(asyncContainer));
+        } catch (LoginException e) {
+            LOGGER.error("Cannot obtain a resource resolver backed by the " + SLING_SCRIPTING_USER + " service user.", e);
+            return ProviderOutcome.failure(e);
         } finally {
             if (environment != null) {
                 environment.cleanup();
             }
+            if (slingScriptingResolver != null) {
+                slingScriptingResolver.close();
+            }
         }
     }
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.