From 37dea970d2b6e9acd1a8c564eb0f4b59935dfbdb Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Fri, 22 Nov 2024 17:59:25 +0200 Subject: [PATCH] Fix EventPublisherAuthConfiguration to run as system (#2099) Signed-off-by: Avgustin Marinov --- .../EventPublisherAutoConfiguration.java | 18 ++++---- .../amqp/AmqpMessageDispatcherService.java | 45 +++++++------------ 2 files changed, 27 insertions(+), 36 deletions(-) diff --git a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/repository/event/EventPublisherAutoConfiguration.java b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/repository/event/EventPublisherAutoConfiguration.java index 909976e15..17aa305bf 100644 --- a/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/repository/event/EventPublisherAutoConfiguration.java +++ b/hawkbit-autoconfigure/src/main/java/org/eclipse/hawkbit/autoconfigure/repository/event/EventPublisherAutoConfiguration.java @@ -17,7 +17,7 @@ import org.eclipse.hawkbit.event.BusProtoStuffMessageConverter; import org.eclipse.hawkbit.repository.event.ApplicationEventFilter; import org.eclipse.hawkbit.repository.event.remote.RemoteTenantAwareEvent; import org.eclipse.hawkbit.repository.model.helper.EventPublisherHolder; -import org.eclipse.hawkbit.tenancy.TenantAware; +import org.eclipse.hawkbit.security.SystemSecurityContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; @@ -53,9 +53,10 @@ public class EventPublisherAutoConfiguration { */ @Bean(name = AbstractApplicationContext.APPLICATION_EVENT_MULTICASTER_BEAN_NAME) ApplicationEventMulticaster applicationEventMulticaster( - @Qualifier("asyncExecutor") final Executor executor, final TenantAware tenantAware) { + @Qualifier("asyncExecutor") final Executor executor, + final SystemSecurityContext systemSecurityContext, final ApplicationEventFilter applicationEventFilter) { final SimpleApplicationEventMulticaster simpleApplicationEventMulticaster = new TenantAwareApplicationEventPublisher( - tenantAware, applicationEventFilter()); + systemSecurityContext, applicationEventFilter); simpleApplicationEventMulticaster.setTaskExecutor(executor); return simpleApplicationEventMulticaster; } @@ -82,14 +83,15 @@ public class EventPublisherAutoConfiguration { private static class TenantAwareApplicationEventPublisher extends SimpleApplicationEventMulticaster { - private final TenantAware tenantAware; + private final SystemSecurityContext systemSecurityContext; private final ApplicationEventFilter applicationEventFilter; @Autowired(required = false) private ServiceMatcher serviceMatcher; - protected TenantAwareApplicationEventPublisher(final TenantAware tenantAware, final ApplicationEventFilter applicationEventFilter) { - this.tenantAware = tenantAware; + protected TenantAwareApplicationEventPublisher( + final SystemSecurityContext systemSecurityContext, final ApplicationEventFilter applicationEventFilter) { + this.systemSecurityContext = systemSecurityContext; this.applicationEventFilter = applicationEventFilter; } @@ -112,10 +114,10 @@ public class EventPublisherAutoConfiguration { return; } - tenantAware.runAsTenant(remoteEvent.getTenant(), () -> { + systemSecurityContext.runAsSystemAsTenant(() -> { super.multicastEvent(event, eventType); return null; - }); + }, remoteEvent.getTenant()); } } diff --git a/hawkbit-dmf/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java b/hawkbit-dmf/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java index 89caf018c..90e342190 100644 --- a/hawkbit-dmf/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java +++ b/hawkbit-dmf/hawkbit-dmf-amqp/src/main/java/org/eclipse/hawkbit/amqp/AmqpMessageDispatcherService.java @@ -153,17 +153,13 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { return; } - systemSecurityContext.runAsSystemAsTenant(() -> { - final List filteredTargetList = getTargetsWithoutPendingCancellations( - assignedEvent.getTenant(), assignedEvent.getActions().keySet()); + final List filteredTargetList = getTargetsWithoutPendingCancellations( + assignedEvent.getTenant(), assignedEvent.getActions().keySet()); - if (!filteredTargetList.isEmpty()) { - log.debug("targetAssignDistributionSet retrieved. I will forward it to DMF broker."); - sendUpdateMessageToTargets(assignedEvent.getDistributionSetId(), assignedEvent.getActions(), filteredTargetList); - } - - return null; - }, assignedEvent.getTenant()); + if (!filteredTargetList.isEmpty()) { + log.debug("targetAssignDistributionSet retrieved. I will forward it to DMF broker."); + sendUpdateMessageToTargets(assignedEvent.getDistributionSetId(), assignedEvent.getActions(), filteredTargetList); + } } /** @@ -177,11 +173,8 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { return; } - systemSecurityContext.runAsSystemAsTenant(() -> { - log.debug("MultiActionEvent received for {}", multiActionEvent.getControllerIds()); - sendMultiActionRequestMessages(multiActionEvent.getTenant(), multiActionEvent.getControllerIds()); - return null; - }, multiActionEvent.getTenant()); + log.debug("MultiActionEvent received for {}", multiActionEvent.getControllerIds()); + sendMultiActionRequestMessages(multiActionEvent.getTenant(), multiActionEvent.getControllerIds()); } protected void sendUpdateMessageToTarget( @@ -238,20 +231,16 @@ public class AmqpMessageDispatcherService extends BaseAmqpService { return; } - systemSecurityContext.runAsSystemAsTenant(() -> { - final List eventTargets = partitionedParallelExecution( - cancelEvent.getActions().keySet(), targetManagement::getByControllerID); + final List eventTargets = partitionedParallelExecution( + cancelEvent.getActions().keySet(), targetManagement::getByControllerID); - eventTargets.forEach(target -> - cancelEvent.getActionPropertiesForController(target.getControllerId()) - .map(ActionProperties::getId) - .ifPresent(actionId -> - sendCancelMessageToTarget(cancelEvent.getTenant(), target.getControllerId(), actionId, target.getAddress()) - ) - ); - - return null; - }, cancelEvent.getTenant()); + eventTargets.forEach(target -> + cancelEvent.getActionPropertiesForController(target.getControllerId()) + .map(ActionProperties::getId) + .ifPresent(actionId -> + sendCancelMessageToTarget(cancelEvent.getTenant(), target.getControllerId(), actionId, target.getAddress()) + ) + ); } /**