You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by mp...@apache.org on 2015/11/09 14:41:52 UTC
svn commit: r1713432 [1/2] - in /sling/trunk/contrib/extensions/distribution:
core/src/main/java/org/apache/sling/distribution/agent/impl/
core/src/main/java/org/apache/sling/distribution/packaging/impl/
core/src/main/java/org/apache/sling/distribution...
Author: mpetria
Date: Mon Nov 9 13:41:52 2015
New Revision: 1713432
URL: http://svn.apache.org/viewvc?rev=1713432&view=rev
Log:
SLING-5281: allow execution with calling user session
Added:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/util/impl/
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/util/impl/DistributionUtils.java
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/impersonate-publish/
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/impersonate-publish-reverse/
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/impersonate-publish-reverse/org.apache.sling.distribution.agent.impl.ReverseDistributionAgentFactory-impersonate-publish-reverse.json
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/impersonate-publish-reverse/org.apache.sling.distribution.trigger.impl.ScheduledDistributionTriggerFactory-impersonate-publish-reverse-scheduled.json
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/impersonate-publish/org.apache.sling.distribution.agent.impl.ForwardDistributionAgentFactory-impersonate-publish.json
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impersonate-reverse/
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impersonate-reverse/org.apache.sling.distribution.agent.impl.QueueDistributionAgentFactory-impersonate-reverse.json
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impersonate-reverse/org.apache.sling.distribution.packaging.impl.exporter.AgentDistributionPackageExporterFactory-impersonate-reverse.json
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/reverse/org.apache.sling.distribution.packaging.impl.exporter.AgentDistributionPackageExporterFactory-reverse.json
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install/org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-distributionAgentService.json
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/services.json
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/settings.json
Removed:
sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/org.apache.sling.distribution.packaging.impl.exporter.AgentDistributionPackageExporterFactory-reverse.json
Modified:
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/AbstractDistributionAgentFactory.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionTriggerServlet.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/DistributionRequestHandler.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/DistributionEventDistributeDistributionTrigger.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTrigger.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerFactory.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistedJcrEventDistributionTrigger.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistedJcrEventDistributionTriggerFactory.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTrigger.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java
sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTriggerFactory.java
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerTest.java
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/PersistingJcrEventDistributionTriggerTest.java
sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTriggerTest.java
sling/trunk/contrib/extensions/distribution/it/pom.xml
sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java
sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java
sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/ForwardDistributionTest.java
sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/ReverseDistributionTest.java
sling/trunk/contrib/extensions/distribution/sample/src/main/java/org/apache/sling/distribution/test/Init.java
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/AbstractDistributionAgentFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/AbstractDistributionAgentFactory.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/AbstractDistributionAgentFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/AbstractDistributionAgentFactory.java Mon Nov 9 13:41:52 2015
@@ -28,6 +28,7 @@ import org.apache.sling.commons.osgi.Pro
import org.apache.sling.distribution.agent.DistributionAgent;
import org.apache.sling.distribution.component.impl.DistributionComponentConstants;
import org.apache.sling.distribution.component.impl.DistributionComponentKind;
+import org.apache.sling.distribution.component.impl.SettingsUtils;
import org.apache.sling.distribution.log.DistributionLog;
import org.apache.sling.distribution.log.impl.DefaultDistributionLog;
import org.apache.sling.distribution.resources.impl.OsgiUtils;
@@ -70,7 +71,7 @@ public abstract class AbstractDistributi
Dictionary<String, Object> props = new Hashtable<String, Object>();
boolean enabled = PropertiesUtil.toBoolean(config.get(ENABLED), true);
- String triggersTarget = PropertiesUtil.toString(config.get(TRIGGERS_TARGET), null);
+ String triggersTarget = SettingsUtils.removeEmptyEntry(PropertiesUtil.toString(config.get(TRIGGERS_TARGET), null));
triggersEnabled = triggersTarget != null && triggersTarget.trim().length() > 0;
agentName = PropertiesUtil.toString(config.get(NAME), null);
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/agent/impl/SimpleDistributionAgent.java Mon Nov 9 13:41:52 2015
@@ -19,6 +19,7 @@
package org.apache.sling.distribution.agent.impl;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
@@ -46,11 +47,9 @@ import org.apache.sling.distribution.Dis
import org.apache.sling.distribution.impl.SimpleDistributionResponse;
import org.apache.sling.distribution.log.DistributionLog;
import org.apache.sling.distribution.log.impl.DefaultDistributionLog;
-import org.apache.sling.distribution.queue.impl.DistributionQueueUtils;
import org.apache.sling.distribution.serialization.DistributionPackage;
import org.apache.sling.distribution.packaging.DistributionPackageExporter;
import org.apache.sling.distribution.packaging.DistributionPackageImporter;
-import org.apache.sling.distribution.serialization.DistributionPackageInfo;
import org.apache.sling.distribution.packaging.impl.DistributionPackageUtils;
import org.apache.sling.distribution.queue.DistributionQueue;
import org.apache.sling.distribution.queue.DistributionQueueEntry;
@@ -70,6 +69,7 @@ import org.apache.sling.distribution.tri
* Basic implementation of a {@link org.apache.sling.distribution.agent.DistributionAgent}
*/
public class SimpleDistributionAgent implements DistributionAgent {
+ private final static String DEFAULT_AGENT_SERVICE = "defaultAgentService";
private final DistributionQueueProvider queueProvider;
@@ -91,6 +91,7 @@ public class SimpleDistributionAgent imp
private boolean active = false;
private final Set<String> processingQueues;
private final int retryAttempts;
+ private final boolean impersonateUser;
private final DefaultDistributionLog log;
private final DistributionRequestType[] allowedRequests;
private final String[] allowedRoots;
@@ -116,12 +117,12 @@ public class SimpleDistributionAgent imp
this.allowedRoots = allowedRoots;
this.processingQueues = processingQueues;
this.retryAttempts = retryAttempts;
+ this.impersonateUser = subServiceName == null;
// check configuration is valid
if (name == null
|| (queueProcessingEnabled && distributionPackageImporter == null)
|| distributionPackageExporter == null
- || subServiceName == null
|| distributionRequestAuthorizationStrategy == null
|| queueProvider == null
|| scheduleQueueStrategy == null
@@ -173,24 +174,24 @@ public class SimpleDistributionAgent imp
boolean silent = DistributionRequestType.PULL.equals(distributionRequest.getRequestType());
- log.info(silent, "starting request {}", distributionRequest);
+ String callingUser = resourceResolver.getUserID();
+
+ log.info(false, "starting request {} by user {}", distributionRequest, callingUser);
- agentResourceResolver = getAgentResourceResolver();
distributionRequestAuthorizationStrategy.checkPermission(resourceResolver, distributionRequest);
+ agentResourceResolver = getAgentResourceResolver(callingUser);
+
List<DistributionPackage> distributionPackages = exportPackages(agentResourceResolver, distributionRequest);
log.debug("exported packages {}", distributionPackages.size());
- DistributionResponse distributionResponse = scheduleImportPackages(distributionPackages);
+ DistributionResponse distributionResponse = scheduleImportPackages(distributionPackages, callingUser);
log.info(silent, "returning response {}", distributionResponse);
return distributionResponse;
- } catch (LoginException e) {
- log.error("Error executing distribution request {} {}", distributionRequest, e);
- throw new DistributionException(e);
} finally {
ungetAgentResourceResolver(agentResourceResolver);
}
@@ -202,6 +203,8 @@ public class SimpleDistributionAgent imp
}
private List<DistributionPackage> exportPackages(ResourceResolver agentResourceResolver, DistributionRequest distributionRequest) throws DistributionException {
+ log.info("exporting packages for user {}", agentResourceResolver != null ? agentResourceResolver.getUserID() : "dummy");
+
List<DistributionPackage> distributionPackages = distributionPackageExporter.exportPackages(agentResourceResolver, distributionRequest);
generatePackageEvent(DistributionEventTopics.AGENT_PACKAGE_CREATED);
@@ -209,21 +212,23 @@ public class SimpleDistributionAgent imp
return distributionPackages;
}
- private DistributionResponse scheduleImportPackages(List<DistributionPackage> distributionPackages) {
+ private DistributionResponse scheduleImportPackages(List<DistributionPackage> distributionPackages, String callingUser) {
List<DistributionResponse> distributionResponses = new LinkedList<DistributionResponse>();
for (DistributionPackage distributionPackage : distributionPackages) {
- Collection<SimpleDistributionResponse> distributionResponsesForPackage = scheduleImportPackage(distributionPackage);
+ Collection<SimpleDistributionResponse> distributionResponsesForPackage = scheduleImportPackage(distributionPackage, callingUser);
distributionResponses.addAll(distributionResponsesForPackage);
}
return distributionResponses.size() == 1 ? distributionResponses.get(0) : new CompositeDistributionResponse(distributionResponses);
}
- private Collection<SimpleDistributionResponse> scheduleImportPackage(DistributionPackage distributionPackage) {
+ private Collection<SimpleDistributionResponse> scheduleImportPackage(DistributionPackage distributionPackage, String callingUser) {
Collection<SimpleDistributionResponse> distributionResponses = new LinkedList<SimpleDistributionResponse>();
// dispatch the distribution package to the queue distribution handler
try {
+ distributionPackage.getInfo().put(DistributionPackageUtils.PACKAGE_INFO_PROPERTY_REQUEST_USER, callingUser);
+
Iterable<DistributionQueueItemStatus> states = scheduleQueueStrategy.add(distributionPackage, queueProvider);
for (DistributionQueueItemStatus state : states) {
DistributionRequestState requestState = getRequestStateFromQueueState(state.getItemState());
@@ -377,7 +382,8 @@ public class SimpleDistributionAgent imp
DistributionQueueItemStatus queueItemStatus = queueEntry.getStatus();
try {
- agentResourceResolver = getAgentResourceResolver();
+ String callingUser = queueItem.get(DistributionPackageUtils.PACKAGE_INFO_PROPERTY_REQUEST_USER, String.class);
+ agentResourceResolver = getAgentResourceResolver(callingUser);
distributionPackage = distributionPackageExporter.getPackage(agentResourceResolver, queueItem.getId());
@@ -398,9 +404,6 @@ public class SimpleDistributionAgent imp
success = true; // return success if package does not exist in order to clear the queue.
log.error("distribution package with id {} does not exist. the package will be skipped.", queueItem.getId());
}
-
- } catch (LoginException e) {
- log.info("cannot obtain resource resolver", e);
} finally {
ungetAgentResourceResolver(agentResourceResolver);
if (distributionPackage != null) {
@@ -439,14 +442,26 @@ public class SimpleDistributionAgent imp
return true;
}
- private ResourceResolver getAgentResourceResolver() throws LoginException {
+ private ResourceResolver getAgentResourceResolver(String user) throws DistributionException {
ResourceResolver resourceResolver;
- Map<String, Object> authenticationInfo = new HashMap<String, Object>();
- authenticationInfo.put(ResourceResolverFactory.SUBSERVICE, subServiceName);
- resourceResolver = resourceResolverFactory.getServiceResourceResolver(authenticationInfo);
+ try {
+ Map<String, Object> authenticationInfo = new HashMap<String, Object>();
+
+ if (impersonateUser && user != null) {
+ authenticationInfo.put(ResourceResolverFactory.SUBSERVICE, DEFAULT_AGENT_SERVICE);
+ authenticationInfo.put(ResourceResolverFactory.USER_IMPERSONATION, user);
+ } else {
+ authenticationInfo.put(ResourceResolverFactory.SUBSERVICE, subServiceName);
+ }
+
+ resourceResolver = resourceResolverFactory.getServiceResourceResolver(authenticationInfo);
+
+ return resourceResolver;
+ } catch (LoginException le) {
+ throw new DistributionException(le);
- return resourceResolver;
+ }
}
private void ungetAgentResourceResolver(ResourceResolver resourceResolver) {
@@ -540,22 +555,34 @@ public class SimpleDistributionAgent imp
this.agent = agent;
}
- public void handle(@Nonnull DistributionRequest request) {
+ public void handle(@Nullable ResourceResolver resourceResolver, @Nonnull DistributionRequest request) {
if (!active) {
log.warn("skipping agent handler as agent is disabled");
return;
}
- ResourceResolver agentResourceResolver = null;
- try {
- agentResourceResolver = getAgentResourceResolver();
- agent.execute(agentResourceResolver, request);
- } catch (Throwable e) {
- log.error("Error executing handler", e);
- } finally {
- ungetAgentResourceResolver(agentResourceResolver);
+
+ if (resourceResolver != null) {
+ try {
+ agent.execute(resourceResolver, request);
+ } catch (Throwable t) {
+ log.error("Error executing handler", t);
+ }
+ } else {
+ ResourceResolver agentResourceResolver = null;
+
+ try {
+ agentResourceResolver = getAgentResourceResolver(null);
+
+ agent.execute(agentResourceResolver, request);
+ } catch (Throwable e) {
+ log.error("Error executing handler", e);
+ } finally {
+ ungetAgentResourceResolver(agentResourceResolver);
+ }
}
+
}
}
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/packaging/impl/DistributionPackageUtils.java Mon Nov 9 13:41:52 2015
@@ -41,6 +41,12 @@ public class DistributionPackageUtils {
public static String PACKAGE_INFO_PROPERTY_ORIGIN_QUEUE = "internal.origin.queue";
/**
+ * distribution request user
+ */
+ public static String PACKAGE_INFO_PROPERTY_REQUEST_USER = "internal.request.user";
+
+
+ /**
* Acquires the package if it's a {@link SharedDistributionPackage}, via {@link SharedDistributionPackage#acquire(String)}
* @param distributionPackage a distribution package
* @param queueName the name of the queue in which the package should be acquired
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/serialization/impl/vlt/JcrVaultDistributionPackageBuilder.java Mon Nov 9 13:41:52 2015
@@ -106,7 +106,7 @@ public class JcrVaultDistributionPackage
WorkspaceFilter filter = VltUtils.createFilter(request, filters);
ExportOptions opts = VltUtils.getExportOptions(filter, packageRoots, packageGroup, packageName, VERSION);
- log.debug("assembling package {}", packageGroup + '/' + packageName + "-" + VERSION);
+ log.debug("assembling package {} user {}", packageGroup + '/' + packageName + "-" + VERSION, resourceResolver.getUserID());
vaultPackage = VltUtils.createPackage(packaging.getPackageManager(), session, opts, tempDirectory);
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionTriggerServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionTriggerServlet.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionTriggerServlet.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/servlet/DistributionTriggerServlet.java Mon Nov 9 13:41:52 2015
@@ -19,6 +19,7 @@
package org.apache.sling.distribution.servlet;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import javax.servlet.ServletException;
import java.io.IOException;
import java.io.PrintWriter;
@@ -27,6 +28,7 @@ import java.util.Arrays;
import org.apache.felix.scr.annotations.sling.SlingServlet;
import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
+import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.servlets.SlingAllMethodsServlet;
import org.apache.sling.distribution.DistributionRequest;
import org.apache.sling.distribution.DistributionException;
@@ -77,7 +79,7 @@ public class DistributionTriggerServlet
final PrintWriter writer = response.getWriter();
DistributionRequestHandler distributionRequestHandler = new DistributionRequestHandler() {
- public void handle(@Nonnull DistributionRequest request) {
+ public void handle(@Nullable ResourceResolver resourceResolver, @Nonnull DistributionRequest request) {
writeEvent(writer, request);
}
};
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/DistributionRequestHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/DistributionRequestHandler.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/DistributionRequestHandler.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/DistributionRequestHandler.java Mon Nov 9 13:41:52 2015
@@ -19,8 +19,10 @@
package org.apache.sling.distribution.trigger;
import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
import aQute.bnd.annotation.ConsumerType;
+import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.distribution.DistributionRequest;
/**
@@ -35,6 +37,6 @@ public interface DistributionRequestHand
*
* @param request a distribution request
*/
- void handle(@Nonnull DistributionRequest request);
+ void handle(@Nullable ResourceResolver resourceResolver, @Nonnull DistributionRequest request);
}
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/AbstractJcrEventTrigger.java Mon Nov 9 13:41:52 2015
@@ -32,6 +32,9 @@ import java.util.Set;
import java.util.TreeSet;
import java.util.concurrent.ConcurrentHashMap;
+import org.apache.sling.api.resource.LoginException;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.commons.scheduler.Scheduler;
import org.apache.sling.distribution.DistributionRequest;
import org.apache.sling.distribution.DistributionRequestType;
@@ -40,6 +43,7 @@ import org.apache.sling.distribution.Dis
import org.apache.sling.distribution.trigger.DistributionRequestHandler;
import org.apache.sling.distribution.trigger.DistributionTrigger;
import org.apache.sling.distribution.util.DistributionJcrUtils;
+import org.apache.sling.distribution.util.impl.DistributionUtils;
import org.apache.sling.jcr.api.SlingRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -59,12 +63,14 @@ public abstract class AbstractJcrEventTr
private final String serviceUser;
private final SlingRepository repository;
+ private final ResourceResolverFactory resolverFactory;
private Session cachedSession;
private final Scheduler scheduler;
- AbstractJcrEventTrigger(SlingRepository repository, Scheduler scheduler, String path, String serviceUser) {
+ AbstractJcrEventTrigger(SlingRepository repository, Scheduler scheduler, ResourceResolverFactory resolverFactory, String path, String serviceUser) {
+ this.resolverFactory = resolverFactory;
if (path == null || serviceUser == null) {
throw new IllegalArgumentException("path and service are required");
}
@@ -252,7 +258,19 @@ public abstract class AbstractJcrEventTr
public void run() {
for (DistributionRequest request : requestList) {
- requestHandler.handle(request);
+ if (serviceUser == null) {
+ requestHandler.handle(null, request);
+ } else {
+ ResourceResolver resourceResolver = null;
+ try {
+ resourceResolver = DistributionUtils.loginService(resolverFactory, serviceUser);
+ requestHandler.handle(resourceResolver, request);
+ } catch (LoginException le) {
+ log.error("cannot obtain resource resolver for {}", serviceUser);
+ } finally {
+ DistributionUtils.logout(resourceResolver);
+ }
+ }
}
}
}
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/DistributionEventDistributeDistributionTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/DistributionEventDistributeDistributionTrigger.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/DistributionEventDistributeDistributionTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/DistributionEventDistributeDistributionTrigger.java Mon Nov 9 13:41:52 2015
@@ -114,7 +114,7 @@ public class DistributionEventDistribute
log.info("triggering chain distribution from event {}", event);
DistributionRequestType action = DistributionRequestType.valueOf(String.valueOf(actionProperty));
- requestHandler.handle(new SimpleDistributionRequest(action, paths));
+ requestHandler.handle(null, new SimpleDistributionRequest(action, paths));
break;
}
}
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTrigger.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTrigger.java Mon Nov 9 13:41:52 2015
@@ -21,6 +21,7 @@ package org.apache.sling.distribution.tr
import javax.jcr.RepositoryException;
import javax.jcr.observation.Event;
+import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.commons.scheduler.Scheduler;
import org.apache.sling.distribution.DistributionRequest;
import org.apache.sling.distribution.DistributionRequestType;
@@ -39,8 +40,8 @@ public class JcrEventDistributionTrigger
private final Logger log = LoggerFactory.getLogger(this.getClass());
private final String[] ignoredPathsPatterns;
- public JcrEventDistributionTrigger(SlingRepository repository, Scheduler scheduler, String path, String serviceName, String[] ignoredPathsPatterns) {
- super(repository, scheduler, path, serviceName);
+ public JcrEventDistributionTrigger(SlingRepository repository, Scheduler scheduler, ResourceResolverFactory resolverFactory, String path, String serviceName, String[] ignoredPathsPatterns) {
+ super(repository, scheduler, resolverFactory, path, serviceName);
this.ignoredPathsPatterns = ignoredPathsPatterns;
}
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerFactory.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerFactory.java Mon Nov 9 13:41:52 2015
@@ -28,6 +28,7 @@ import org.apache.felix.scr.annotations.
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
+import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.commons.osgi.PropertiesUtil;
import org.apache.sling.commons.scheduler.Scheduler;
import org.apache.sling.distribution.component.impl.DistributionComponentConstants;
@@ -78,16 +79,19 @@ public class JcrEventDistributionTrigger
@Reference
private Scheduler scheduler;
+ @Reference
+ private ResourceResolverFactory resolverFactory;
+
@Activate
public void activate(BundleContext bundleContext, Map<String, Object> config) {
String path = PropertiesUtil.toString(config.get(PATH), null);
- String serviceName = PropertiesUtil.toString(config.get(SERVICE_NAME), null);
+ String serviceName = SettingsUtils.removeEmptyEntry(PropertiesUtil.toString(config.get(SERVICE_NAME), null));
String[] ignoredPathsPatterns = PropertiesUtil.toStringArray(config.get(IGNORED_PATHS_PATTERNS), null);
ignoredPathsPatterns = SettingsUtils.removeEmptyEntries(ignoredPathsPatterns);
- trigger = new JcrEventDistributionTrigger(repository, scheduler, path, serviceName, ignoredPathsPatterns);
+ trigger = new JcrEventDistributionTrigger(repository, scheduler, resolverFactory, path, serviceName, ignoredPathsPatterns);
trigger.enable();
}
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistedJcrEventDistributionTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistedJcrEventDistributionTrigger.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistedJcrEventDistributionTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistedJcrEventDistributionTrigger.java Mon Nov 9 13:41:52 2015
@@ -27,6 +27,8 @@ import java.util.Collection;
import java.util.Map;
import java.util.Set;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.commons.scheduler.Scheduler;
import org.apache.sling.distribution.DistributionRequest;
import org.apache.sling.distribution.DistributionRequestType;
@@ -48,8 +50,8 @@ public class PersistedJcrEventDistributi
private final String nuggetsPath;
- public PersistedJcrEventDistributionTrigger(SlingRepository repository, Scheduler scheduler, String path, String servicename, String nuggetsPath) {
- super(repository, scheduler, path, servicename);
+ public PersistedJcrEventDistributionTrigger(SlingRepository repository, Scheduler scheduler, ResourceResolverFactory resolverFactory, String path, String servicename, String nuggetsPath) {
+ super(repository, scheduler, resolverFactory, path, servicename);
this.nuggetsPath = nuggetsPath == null || nuggetsPath.length() == 0 ? DEFAULT_NUGGETS_PATH : nuggetsPath;
}
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistedJcrEventDistributionTriggerFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistedJcrEventDistributionTriggerFactory.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistedJcrEventDistributionTriggerFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/PersistedJcrEventDistributionTriggerFactory.java Mon Nov 9 13:41:52 2015
@@ -28,10 +28,12 @@ import org.apache.felix.scr.annotations.
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
+import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.commons.osgi.PropertiesUtil;
import org.apache.sling.commons.scheduler.Scheduler;
import org.apache.sling.distribution.component.impl.DistributionComponentConstants;
import org.apache.sling.distribution.DistributionException;
+import org.apache.sling.distribution.component.impl.SettingsUtils;
import org.apache.sling.distribution.trigger.DistributionRequestHandler;
import org.apache.sling.distribution.trigger.DistributionTrigger;
import org.apache.sling.jcr.api.SlingRepository;
@@ -78,15 +80,18 @@ public class PersistedJcrEventDistributi
@Reference
private Scheduler scheduler;
+ @Reference
+ private ResourceResolverFactory resolverFactory;
+
@Activate
public void activate(BundleContext bundleContext, Map<String, Object> config) {
String path = PropertiesUtil.toString(config.get(PATH), null);
- String serviceName = PropertiesUtil.toString(config.get(SERVICE_NAME), null);
+ String serviceName = SettingsUtils.removeEmptyEntry(PropertiesUtil.toString(config.get(SERVICE_NAME), null));
String nuggetsPath = PropertiesUtil.toString(config.get(NUGGETS_PATH), null);
- trigger = new PersistedJcrEventDistributionTrigger(repository, scheduler, path, serviceName, nuggetsPath);
+ trigger = new PersistedJcrEventDistributionTrigger(repository, scheduler, resolverFactory, path, serviceName, nuggetsPath);
trigger.enable();
}
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTrigger.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/RemoteEventDistributionTrigger.java Mon Nov 9 13:41:52 2015
@@ -126,7 +126,7 @@ public class RemoteEventDistributionTrig
// TODO : currently it always triggers pull request on /, should this be configurable?
DistributionRequest distributionRequest = new SimpleDistributionRequest(DistributionRequestType.PULL, "/");
- handler.handle(distributionRequest);
+ handler.handle(null, distributionRequest);
log.info("distribution request to agent {} sent ({} {})", new Object[]{
handler,
distributionRequest.getRequestType(),
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ResourceEventDistributionTrigger.java Mon Nov 9 13:41:52 2015
@@ -122,7 +122,7 @@ public class ResourceEventDistributionTr
Object pathProperty = event.getProperty("path");
if (pathProperty != null) {
String distributingPath = String.valueOf(pathProperty);
- requestHandler.handle(new SimpleDistributionRequest(action, distributingPath));
+ requestHandler.handle(null, new SimpleDistributionRequest(action, distributingPath));
}
}
}
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTrigger.java Mon Nov 9 13:41:52 2015
@@ -20,16 +20,23 @@ package org.apache.sling.distribution.tr
import javax.annotation.Nonnull;
import java.util.Collections;
+import java.util.HashMap;
import java.util.HashSet;
+import java.util.Map;
import java.util.Set;
+import org.apache.sling.api.resource.LoginException;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.commons.scheduler.ScheduleOptions;
import org.apache.sling.commons.scheduler.Scheduler;
import org.apache.sling.distribution.DistributionRequestType;
import org.apache.sling.distribution.SimpleDistributionRequest;
import org.apache.sling.distribution.DistributionException;
+import org.apache.sling.distribution.packaging.impl.DistributionPackageUtils;
import org.apache.sling.distribution.trigger.DistributionRequestHandler;
import org.apache.sling.distribution.trigger.DistributionTrigger;
+import org.apache.sling.distribution.util.impl.DistributionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -48,11 +55,15 @@ public class ScheduledDistributionTrigge
private final int secondsInterval;
private final Scheduler scheduler;
+ private final String serviceName;
+ private final ResourceResolverFactory resourceResolverFactory;
private Set<String> registeredJobs = Collections.synchronizedSet(new HashSet<String>());
- public ScheduledDistributionTrigger(String distributionActionName, String path, int secondsInterval, Scheduler scheduler) {
+ public ScheduledDistributionTrigger(String distributionActionName, String path, int secondsInterval, String serviceName, Scheduler scheduler, ResourceResolverFactory resourceResolverFactory) {
+ this.serviceName = serviceName;
+ this.resourceResolverFactory = resourceResolverFactory;
this.distributionAction = DistributionRequestType.fromName(distributionActionName);
this.path = path;
this.secondsInterval = secondsInterval;
@@ -122,7 +133,19 @@ public class ScheduledDistributionTrigge
public void run() {
log.debug("agent {}: scheduling {} distribution of {}", new Object[]{requestHandler, distributionAction, path});
- requestHandler.handle(new SimpleDistributionRequest(distributionAction, path));
+ if (serviceName == null) {
+ requestHandler.handle(null, new SimpleDistributionRequest(distributionAction, path));
+ } else {
+ ResourceResolver resourceResolver = null;
+ try {
+ resourceResolver = DistributionUtils.loginService(resourceResolverFactory, serviceName);
+ requestHandler.handle(resourceResolver, new SimpleDistributionRequest(distributionAction, path));
+ } catch (LoginException le) {
+ log.error("cannot obtain resource resolver for {}", serviceName);
+ } finally {
+ DistributionUtils.logout(resourceResolver);
+ }
+ }
}
}
Modified: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTriggerFactory.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTriggerFactory.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTriggerFactory.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTriggerFactory.java Mon Nov 9 13:41:52 2015
@@ -28,11 +28,14 @@ import org.apache.felix.scr.annotations.
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.Service;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.commons.osgi.PropertiesUtil;
import org.apache.sling.commons.scheduler.Scheduler;
import org.apache.sling.distribution.DistributionRequestType;
import org.apache.sling.distribution.component.impl.DistributionComponentConstants;
import org.apache.sling.distribution.DistributionException;
+import org.apache.sling.distribution.component.impl.SettingsUtils;
import org.apache.sling.distribution.trigger.DistributionRequestHandler;
import org.apache.sling.distribution.trigger.DistributionTrigger;
import org.apache.sling.jcr.api.SlingRepository;
@@ -69,11 +72,13 @@ public class ScheduledDistributionTrigge
@Property(label = "Interval in Seconds", description = "The number of seconds between executions")
public static final String SECONDS = "seconds";
+ @Property(label = "Service Name", description = "The name of the service used to trigger the distribution requests.")
+ public static final String SERVICE_NAME = "serviceName";
ScheduledDistributionTrigger trigger;
@Reference
- private SlingRepository repository;
+ private ResourceResolverFactory resolverFactory;
@Reference
private Scheduler scheduler;
@@ -84,8 +89,9 @@ public class ScheduledDistributionTrigge
String action = PropertiesUtil.toString(config.get(ACTION), DistributionRequestType.PULL.name());
String path = PropertiesUtil.toString(config.get(PATH), null);
int interval = PropertiesUtil.toInteger(config.get(SECONDS), 30);
+ String serviceName = SettingsUtils.removeEmptyEntry(PropertiesUtil.toString(config.get(SERVICE_NAME), null));
- trigger = new ScheduledDistributionTrigger(action, path, interval, scheduler);
+ trigger = new ScheduledDistributionTrigger(action, path, interval, serviceName, scheduler, resolverFactory);
}
@Deactivate
Added: sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/util/impl/DistributionUtils.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/util/impl/DistributionUtils.java?rev=1713432&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/util/impl/DistributionUtils.java (added)
+++ sling/trunk/contrib/extensions/distribution/core/src/main/java/org/apache/sling/distribution/util/impl/DistributionUtils.java Mon Nov 9 13:41:52 2015
@@ -0,0 +1,47 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.sling.distribution.util.impl;
+
+import org.apache.sling.api.resource.LoginException;
+import org.apache.sling.api.resource.ResourceResolver;
+import org.apache.sling.api.resource.ResourceResolverFactory;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class DistributionUtils {
+
+ public static ResourceResolver loginService(ResourceResolverFactory resolverFactory, String serviceName) throws LoginException {
+ Map<String, Object> authInfo = new HashMap<String, Object>();
+
+ authInfo.put(ResourceResolverFactory.SUBSERVICE, serviceName);
+
+ ResourceResolver resourceResolver = resolverFactory.getServiceResourceResolver(authInfo);
+
+ return resourceResolver;
+ }
+
+ public static void logout(ResourceResolver resourceResolver) {
+ if (resourceResolver != null) {
+ resourceResolver.close();
+ }
+ }
+}
Modified: sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerTest.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/JcrEventDistributionTriggerTest.java Mon Nov 9 13:41:52 2015
@@ -20,6 +20,7 @@ package org.apache.sling.distribution.tr
import javax.jcr.observation.Event;
+import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.commons.scheduler.Scheduler;
import org.apache.sling.distribution.DistributionRequest;
import org.apache.sling.jcr.api.SlingRepository;
@@ -39,10 +40,11 @@ public class JcrEventDistributionTrigger
public void testProcessEventWithoutPathProperty() throws Exception {
SlingRepository repository = mock(SlingRepository.class);
Scheduler scheduler = mock(Scheduler.class);
+ ResourceResolverFactory resolverFactory = mock(ResourceResolverFactory.class);
String path = "/some/path";
String serviceName = "serviceId";
- JcrEventDistributionTrigger jcrEventdistributionTrigger = new JcrEventDistributionTrigger(repository, scheduler, path, serviceName, null);
+ JcrEventDistributionTrigger jcrEventdistributionTrigger = new JcrEventDistributionTrigger(repository, scheduler, resolverFactory, path, serviceName, null);
Event event = mock(Event.class);
DistributionRequest distributionRequest = jcrEventdistributionTrigger.processEvent(event);
assertNull(distributionRequest);
@@ -52,10 +54,11 @@ public class JcrEventDistributionTrigger
public void testProcessEventWithPathProperty() throws Exception {
SlingRepository repository = mock(SlingRepository.class);
Scheduler scheduler = mock(Scheduler.class);
+ ResourceResolverFactory resolverFactory = mock(ResourceResolverFactory.class);
String path = "/some/path";
String serviceName = "serviceId";
- JcrEventDistributionTrigger jcrEventdistributionTrigger = new JcrEventDistributionTrigger(repository, scheduler, path, serviceName, null);
+ JcrEventDistributionTrigger jcrEventdistributionTrigger = new JcrEventDistributionTrigger(repository, scheduler, resolverFactory, path, serviceName, null);
Event event = mock(Event.class);
when(event.getPath()).thenReturn("/some/path/generating/event");
DistributionRequest distributionRequest = jcrEventdistributionTrigger.processEvent(event);
Modified: sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/PersistingJcrEventDistributionTriggerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/PersistingJcrEventDistributionTriggerTest.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/PersistingJcrEventDistributionTriggerTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/PersistingJcrEventDistributionTriggerTest.java Mon Nov 9 13:41:52 2015
@@ -24,6 +24,7 @@ import javax.jcr.Workspace;
import javax.jcr.observation.Event;
import javax.jcr.observation.ObservationManager;
+import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.commons.scheduler.Scheduler;
import org.apache.sling.distribution.DistributionRequest;
import org.apache.sling.distribution.trigger.DistributionRequestHandler;
@@ -51,11 +52,12 @@ public class PersistingJcrEventDistribut
when(session.nodeExists("/var/nuggets")).thenReturn(true);
SlingRepository repository = mock(SlingRepository.class);
Scheduler scheduler = mock(Scheduler.class);
+ ResourceResolverFactory resolverFactory = mock(ResourceResolverFactory.class);
when(repository.loginService(serviceName, null)).thenReturn(session);
String path = "/some/path";
String nuggetsPath = "/var/nuggets";
PersistedJcrEventDistributionTrigger persistingJcrEventdistributionTrigger = new PersistedJcrEventDistributionTrigger(
- repository, scheduler, path, serviceName, nuggetsPath);
+ repository, scheduler, resolverFactory, path, serviceName, nuggetsPath);
Event event = mock(Event.class);
DistributionRequest distributionRequest = persistingJcrEventdistributionTrigger.processEvent(event);
assertNull(distributionRequest);
@@ -77,11 +79,13 @@ public class PersistingJcrEventDistribut
when(session.getRootNode()).thenReturn(rootNode);
SlingRepository repository = mock(SlingRepository.class);
Scheduler scheduler = mock(Scheduler.class);
+ ResourceResolverFactory resolverFactory = mock(ResourceResolverFactory.class);
+
when(repository.loginService(serviceName, null)).thenReturn(session);
String path = "/some/path";
String nuggetsPath = "/var/nuggets";
PersistedJcrEventDistributionTrigger persistingJcrEventdistributionTrigger = new PersistedJcrEventDistributionTrigger(
- repository, scheduler, path, serviceName, nuggetsPath);
+ repository, scheduler, resolverFactory, path, serviceName, nuggetsPath);
Event event = mock(Event.class);
DistributionRequest distributionRequest = persistingJcrEventdistributionTrigger.processEvent(event);
assertNull(distributionRequest);
@@ -101,12 +105,13 @@ public class PersistingJcrEventDistribut
SlingRepository repository = mock(SlingRepository.class);
Scheduler scheduler = mock(Scheduler.class);
+ ResourceResolverFactory resolverFactory = mock(ResourceResolverFactory.class);
when(repository.loginService(serviceName, null)).thenReturn(session);
String path = "/some/path";
PersistedJcrEventDistributionTrigger persistingJcrEventdistributionTrigger = new PersistedJcrEventDistributionTrigger(
- repository, scheduler, path, serviceName, nuggetsPath);
+ repository, scheduler, resolverFactory, path, serviceName, nuggetsPath);
DistributionRequestHandler handler = mock(DistributionRequestHandler.class);
persistingJcrEventdistributionTrigger.register(handler);
@@ -141,12 +146,14 @@ public class PersistingJcrEventDistribut
SlingRepository repository = mock(SlingRepository.class);
Scheduler scheduler = mock(Scheduler.class);
+ ResourceResolverFactory resolverFactory = mock(ResourceResolverFactory.class);
+
when(repository.loginService(serviceName, null)).thenReturn(session);
String path = "/some/path";
PersistedJcrEventDistributionTrigger persistingJcrEventdistributionTrigger = new PersistedJcrEventDistributionTrigger(
- repository, scheduler, path, serviceName, nuggetsPath);
+ repository, scheduler, resolverFactory, path, serviceName, nuggetsPath);
DistributionRequestHandler handler = mock(DistributionRequestHandler.class);
persistingJcrEventdistributionTrigger.register(handler);
Modified: sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTriggerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTriggerTest.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTriggerTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/core/src/test/java/org/apache/sling/distribution/trigger/impl/ScheduledDistributionTriggerTest.java Mon Nov 9 13:41:52 2015
@@ -18,6 +18,7 @@
*/
package org.apache.sling.distribution.trigger.impl;
+import org.apache.sling.api.resource.ResourceResolverFactory;
import org.apache.sling.commons.scheduler.ScheduleOptions;
import org.apache.sling.commons.scheduler.Scheduler;
import org.apache.sling.distribution.DistributionRequestType;
@@ -42,7 +43,7 @@ public class ScheduledDistributionTrigge
ScheduleOptions options = mock(ScheduleOptions.class);
when(scheduler.NOW(-1, interval)).thenReturn(options);
when(options.name(handler.toString())).thenReturn(options);
- ScheduledDistributionTrigger scheduleddistributionTrigger = new ScheduledDistributionTrigger(action.name(), path, interval, scheduler);
+ ScheduledDistributionTrigger scheduleddistributionTrigger = new ScheduledDistributionTrigger(action.name(), path, interval, null, scheduler, mock(ResourceResolverFactory.class));
scheduleddistributionTrigger.register(handler);
}
}
@@ -53,7 +54,7 @@ public class ScheduledDistributionTrigge
String path = "/path/to/somewhere";
int interval = 10;
Scheduler scheduler = mock(Scheduler.class);
- ScheduledDistributionTrigger scheduleddistributionTrigger = new ScheduledDistributionTrigger(action.name(), path, interval, scheduler);
+ ScheduledDistributionTrigger scheduleddistributionTrigger = new ScheduledDistributionTrigger(action.name(), path, interval, null, scheduler, mock(ResourceResolverFactory.class));
DistributionRequestHandler handlerId = mock(DistributionRequestHandler.class);
scheduleddistributionTrigger.unregister(handlerId);
}
Modified: sling/trunk/contrib/extensions/distribution/it/pom.xml
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/it/pom.xml?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/it/pom.xml (original)
+++ sling/trunk/contrib/extensions/distribution/it/pom.xml Mon Nov 9 13:41:52 2015
@@ -281,7 +281,8 @@
<sling.additional.bundle.1>httpcore-osgi</sling.additional.bundle.1>
<sling.additional.bundle.2>httpclient-osgi</sling.additional.bundle.2>
<sling.additional.bundle.30>org.apache.sling.jcr.resource</sling.additional.bundle.30>
- <sling.additional.bundle.3>org.apache.sling.discovery.impl</sling.additional.bundle.3>
+ <sling.additional.bundle.31>org.apache.sling.discovery.impl</sling.additional.bundle.31>
+ <sling.additional.bundle.32>org.apache.sling.serviceusermapper</sling.additional.bundle.32>
<sling.additional.bundle.4>org.apache.sling.hc.core</sling.additional.bundle.4>
<sling.additional.bundle.5>org.apache.jackrabbit.vault</sling.additional.bundle.5>
<sling.additional.bundle.6>org.apache.sling.distribution.api</sling.additional.bundle.6>
@@ -403,6 +404,11 @@
<version>2.7.2</version>
</dependency>
<dependency>
+ <groupId>org.apache.sling</groupId>
+ <artifactId>org.apache.sling.serviceusermapper</artifactId>
+ <version>1.2.0</version>
+ </dependency>
+ <dependency>
<groupId>javax.jcr</groupId>
<artifactId>jcr</artifactId>
<version>2.0</version>
Modified: sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java (original)
+++ sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionIntegrationTestBase.java Mon Nov 9 13:41:52 2015
@@ -62,22 +62,14 @@ public abstract class DistributionIntegr
try {
String remoteImporterUrl = publish.getServerBaseUrl() + importerUrl("default");
- String remoteExporterUrl = publish.getServerBaseUrl() + exporterUrl("reverse");
- {
- assertExists(authorClient, authorAgentConfigUrl("publish"));
-
- authorClient.setProperties(authorAgentConfigUrl("publish"),
- "packageImporter.endpoints", remoteImporterUrl);
-
-
- Thread.sleep(1000);
-
- assertExists(authorClient, agentUrl("publish"));
- }
+ registerPublish("publish", "default");
+ registerPublish("impersonate-publish", "default");
+ registerReverse("publish-reverse", "reverse");
+ registerReverse("impersonate-publish-reverse", "impersonate-reverse");
{
assertExists(authorClient, authorAgentConfigUrl("publish-multiple"));
@@ -102,18 +94,7 @@ public abstract class DistributionIntegr
assertExists(authorClient, agentUrl("publish-selective"));
}
- {
- assertExists(authorClient, authorAgentConfigUrl("publish-reverse"));
-
- authorClient.setProperties(authorAgentConfigUrl("publish-reverse"), "packageExporter.endpoints", remoteExporterUrl);
- Thread.sleep(1000);
- assertExists(authorClient, agentUrl("publish-reverse"));
-
- assertExists(publishClient, exporterUrl("reverse"));
- assertExists(publishClient, exporterUrl("default"));
- assertExists(publishClient, importerUrl("default"));
- }
} catch (Exception ex) {
throw new RuntimeException(ex);
@@ -134,5 +115,34 @@ public abstract class DistributionIntegr
assertEmptyFolder(author, authorClient, "/var/sling/distribution/packages/vlt/data");
assertEmptyFolder(publish, publishClient, "/etc/packages/sling/distribution");
}
-
+
+ public static void registerPublish(String publishAgent, String remoteImporter) throws Exception {
+ String remoteImporterUrl = publish.getServerBaseUrl() + importerUrl(remoteImporter);
+
+
+ assertExists(authorClient, authorAgentConfigUrl(publishAgent));
+
+ authorClient.setProperties(authorAgentConfigUrl(publishAgent),
+ "packageImporter.endpoints", remoteImporterUrl);
+
+
+ Thread.sleep(1000);
+
+ assertExists(authorClient, agentUrl(publishAgent));
+ assertExists(publishClient, importerUrl(remoteImporter));
+ }
+
+ public static void registerReverse(String reverseAgent, String remoteExporter) throws Exception {
+ String remoteExporterUrl = publish.getServerBaseUrl() + exporterUrl(remoteExporter);
+
+ assertExists(authorClient, authorAgentConfigUrl(reverseAgent));
+
+ authorClient.setProperties(authorAgentConfigUrl(reverseAgent), "packageExporter.endpoints", remoteExporterUrl);
+
+ Thread.sleep(1000);
+ assertExists(authorClient, agentUrl(reverseAgent));
+ assertExists(publishClient, exporterUrl(remoteExporter));
+ }
+
+
}
Modified: sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java (original)
+++ sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/DistributionUtils.java Mon Nov 9 13:41:52 2015
@@ -54,6 +54,9 @@ public class DistributionUtils {
private static final String JSON_SELECTOR = ".json";
private static final String DISTRIBUTION_ROOT_PATH = "/libs/sling/distribution";
+ private static final String DISTRIBUTOR_USER = "testDistributorUser";
+ private static final String DISTRIBUTOR_PASSWORD = "123";
+
public static JSONObject getResource(SlingInstance slingInstance, String path) throws IOException, JSONException {
if (!path.endsWith(JSON_SELECTOR)) {
@@ -90,7 +93,7 @@ public class DistributionUtils {
}
return slingInstance.getRequestExecutor().execute(
- request.withCredentials(slingInstance.getServerUsername(), slingInstance.getServerPassword())
+ request.withCredentials(DISTRIBUTOR_USER, DISTRIBUTOR_PASSWORD)
).assertStatus(status).getContent();
}
Modified: sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/ForwardDistributionTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/ForwardDistributionTest.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/ForwardDistributionTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/ForwardDistributionTest.java Mon Nov 9 13:41:52 2015
@@ -20,6 +20,11 @@ package org.apache.sling.distribution.it
import org.apache.sling.distribution.DistributionRequestType;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Arrays;
+import java.util.Collection;
import static org.apache.sling.distribution.it.DistributionUtils.assertExists;
import static org.apache.sling.distribution.it.DistributionUtils.assertNotExists;
@@ -30,13 +35,29 @@ import static org.apache.sling.distribut
/**
* Integration test for forward distribution
*/
+@RunWith(Parameterized.class)
public class ForwardDistributionTest extends DistributionIntegrationTestBase {
+ private final String publishAgent;
+
+ @Parameterized.Parameters
+ public static Collection<Object[]> generateData() {
+ return Arrays.asList(new Object[][] {
+ { "publish"},
+ { "impersonate-publish"},
+ });
+ }
+
+ public ForwardDistributionTest(String publishAgent) {
+
+ this.publishAgent = publishAgent;
+ }
+
@Test
public void testAddContent() throws Exception {
String nodePath = createRandomNode(authorClient, "/content/forward_add_" + System.nanoTime());
assertExists(authorClient, nodePath);
- distribute(author, "publish", DistributionRequestType.ADD, nodePath);
+ distribute(author, publishAgent, DistributionRequestType.ADD, nodePath);
assertExists(publishClient, nodePath);
}
@@ -44,7 +65,7 @@ public class ForwardDistributionTest ext
public void testTestContent() throws Exception {
String nodePath = createRandomNode(authorClient, "/content/forward_test_" + System.nanoTime());
assertExists(authorClient, nodePath);
- distribute(author, "publish", DistributionRequestType.TEST, nodePath);
+ distribute(author, publishAgent, DistributionRequestType.TEST, nodePath);
Thread.sleep(10000);
assertNotExists(publishClient, nodePath);
}
@@ -53,7 +74,7 @@ public class ForwardDistributionTest ext
public void testDeleteContent() throws Exception {
String nodePath = createRandomNode(publishClient, "/content/forward_del_" + System.nanoTime());
assertExists(publishClient, nodePath);
- distribute(author, "publish", DistributionRequestType.DELETE, nodePath);
+ distribute(author, publishAgent, DistributionRequestType.DELETE, nodePath);
assertNotExists(publishClient, nodePath);
}
@@ -66,7 +87,7 @@ public class ForwardDistributionTest ext
authorClient.createNode(childPath);
assertExists(authorClient, childPath);
- distribute(author, "publish", DistributionRequestType.ADD, nodePath);
+ distribute(author, publishAgent, DistributionRequestType.ADD, nodePath);
assertExists(publishClient, nodePath);
assertNotExists(publishClient, childPath);
}
@@ -80,7 +101,7 @@ public class ForwardDistributionTest ext
authorClient.createNode(childPath);
assertExists(authorClient, childPath);
- distributeDeep(author, "publish", DistributionRequestType.ADD, nodePath);
+ distributeDeep(author, publishAgent, DistributionRequestType.ADD, nodePath);
assertExists(publishClient, nodePath);
assertExists(publishClient, childPath);
}
@@ -98,7 +119,7 @@ public class ForwardDistributionTest ext
authorClient.createNode(excludedChildPath);
assertExists(authorClient, excludedChildPath);
- distributeDeep(author, "publish", DistributionRequestType.ADD, nodePath);
+ distributeDeep(author, publishAgent, DistributionRequestType.ADD, nodePath);
assertExists(publishClient, nodePath);
assertExists(publishClient, childPath);
assertNotExists(publishClient, excludedChildPath);
@@ -120,7 +141,7 @@ public class ForwardDistributionTest ext
publishClient.createNode(child2Path);
assertExists(publishClient, child2Path);
- distribute(author, "publish", DistributionRequestType.ADD, child1Path);
+ distribute(author, publishAgent, DistributionRequestType.ADD, child1Path);
assertExists(publishClient, child1Path);
assertExists(publishClient, child2Path);
@@ -141,7 +162,7 @@ public class ForwardDistributionTest ext
publishClient.createNode(child2Path);
assertExists(publishClient, child2Path);
- distributeDeep(author, "publish", DistributionRequestType.ADD, nodePath);
+ distributeDeep(author, publishAgent, DistributionRequestType.ADD, nodePath);
assertExists(publishClient, nodePath);
assertExists(publishClient, child1Path);
assertExists(publishClient, child2Path);
Modified: sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/ReverseDistributionTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/ReverseDistributionTest.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/ReverseDistributionTest.java (original)
+++ sling/trunk/contrib/extensions/distribution/it/src/test/java/org/apache/sling/distribution/it/ReverseDistributionTest.java Mon Nov 9 13:41:52 2015
@@ -20,6 +20,11 @@ package org.apache.sling.distribution.it
import org.apache.sling.distribution.DistributionRequestType;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+
+import java.util.Arrays;
+import java.util.Collection;
import static org.apache.sling.distribution.it.DistributionUtils.assertExists;
import static org.apache.sling.distribution.it.DistributionUtils.assertNotExists;
@@ -29,13 +34,31 @@ import static org.apache.sling.distribut
/**
* Integration test for reverse distribution
*/
+@RunWith(Parameterized.class)
public class ReverseDistributionTest extends DistributionIntegrationTestBase {
+
+ private final String reverseAgent;
+
+ @Parameterized.Parameters
+ public static Collection<Object[]> generateData() {
+ return Arrays.asList(new Object[][]{
+ {"reverse"},
+ {"impersonate-reverse"},
+ });
+ }
+
+ public ReverseDistributionTest(String reverseAgent) {
+
+ this.reverseAgent = reverseAgent;
+ }
+
+
@Test
public void testAddContent() throws Exception {
String nodePath = createRandomNode(publishClient, "/content/reverse_add_" + System.nanoTime());
assertExists(publishClient, nodePath);
- distribute(publish, "reverse", DistributionRequestType.ADD, nodePath);
+ distribute(publish, reverseAgent, DistributionRequestType.ADD, nodePath);
assertExists(authorClient, nodePath);
}
@@ -43,7 +66,7 @@ public class ReverseDistributionTest ext
public void testDeleteContent() throws Exception {
String nodePath = createRandomNode(authorClient, "/content/reverse_del_" + System.nanoTime());
assertExists(authorClient, nodePath);
- distribute(publish, "reverse", DistributionRequestType.DELETE, nodePath);
+ distribute(publish, reverseAgent, DistributionRequestType.DELETE, nodePath);
assertNotExists(authorClient, nodePath);
}
}
Modified: sling/trunk/contrib/extensions/distribution/sample/src/main/java/org/apache/sling/distribution/test/Init.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/java/org/apache/sling/distribution/test/Init.java?rev=1713432&r1=1713431&r2=1713432&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/java/org/apache/sling/distribution/test/Init.java (original)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/java/org/apache/sling/distribution/test/Init.java Mon Nov 9 13:41:52 2015
@@ -25,8 +25,11 @@ import org.apache.felix.scr.annotations.
import org.apache.felix.scr.annotations.Reference;
import org.apache.jackrabbit.api.JackrabbitSession;
import org.apache.jackrabbit.api.security.user.Authorizable;
+import org.apache.jackrabbit.api.security.user.User;
import org.apache.jackrabbit.api.security.user.UserManager;
import javax.jcr.security.Privilege;
+
+import org.apache.jackrabbit.commons.JcrUtils;
import org.apache.jackrabbit.commons.jackrabbit.authorization.AccessControlUtils;
import org.apache.sling.jcr.api.SlingRepository;
import org.slf4j.Logger;
@@ -48,41 +51,66 @@ public class Init {
public void activate() throws Exception {
try {
- final String userName = "testDistributionUser";
+ final String defaultAgentUserName = "distribution-agent-user";
+ final String serviceUserName = "testDistributionUser";
+ final String distributorUserName = "testDistributorUser";
+
Session session = slingRepository.loginAdministrative(null);
JackrabbitSession jackrabittSession = (JackrabbitSession) session;
UserManager userManager = jackrabittSession.getUserManager();
- Authorizable user = userManager.getAuthorizable(userName);
+ Authorizable serviceUser = userManager.getAuthorizable(serviceUserName);
- if (user == null) {
+ if (serviceUser == null) {
try {
- user = userManager.createSystemUser(userName, null);
- log.error("created system user", user);
+ serviceUser = userManager.createSystemUser(serviceUserName, null);
+ log.info("created system user {}", serviceUserName);
} catch (Throwable t) {
- user = userManager.createUser(userName, "123");
- log.error("created regular user", user);
-
+ serviceUser = userManager.createUser(serviceUserName, "123");
+ log.info("created regular user {}", serviceUserName);
}
}
- if (user != null) {
- AccessControlUtils.addAccessControlEntry(session, "/", user.getPrincipal(), new String[]{ Privilege.JCR_ALL }, true);
+ if (serviceUser != null) {
+ AccessControlUtils.addAccessControlEntry(session, "/var/sling/distribution/packages", serviceUser.getPrincipal(), new String[]{ Privilege.JCR_ALL }, true);
+ AccessControlUtils.addAccessControlEntry(session, "/content", serviceUser.getPrincipal(), new String[]{ Privilege.JCR_ALL }, true);
+ AccessControlUtils.addAccessControlEntry(session, null, serviceUser.getPrincipal(), new String[]{ Privilege.JCR_ALL }, true);
- AccessControlUtils.addAccessControlEntry(session, null, user.getPrincipal(), new String[]{ Privilege.JCR_ALL }, true);
+ }
- session.save();
+ Authorizable distributorUser = userManager.getAuthorizable(distributorUserName);
- session.logout();
+ if (distributorUser == null) {
+ distributorUser = userManager.createUser(distributorUserName, "123");
+ log.info("created regular user {}", distributorUserName);
}
- } catch (Throwable t) {
- log.error("cannot create user", t);
- }
+ JcrUtils.getOrCreateByPath("/content", "sling:Folder", session);
+ if (distributorUser != null) {
+ AccessControlUtils.addAccessControlEntry(session, "/var/sling/distribution/packages", distributorUser.getPrincipal(), new String[]{ Privilege.JCR_ALL }, true);
+ AccessControlUtils.addAccessControlEntry(session, "/content", distributorUser.getPrincipal(), new String[]{ Privilege.JCR_ALL }, true);
+ AccessControlUtils.addAccessControlEntry(session, "/libs/sling/distribution", distributorUser.getPrincipal(), new String[]{ Privilege.JCR_ALL }, true);
+ AccessControlUtils.addAccessControlEntry(session, null, distributorUser.getPrincipal(), new String[]{ Privilege.JCR_ALL }, true);
+ }
+
+ Authorizable defaultAgentUser = userManager.getAuthorizable(defaultAgentUserName);
+
+ if (defaultAgentUser == null) {
+ defaultAgentUser = userManager.createUser(defaultAgentUserName, "123");
+ log.info("created regular user {}", defaultAgentUserName);
+ ((User) distributorUser).getImpersonation().grantImpersonation(defaultAgentUser.getPrincipal());
+ ((User) serviceUser).getImpersonation().grantImpersonation(defaultAgentUser.getPrincipal());
+ }
+
+ session.save();
+ session.logout();
+ } catch (Throwable t) {
+ log.error("cannot create user", t);
+ }
}
Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/impersonate-publish-reverse/org.apache.sling.distribution.agent.impl.ReverseDistributionAgentFactory-impersonate-publish-reverse.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/impersonate-publish-reverse/org.apache.sling.distribution.agent.impl.ReverseDistributionAgentFactory-impersonate-publish-reverse.json?rev=1713432&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/impersonate-publish-reverse/org.apache.sling.distribution.agent.impl.ReverseDistributionAgentFactory-impersonate-publish-reverse.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/impersonate-publish-reverse/org.apache.sling.distribution.agent.impl.ReverseDistributionAgentFactory-impersonate-publish-reverse.json Mon Nov 9 13:41:52 2015
@@ -0,0 +1,17 @@
+{
+ "jcr:primaryType": "sling:OsgiConfig",
+
+ "name": "impersonate-publish-reverse",
+
+ "requestAuthorizationStrategy.target" : "(name=privilegeRead)",
+
+ "packageBuilder.target": "(name=vlt)",
+
+ "transportSecretProvider.target" : "(name=publishAdmin)",
+
+ "packageExporter.endpoints": [
+ "http://localhost:4503/libs/sling/distribution/services/exporters/impersonate-reverse"
+ ],
+
+ "triggers.target": "(name=impersonate-publish-reverse-scheduled)"
+}
\ No newline at end of file
Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/impersonate-publish-reverse/org.apache.sling.distribution.trigger.impl.ScheduledDistributionTriggerFactory-impersonate-publish-reverse-scheduled.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/impersonate-publish-reverse/org.apache.sling.distribution.trigger.impl.ScheduledDistributionTriggerFactory-impersonate-publish-reverse-scheduled.json?rev=1713432&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/impersonate-publish-reverse/org.apache.sling.distribution.trigger.impl.ScheduledDistributionTriggerFactory-impersonate-publish-reverse-scheduled.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/impersonate-publish-reverse/org.apache.sling.distribution.trigger.impl.ScheduledDistributionTriggerFactory-impersonate-publish-reverse-scheduled.json Mon Nov 9 13:41:52 2015
@@ -0,0 +1,9 @@
+{
+ "jcr:primaryType": "sling:OsgiConfig",
+
+ "name": "impersonate-publish-reverse-scheduled",
+ "action": "pull",
+ "seconds": "30",
+
+ "serviceName" : "distributionService"
+}
\ No newline at end of file
Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/impersonate-publish/org.apache.sling.distribution.agent.impl.ForwardDistributionAgentFactory-impersonate-publish.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/impersonate-publish/org.apache.sling.distribution.agent.impl.ForwardDistributionAgentFactory-impersonate-publish.json?rev=1713432&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/impersonate-publish/org.apache.sling.distribution.agent.impl.ForwardDistributionAgentFactory-impersonate-publish.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.author/impersonate-publish/org.apache.sling.distribution.agent.impl.ForwardDistributionAgentFactory-impersonate-publish.json Mon Nov 9 13:41:52 2015
@@ -0,0 +1,13 @@
+{
+ "jcr:primaryType": "sling:OsgiConfig",
+
+ "name": "impersonate-publish",
+
+ "packageBuilder.target": "(name=vlt)",
+
+ "transportSecretProvider.target" : "(name=publishAdmin)",
+
+ "packageImporter.endpoints": [
+ "http://localhost:4503/libs/sling/distribution/services/importers/default"
+ ]
+}
\ No newline at end of file
Added: sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impersonate-reverse/org.apache.sling.distribution.agent.impl.QueueDistributionAgentFactory-impersonate-reverse.json
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impersonate-reverse/org.apache.sling.distribution.agent.impl.QueueDistributionAgentFactory-impersonate-reverse.json?rev=1713432&view=auto
==============================================================================
--- sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impersonate-reverse/org.apache.sling.distribution.agent.impl.QueueDistributionAgentFactory-impersonate-reverse.json (added)
+++ sling/trunk/contrib/extensions/distribution/sample/src/main/resources/SLING-CONTENT/libs/sling/distribution/install.publish/impersonate-reverse/org.apache.sling.distribution.agent.impl.QueueDistributionAgentFactory-impersonate-reverse.json Mon Nov 9 13:41:52 2015
@@ -0,0 +1,13 @@
+{
+ "jcr:primaryType": "sling:OsgiConfig",
+ "name": "impersonate-reverse",
+
+ "serviceName" : "distributionService",
+
+ "requestAuthorizationStrategy.target" : "(name=privilegeRead)",
+
+ "packageBuilder.target" : "(name=vlt)",
+
+ "triggers.target": "(name=reverse-userGeneratedContent)"
+
+}
\ No newline at end of file