Skip to content

Commit def484e

Browse files
committed
[SYNCOPE-1998] Fixing PropagationTaskCallable generation
1 parent b40a413 commit def484e

11 files changed

Lines changed: 81 additions & 23 deletions

File tree

‎client/idrepo/console/src/main/resources/org/apache/syncope/client/console/implementations/MyPropagationActions.groovy‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import org.apache.syncope.common.lib.to.OrgUnit
2222
import org.apache.syncope.common.lib.to.Provision
2323
import org.apache.syncope.core.persistence.api.entity.task.TaskExec
2424
import org.apache.syncope.core.provisioning.api.propagation.PropagationActions
25-
import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
25+
import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo
2626
import org.identityconnectors.framework.common.objects.ConnectorObject
2727

2828
class MyPropagationActions implements PropagationActions {

‎core/idm/logic/src/test/java/org/apache/syncope/core/logic/IdMLogicTestContext.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.apache.syncope.core.persistence.jpa.StartupDomainLoader;
3737
import org.apache.syncope.core.provisioning.api.ImplementationLookup;
3838
import org.apache.syncope.core.provisioning.java.ProvisioningContext;
39+
import org.apache.syncope.core.spring.security.AuthDataAccessor;
3940
import org.apache.syncope.core.spring.security.SecurityContext;
4041
import org.apache.syncope.core.workflow.java.WorkflowContext;
4142
import org.springframework.boot.logging.LoggingSystem;
@@ -105,4 +106,9 @@ public ServiceOps serviceOps() {
105106
public CacheManager cacheManager() {
106107
return Caching.getCachingProvider().getCacheManager();
107108
}
109+
110+
@Bean
111+
public AuthDataAccessor authDataAccessor() {
112+
return mock(AuthDataAccessor.class);
113+
}
108114
}

‎core/idrepo/logic/src/test/java/org/apache/syncope/core/logic/IdRepoLogicTestContext.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.apache.syncope.core.persistence.jpa.StartupDomainLoader;
3737
import org.apache.syncope.core.provisioning.api.ImplementationLookup;
3838
import org.apache.syncope.core.provisioning.java.ProvisioningContext;
39+
import org.apache.syncope.core.spring.security.AuthDataAccessor;
3940
import org.apache.syncope.core.spring.security.SecurityContext;
4041
import org.apache.syncope.core.workflow.java.WorkflowContext;
4142
import org.springframework.boot.logging.LoggingSystem;
@@ -104,4 +105,9 @@ public ServiceOps serviceOps() {
104105
public CacheManager cacheManager() {
105106
return Caching.getCachingProvider().getCacheManager();
106107
}
108+
109+
@Bean
110+
public AuthDataAccessor authDataAccessor() {
111+
return mock(AuthDataAccessor.class);
112+
}
107113
}

‎core/metrics-starter/src/main/java/org/apache/syncope/core/provisioning/java/propagation/InstrumentedPriorityPropagationTaskExecutor.java‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.apache.syncope.core.provisioning.api.propagation.PropagationTaskInfo;
3636
import org.apache.syncope.core.provisioning.java.pushpull.OutboundMatcher;
3737
import org.apache.syncope.core.provisioning.java.utils.ConnObjectUtils;
38+
import org.apache.syncope.core.spring.security.AuthDataAccessor;
3839
import org.springframework.context.ApplicationEventPublisher;
3940
import org.springframework.core.task.AsyncTaskExecutor;
4041

@@ -56,12 +57,13 @@ public InstrumentedPriorityPropagationTaskExecutor(
5657
final OutboundMatcher outboundMatcher,
5758
final PlainAttrValidationManager validator,
5859
final ApplicationEventPublisher publisher,
60+
final AuthDataAccessor authDataAccessor,
5961
final AsyncTaskExecutor taskExecutor,
6062
final MeterRegistry meterRegistry) {
6163

6264
super(connectorManager, connObjectUtils, taskDAO, resourceDAO, plainSchemaDAO, notificationManager,
6365
auditManager, taskDataBinder, anyUtilsFactory, taskUtilsFactory, outboundMatcher, validator, publisher,
64-
taskExecutor);
66+
authDataAccessor, taskExecutor);
6567
this.meterRegistry = meterRegistry;
6668
}
6769

‎core/metrics-starter/src/main/java/org/apache/syncope/core/starter/MetricsContext.java‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,7 @@ public PropagationTaskExecutor propagationTaskExecutor(
138138
final OutboundMatcher outboundMatcher,
139139
final PlainAttrValidationManager validator,
140140
final ApplicationEventPublisher publisher,
141+
final AuthDataAccessor authDataAccessor,
141142
final MeterRegistry meterRegistry) {
142143

143144
return new InstrumentedPriorityPropagationTaskExecutor(
@@ -154,6 +155,7 @@ public PropagationTaskExecutor propagationTaskExecutor(
154155
outboundMatcher,
155156
validator,
156157
publisher,
158+
authDataAccessor,
157159
propagationTaskExecutorAsyncExecutor,
158160
meterRegistry);
159161
}

‎core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultUserProvisioningManager.java‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public ProvisioningResult<UserUR> update(
115115
AnyTypeKind.USER,
116116
userUR.getKey(),
117117
Optional.ofNullable(userUR.getPassword()).map(PasswordPatch::getValue).orElse(null),
118-
userUR.getPassword() == null ? List.of() : userUR.getPassword().getResources(),
118+
Optional.ofNullable(userUR.getPassword()).map(PasswordPatch::getResources).orElseGet(() -> List.of()),
119119
null,
120120
Set.of());
121121

@@ -155,7 +155,7 @@ public ProvisioningResult<UserUR> update(
155155
AnyTypeKind.USER,
156156
userUR.getKey(),
157157
Optional.ofNullable(userUR.getPassword()).map(PasswordPatch::getValue).orElse(null),
158-
userUR.getPassword() == null ? List.of() : userUR.getPassword().getResources(),
158+
Optional.ofNullable(userUR.getPassword()).map(PasswordPatch::getResources).orElseGet(() -> List.of()),
159159
enabled,
160160
excludedResources);
161161

@@ -364,8 +364,8 @@ public List<PropagationStatus> deprovision(
364364
userDAO.findLinkedAccounts(key).stream().
365365
filter(account -> resources.contains(account.getResource().getKey())).
366366
forEach(account -> propByLinkedAccount.add(
367-
ResourceOperation.DELETE,
368-
Pair.of(account.getResource().getKey(), account.getConnObjectKeyValue())));
367+
ResourceOperation.DELETE,
368+
Pair.of(account.getResource().getKey(), account.getConnObjectKeyValue())));
369369

370370
List<PropagationTaskInfo> taskInfos = propagationManager.getDeleteTasks(
371371
AnyTypeKind.USER,

‎core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ProvisioningContext.java‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@
161161
import org.apache.syncope.core.provisioning.java.pushpull.LiveSyncTaskSaver;
162162
import org.apache.syncope.core.provisioning.java.pushpull.OutboundMatcher;
163163
import org.apache.syncope.core.provisioning.java.utils.ConnObjectUtils;
164+
import org.apache.syncope.core.spring.security.AuthDataAccessor;
164165
import org.apache.syncope.core.spring.security.DefaultCredentialChecker;
165166
import org.apache.syncope.core.spring.security.PasswordGenerator;
166167
import org.apache.syncope.core.spring.security.SecurityProperties;
@@ -497,6 +498,7 @@ public PropagationTaskExecutor propagationTaskExecutor(
497498
final TaskDataBinder taskDataBinder,
498499
final OutboundMatcher outboundMatcher,
499500
final PlainAttrValidationManager validator,
501+
final AuthDataAccessor authDataAccessor,
500502
final ApplicationEventPublisher publisher) {
501503

502504
return new PriorityPropagationTaskExecutor(
@@ -513,6 +515,7 @@ public PropagationTaskExecutor propagationTaskExecutor(
513515
outboundMatcher,
514516
validator,
515517
publisher,
518+
authDataAccessor,
516519
propagationTaskExecutorAsyncExecutor);
517520
}
518521

‎core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java‎

Lines changed: 47 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import java.util.Comparator;
2424
import java.util.List;
2525
import java.util.Optional;
26+
import java.util.Set;
2627
import java.util.concurrent.Callable;
2728
import java.util.concurrent.CompletionService;
2829
import java.util.concurrent.ExecutorCompletionService;
@@ -47,6 +48,8 @@
4748
import org.apache.syncope.core.provisioning.java.pushpull.OutboundMatcher;
4849
import org.apache.syncope.core.provisioning.java.utils.ConnObjectUtils;
4950
import org.apache.syncope.core.spring.security.AuthContextUtils;
51+
import org.apache.syncope.core.spring.security.AuthDataAccessor;
52+
import org.apache.syncope.core.spring.security.SyncopeGrantedAuthority;
5053
import org.springframework.context.ApplicationEventPublisher;
5154
import org.springframework.core.task.AsyncTaskExecutor;
5255

@@ -59,6 +62,8 @@
5962
*/
6063
public class PriorityPropagationTaskExecutor extends AbstractPropagationTaskExecutor {
6164

65+
protected final AuthDataAccessor authDataAccessor;
66+
6267
protected final AsyncTaskExecutor taskExecutor;
6368

6469
public PriorityPropagationTaskExecutor(
@@ -75,6 +80,7 @@ public PriorityPropagationTaskExecutor(
7580
final OutboundMatcher outboundMatcher,
7681
final PlainAttrValidationManager validator,
7782
final ApplicationEventPublisher publisher,
83+
final AuthDataAccessor authDataAccessor,
7884
final AsyncTaskExecutor taskExecutor) {
7985

8086
super(connectorManager,
@@ -90,33 +96,56 @@ public PriorityPropagationTaskExecutor(
9096
outboundMatcher,
9197
validator,
9298
publisher);
99+
this.authDataAccessor = authDataAccessor;
93100
this.taskExecutor = taskExecutor;
94101
}
95102

96103
/**
97-
* Creates new instances of {@link Callable} for usage with{@link java.util.concurrent.CompletionService}.
104+
* Creates new instances of {@link Callable} for synchronous invocation.
98105
*
99106
* @param taskInfo to be executed
100107
* @param reporter to report propagation execution status
101108
* @param executor user that triggered the propagation execution
102-
* @return new {@link Callable} instance for usage with {@link java.util.concurrent.CompletionService}
109+
* @return new {@link Callable} instance for synchronous invocation
103110
*/
104111
protected Callable<TaskExec<PropagationTask>> newPropagationTaskCallable(
105-
final PropagationTaskInfo taskInfo, final PropagationReporter reporter, final String executor) {
112+
final PropagationTaskInfo taskInfo,
113+
final PropagationReporter reporter,
114+
final String executor) {
106115

107-
return () -> AuthContextUtils.callAs(
108-
AuthContextUtils.getDomain(),
109-
executor,
110-
AuthContextUtils.getAuthorities(),
111-
() -> {
112-
LOG.debug("Execution started for {}", taskInfo);
116+
return () -> {
117+
LOG.debug("Execution started for {}", taskInfo);
113118

114-
TaskExec<PropagationTask> execution = this.execute(taskInfo, reporter, executor);
119+
TaskExec<PropagationTask> execution = this.execute(taskInfo, reporter, executor);
115120

116-
LOG.debug("Execution completed for {} with results {}", taskInfo, execution);
121+
LOG.debug("Execution completed for {} with results {}", taskInfo, execution);
117122

118-
return execution;
119-
});
123+
return execution;
124+
};
125+
}
126+
127+
/**
128+
* Creates new instances of {@link Callable} for usage with{@link CompletionService}.
129+
*
130+
* @param taskInfo to be executed
131+
* @param reporter to report propagation execution status
132+
* @param domain executor's domain
133+
* @param executor user that triggered the propagation execution
134+
* @param authorities executor's authorities
135+
* @return new {@link Callable} instance for usage with {@link CompletionService}
136+
*/
137+
protected Callable<TaskExec<PropagationTask>> newPropagationTaskCallable(
138+
final PropagationTaskInfo taskInfo,
139+
final PropagationReporter reporter,
140+
final String domain,
141+
final String executor,
142+
final Set<SyncopeGrantedAuthority> authorities) {
143+
144+
return () -> AuthContextUtils.callAs(
145+
domain,
146+
executor,
147+
authorities,
148+
newPropagationTaskCallable(taskInfo, reporter, executor));
120149
}
121150

122151
protected boolean failed(
@@ -173,8 +202,12 @@ public PropagationReporter execute(
173202
List<Future<TaskExec<PropagationTask>>> futures = new ArrayList<>();
174203

175204
concurrentTasks.forEach(taskInfo -> {
205+
String domain = AuthContextUtils.getDomain();
206+
Set<SyncopeGrantedAuthority> authorities = authDataAccessor.getAuthorities(executor, null);
207+
176208
try {
177-
futures.add(completionService.submit(newPropagationTaskCallable(taskInfo, reporter, executor)));
209+
futures.add(completionService.submit(
210+
newPropagationTaskCallable(taskInfo, reporter, domain, executor, authorities)));
178211

179212
if (nullPriorityAsync) {
180213
reporter.onSuccessOrNonPriorityResourceFailures(

‎core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/ProvisioningTestContext.java‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.apache.syncope.core.persistence.jpa.PersistenceContext;
3535
import org.apache.syncope.core.persistence.jpa.StartupDomainLoader;
3636
import org.apache.syncope.core.provisioning.api.ImplementationLookup;
37+
import org.apache.syncope.core.spring.security.AuthDataAccessor;
3738
import org.apache.syncope.core.spring.security.SecurityContext;
3839
import org.apache.syncope.core.workflow.java.WorkflowContext;
3940
import org.springframework.context.ConfigurableApplicationContext;
@@ -90,4 +91,9 @@ public ConfParamOps confParamOps() {
9091
public DomainOps domainOps(final DomainRegistry<JPADomain> domainRegistry) {
9192
return new DummyDomainOps(domainRegistry);
9293
}
94+
95+
@Bean
96+
public AuthDataAccessor authDataAccessor() {
97+
return mock(AuthDataAccessor.class);
98+
}
9399
}

‎src/main/asciidoc/getting-started/systemRequirements.adoc‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ Apache Syncope {docVersion} is verified with the following Jakarta EE containers
3838

3939
. https://tomcat.apache.org/download-10.cgi[Apache Tomcat 10^]
4040
. https://www.payara.fish/[Payara Server 6^]
41-
. https://www.wildfly.org/[Wildfly 40^]
41+
. https://www.wildfly.org/[Wildfly 41^]
4242

4343
=== Internal Storage
4444

0 commit comments

Comments
 (0)