This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 4_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/4_1_X by this push:
new 9d2f338f38 Run Jobs and Reports as the calling User (#1495)
9d2f338f38 is described below
commit 9d2f338f3829e3dc804c04c50b25823ab542457c
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Mon Aug 17 18:55:31 2026 +0200
Run Jobs and Reports as the calling User (#1495)
---
.../org/apache/syncope/core/logic/GroupLogic.java | 6 ++-
.../org/apache/syncope/core/logic/MfaLogic.java | 25 +++++++----
.../apache/syncope/core/logic/ReportLogicTest.java | 4 +-
.../provisioning/api/job/JobExecutionContext.java | 51 ++++++----------------
.../java/job/AbstractSchedTaskJobDelegate.java | 10 ++---
.../provisioning/java/job/AfterHandlingJob.java | 6 +--
.../provisioning/java/job/DefaultJobManager.java | 16 +++----
.../java/job/ExpiredAccessTokenCleanup.java | 2 +-
.../provisioning/java/job/ExpiredBatchCleanup.java | 2 +-
.../job/GroupMemberProvisionTaskJobDelegate.java | 13 +++---
.../syncope/core/provisioning/java/job/Job.java | 14 +++---
.../core/provisioning/java/job/LiveSyncJob.java | 4 +-
.../provisioning/java/job/MacroJobDelegate.java | 18 ++++----
.../java/job/SyncopeTaskScheduler.java | 2 +-
.../core/provisioning/java/job/TaskJob.java | 25 ++++++++---
.../java/job/notification/NotificationJob.java | 5 +--
.../java/job/report/AbstractReportJobDelegate.java | 2 +-
.../provisioning/java/job/report/ReportJob.java | 30 ++++++++-----
.../PriorityPropagationTaskExecutor.java | 24 +++++-----
.../java/pushpull/AbstractPullExecutor.java | 2 +-
.../java/pushpull/LiveSyncJobDelegate.java | 31 ++++++-------
.../java/pushpull/PullJobDelegate.java | 35 +++++++--------
.../java/pushpull/PushJobDelegate.java | 11 ++---
.../java/job/SyncopeTaskSchedulerTest.java | 2 +-
.../core/spring/security/AuthContextUtils.java | 27 ++++++------
.../syncope/core/starter/actuate/JobEndpoint.java | 6 +--
.../java/job/ElasticsearchReindex.java | 2 +-
.../core/provisioning/java/job/OpenFGAReinit.java | 2 +-
.../provisioning/java/job/OpenSearchReindex.java | 2 +-
.../core/reference/SampleReportJobDelegate.java | 4 +-
.../fit/core/reference/TestSampleJobDelegate.java | 4 +-
31 files changed, 195 insertions(+), 192 deletions(-)
diff --git
a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
index c97cf15e0c..52123c7c62 100644
---
a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
+++
b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/GroupLogic.java
@@ -24,6 +24,7 @@ import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import java.util.Set;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.syncope.common.lib.SyncopeClientException;
@@ -397,12 +398,13 @@ public class GroupLogic extends AbstractAnyLogic<GroupTO,
GroupCR, GroupUR> impl
@Transactional
@Override
public ExecTO provisionMembers(final String key, final ProvisionAction
action) {
- Group group = groupDAO.findById(key).orElseThrow(() -> new
NotFoundException("Group " + key));
+ Group group = Optional.ofNullable(groupDAO.authFind(key)).
+ orElseThrow(() -> new NotFoundException("Group " + key));
Implementation jobDelegate = implementationDAO.findById(
GroupMemberProvisionTaskJobDelegate.class.getSimpleName()).
orElseThrow(() -> new NotFoundException(
- "Implementation " +
GroupMemberProvisionTaskJobDelegate.class.getSimpleName()));
+ "Implementation " +
GroupMemberProvisionTaskJobDelegate.class.getSimpleName()));
String name = (action == ProvisionAction.DEPROVISION ? "de" : "")
+ "provision members of group " + group.getName();
diff --git
a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/MfaLogic.java
b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/MfaLogic.java
index 85524cbb2c..1e03bf1344 100644
---
a/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/MfaLogic.java
+++
b/core/idrepo/logic/src/main/java/org/apache/syncope/core/logic/MfaLogic.java
@@ -32,6 +32,7 @@ import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.tuple.Pair;
import org.apache.syncope.common.keymaster.client.api.DomainOps;
import org.apache.syncope.common.keymaster.client.api.KeymasterException;
import org.apache.syncope.common.keymaster.client.api.model.Domain;
@@ -46,6 +47,7 @@ import org.apache.syncope.common.lib.types.MfaCheck;
import org.apache.syncope.core.persistence.api.EncryptorManager;
import org.apache.syncope.core.persistence.api.dao.NotFoundException;
import org.apache.syncope.core.persistence.api.dao.UserDAO;
+import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.persistence.api.utils.RealmUtils;
import org.apache.syncope.core.provisioning.api.data.UserDataBinder;
import org.apache.syncope.core.spring.security.AuthContextUtils;
@@ -195,19 +197,24 @@ public class MfaLogic extends AbstractLogic<EntityTO> {
@PreAuthorize("hasRole('" + IdRepoEntitlement.USER_UPDATE + "')")
public void dismiss(final String username) {
- String realm =
AuthContextUtils.callAsAdmin(AuthContextUtils.getDomain(),
- () -> userDAO.findByUsername(username).
- orElseThrow(() -> new NotFoundException("User " +
username)).
- getRealm().getFullPath());
+ Pair<String, String> data = AuthContextUtils.callAsAdmin(
+ AuthContextUtils.getDomain(),
+ () -> {
+ User user = userDAO.findByUsername(username).
+ orElseThrow(() -> new NotFoundException("User " +
username));
+ return Pair.of(user.getKey(),
user.getRealm().getFullPath());
+ });
Set<String> authRealms = RealmUtils.getEffective(
-
AuthContextUtils.getAuthorizations().get(IdRepoEntitlement.USER_UPDATE), realm);
+
AuthContextUtils.getAuthorizations().get(IdRepoEntitlement.USER_UPDATE),
data.getRight());
- AuthContextUtils.callAs(
+ AuthContextUtils.runAsAdmin(
AuthContextUtils.getDomain(),
- AuthContextUtils.getUsername(),
- authRealms,
- () -> userDAO.findKey(username)).orElseThrow(() -> new
NotFoundException("User " + username));
+ () -> userDAO.securityChecks(
+ authRealms,
+ data.getLeft(),
+ data.getRight(),
+ List.of()));
doDismiss(username);
}
diff --git
a/core/idrepo/logic/src/test/java/org/apache/syncope/core/logic/ReportLogicTest.java
b/core/idrepo/logic/src/test/java/org/apache/syncope/core/logic/ReportLogicTest.java
index ff9234a5f6..b11f276116 100644
---
a/core/idrepo/logic/src/test/java/org/apache/syncope/core/logic/ReportLogicTest.java
+++
b/core/idrepo/logic/src/test/java/org/apache/syncope/core/logic/ReportLogicTest.java
@@ -111,8 +111,8 @@ public class ReportLogicTest extends AbstractTest {
assertTrue(report.getExecutions().isEmpty());
JobExecutionContext ctx = mock(JobExecutionContext.class);
- when(ctx.getExecutor()).thenReturn("test");
- when(ctx.isDryRun()).thenReturn(false);
+ when(ctx.executor()).thenReturn("test");
+ when(ctx.dryRun()).thenReturn(false);
ReportJobDelegate delegate =
ApplicationContextProvider.getBeanFactory().createBean(TestReportJobDelegate.class);
diff --git
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/JobExecutionContext.java
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/JobExecutionContext.java
index f8af53230f..98478c2446 100644
---
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/JobExecutionContext.java
+++
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/job/JobExecutionContext.java
@@ -21,42 +21,19 @@ package org.apache.syncope.core.provisioning.api.job;
import java.util.HashMap;
import java.util.Map;
-public class JobExecutionContext {
-
- private final String domain;
-
- private final String jobName;
-
- private final String executor;
-
- private final boolean dryRun;
-
- private final Map<String, Object> data = new HashMap<>();
-
- public JobExecutionContext(final String domain, final String jobName,
final String executor, final boolean dryRun) {
- this.domain = domain;
- this.jobName = jobName;
- this.executor = executor;
- this.dryRun = dryRun;
- }
-
- public String getDomain() {
- return domain;
- }
-
- public String getJobName() {
- return jobName;
- }
-
- public String getExecutor() {
- return executor;
- }
-
- public boolean isDryRun() {
- return dryRun;
- }
-
- public Map<String, Object> getData() {
- return data;
+public record JobExecutionContext(
+ String domain,
+ String jobName,
+ String executor,
+ boolean dryRun,
+ Map<String, Object> data) {
+
+ public JobExecutionContext(
+ final String domain,
+ final String jobName,
+ final String executor,
+ final boolean dryRun) {
+
+ this(domain, jobName, executor, dryRun, new HashMap<>());
}
}
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AbstractSchedTaskJobDelegate.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AbstractSchedTaskJobDelegate.java
index 5028c59f07..138a577709 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AbstractSchedTaskJobDelegate.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AbstractSchedTaskJobDelegate.java
@@ -91,8 +91,6 @@ public abstract class AbstractSchedTaskJobDelegate<T extends
SchedTask> implemen
protected boolean manageOperationId;
- protected String executor;
-
protected void setStatus(final String status) {
publisher.publishEvent(new JobStatusEvent(
this, AuthContextUtils.getDomain(), JobNamer.getJobName(task),
status));
@@ -115,15 +113,13 @@ public abstract class AbstractSchedTaskJobDelegate<T
extends SchedTask> implemen
MDC.put(Job.OPERATION_ID,
SecureRandomUtils.generateRandomUUID().toString());
return true;
});
-
- executor = Optional.ofNullable(context.getExecutor()).orElseGet(() ->
securityProperties.getAdminUser());
}
protected TaskExec<SchedTask> initExecution() {
TaskExec<SchedTask> execution =
taskUtilsFactory.getInstance(taskType).newTaskExec();
execution.setStart(OffsetDateTime.now());
execution.setTask(task);
- execution.setExecutor(executor);
+ execution.setExecutor(AuthContextUtils.getUsername());
return execution;
}
@@ -144,7 +140,7 @@ public abstract class AbstractSchedTaskJobDelegate<T
extends SchedTask> implemen
task = taskDAO.save(task);
notificationManager.createTasks(
- executor,
+ AuthContextUtils.getUsername(),
OpEvent.CategoryType.TASK,
this.getClass().getSimpleName(),
null,
@@ -155,7 +151,7 @@ public abstract class AbstractSchedTaskJobDelegate<T
extends SchedTask> implemen
auditManager.audit(
AuthContextUtils.getDomain(),
- executor,
+ AuthContextUtils.getUsername(),
OpEvent.CategoryType.TASK,
task.getClass().getSimpleName(),
null,
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AfterHandlingJob.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AfterHandlingJob.java
index e9705396ef..9dbb640185 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AfterHandlingJob.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/AfterHandlingJob.java
@@ -50,7 +50,7 @@ public class AfterHandlingJob extends Job {
AfterHandlingJob.class.getSimpleName() + "_" +
SecureRandomUtils.generateRandomUUID(),
AuthContextUtils.getWho(),
false);
- context.getData().putAll(jobMap);
+ context.data().putAll(jobMap);
try {
AfterHandlingJob job =
ApplicationContextProvider.getBeanFactory().createBean(AfterHandlingJob.class);
@@ -75,14 +75,14 @@ public class AfterHandlingJob extends Job {
@Override
protected void execute(final JobExecutionContext context) throws
JobExecutionException {
Optional<AfterHandlingEvent> event = Optional.ofNullable(
-
context.getData().get(AfterHandlingEvent.JOBMAP_KEY)).map(AfterHandlingEvent.class::cast);
+
context.data().get(AfterHandlingEvent.JOBMAP_KEY)).map(AfterHandlingEvent.class::cast);
if (event.isEmpty()) {
LOG.debug("No event to process, aborting");
return;
}
try {
- AuthContextUtils.runAsAdmin(context.getDomain(), () -> {
+ AuthContextUtils.runAsAdmin(context.domain(), () -> {
notificationManager.createTasks(event.get());
auditManager.audit(event.get());
});
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/DefaultJobManager.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/DefaultJobManager.java
index 2dacb8e6dc..6602c88d19 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/DefaultJobManager.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/DefaultJobManager.java
@@ -118,8 +118,8 @@ public class DefaultJobManager implements JobManager,
SyncopeCoreLoader {
final String cronExpression,
final OffsetDateTime startAt) {
- if (isRunning(context.getJobName())) {
- LOG.debug("Job {} already running, cancel", context.getJobName());
+ if (isRunning(context.jobName())) {
+ LOG.debug("Job {} already running, cancel", context.jobName());
return;
}
@@ -176,10 +176,10 @@ public class DefaultJobManager implements JobManager,
SyncopeCoreLoader {
JobNamer.getJobName(task),
executor,
dryRun);
- context.getData().put(JobManager.TASK_TYPE, type);
- context.getData().put(JobManager.TASK_KEY, task.getKey());
- context.getData().put(JobManager.DELEGATE_IMPLEMENTATION,
jobDelegate.getKey());
- context.getData().putAll(jobData);
+ context.data().put(JobManager.TASK_TYPE, type);
+ context.data().put(JobManager.TASK_KEY, task.getKey());
+ context.data().put(JobManager.DELEGATE_IMPLEMENTATION,
jobDelegate.getKey());
+ context.data().putAll(jobData);
registerJob(
context,
@@ -239,8 +239,8 @@ public class DefaultJobManager implements JobManager,
SyncopeCoreLoader {
JobNamer.getJobName(report),
executor,
dryRun);
- context.getData().put(JobManager.REPORT_KEY, report.getKey());
- context.getData().put(JobManager.DELEGATE_IMPLEMENTATION,
report.getJobDelegate().getKey());
+ context.data().put(JobManager.REPORT_KEY, report.getKey());
+ context.data().put(JobManager.DELEGATE_IMPLEMENTATION,
report.getJobDelegate().getKey());
registerJob(
context,
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ExpiredAccessTokenCleanup.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ExpiredAccessTokenCleanup.java
index b93a508be7..600ce79ff0 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ExpiredAccessTokenCleanup.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ExpiredAccessTokenCleanup.java
@@ -31,7 +31,7 @@ public class ExpiredAccessTokenCleanup extends
AbstractSchedTaskJobDelegate<Sche
@Override
protected String doExecute(final JobExecutionContext context) {
- if (!context.isDryRun()) {
+ if (!context.dryRun()) {
int deleted = accessTokenDAO.deleteExpired(OffsetDateTime.now());
LOG.debug("Successfully deleted {} expired access tokens",
deleted);
}
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ExpiredBatchCleanup.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ExpiredBatchCleanup.java
index 44d8d652cf..669ddbfcb7 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ExpiredBatchCleanup.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ExpiredBatchCleanup.java
@@ -30,7 +30,7 @@ public class ExpiredBatchCleanup extends
AbstractSchedTaskJobDelegate<SchedTask>
@Override
protected String doExecute(final JobExecutionContext context) {
- if (!context.isDryRun()) {
+ if (!context.dryRun()) {
long deleted = batchDAO.deleteExpired();
LOG.debug("Successfully deleted {} expired batch requests",
deleted);
}
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/GroupMemberProvisionTaskJobDelegate.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/GroupMemberProvisionTaskJobDelegate.java
index 9d16216347..76b64f0d1a 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/GroupMemberProvisionTaskJobDelegate.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/GroupMemberProvisionTaskJobDelegate.java
@@ -42,6 +42,7 @@ import
org.apache.syncope.core.provisioning.api.UserProvisioningManager;
import org.apache.syncope.core.provisioning.api.job.JobExecutionContext;
import org.apache.syncope.core.provisioning.api.job.JobExecutionException;
import org.apache.syncope.core.provisioning.api.job.StoppableJobDelegate;
+import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
@@ -89,8 +90,8 @@ public class GroupMemberProvisionTaskJobDelegate
final JobExecutionContext context)
throws JobExecutionException {
- groupKey = (String) context.getData().get(GROUP_KEY_JOBDETAIL_KEY);
- action = (ProvisionAction) context.getData().get(ACTION_JOBDETAIL_KEY);
+ groupKey = (String) context.data().get(GROUP_KEY_JOBDETAIL_KEY);
+ action = (ProvisionAction) context.data().get(ACTION_JOBDETAIL_KEY);
super.execute(taskType, taskKey, context);
}
@@ -143,9 +144,9 @@ public class GroupMemberProvisionTaskJobDelegate
List<PropagationStatus> statuses = action ==
ProvisionAction.DEPROVISION
? userProvisioningManager.deprovision(
- user.getKey(), gResources, false, executor)
+ user.getKey(), gResources, false,
AuthContextUtils.getUsername())
: userProvisioningManager.provision(
- user.getKey(), true, null, gResources, false,
executor);
+ user.getKey(), true, null, gResources, false,
AuthContextUtils.getUsername());
for (PropagationStatus propagationStatus : statuses) {
result.append("User ").append(user.getKey()).append('\t').
append("Resource
").append(propagationStatus.getResource()).append('\t').
@@ -192,9 +193,9 @@ public class GroupMemberProvisionTaskJobDelegate
List<PropagationStatus> statuses = action ==
ProvisionAction.DEPROVISION
? anyObjectProvisioningManager.deprovision(
- anyObject.getKey(), gResources, false,
executor)
+ anyObject.getKey(), gResources, false,
AuthContextUtils.getUsername())
: anyObjectProvisioningManager.provision(
- anyObject.getKey(), gResources, false,
executor);
+ anyObject.getKey(), gResources, false,
AuthContextUtils.getUsername());
for (PropagationStatus propagationStatus : statuses) {
result.append(anyObject.getType().getKey()).append(' ').
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/Job.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/Job.java
index 8304df1dde..f45c8737d0 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/Job.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/Job.java
@@ -62,25 +62,25 @@ public abstract class Job implements Runnable {
boolean locked = false;
try {
- locked = AuthContextUtils.callAsAdmin(context.getDomain(), () ->
jobStatusDAO.lock(context.getJobName()));
+ locked = AuthContextUtils.callAsAdmin(context.domain(), () ->
jobStatusDAO.lock(context.jobName()));
} catch (Exception e) {
- LOG.debug("While attempting to lock job {}", context.getJobName(),
e);
+ LOG.debug("While attempting to lock job {}", context.jobName(), e);
}
if (!locked) {
- LOG.debug("Could not lock job {}, skipping execution",
context.getJobName());
+ LOG.debug("Could not lock job {}, skipping execution",
context.jobName());
return;
}
- LOG.debug("Job {} locked, starting execution", context.getJobName());
+ LOG.debug("Job {} locked, starting execution", context.jobName());
try {
execute(context);
} catch (JobExecutionException e) {
- LOG.error("While executing job {}", context.getJobName(), e);
+ LOG.error("While executing job {}", context.jobName(), e);
} finally {
- LOG.debug("Job {} execution completed", context.getJobName());
+ LOG.debug("Job {} execution completed", context.jobName());
- AuthContextUtils.runAsAdmin(context.getDomain(), () ->
jobStatusDAO.unlock(context.getJobName()));
+ AuthContextUtils.runAsAdmin(context.domain(), () ->
jobStatusDAO.unlock(context.jobName()));
}
}
}
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/LiveSyncJob.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/LiveSyncJob.java
index 5a64eda427..a0503ce2d2 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/LiveSyncJob.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/LiveSyncJob.java
@@ -44,12 +44,12 @@ public class LiveSyncJob extends TaskJob {
protected void delegate(final JobExecutionContext context, final String
taskKey)
throws ClassNotFoundException, JobExecutionException {
- String implKey = (String)
context.getData().get(JobManager.DELEGATE_IMPLEMENTATION);
+ String implKey = (String)
context.data().get(JobManager.DELEGATE_IMPLEMENTATION);
Implementation impl = implementationDAO.findById(implKey).orElse(null);
if (impl == null) {
LOG.error("Could not find Implementation '{}', aborting", implKey);
} else {
- delegate = ImplementationManager.build(context.getDomain(), impl);
+ delegate = ImplementationManager.build(context.domain(), impl);
delegate.execute(
TaskType.LIVE_SYNC,
taskKey,
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/MacroJobDelegate.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/MacroJobDelegate.java
index ba2e801c4f..427f8fc068 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/MacroJobDelegate.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/MacroJobDelegate.java
@@ -101,8 +101,8 @@ public class MacroJobDelegate extends
AbstractSchedTaskJobDelegate<MacroTask> im
Set<String> missingFormProperties =
task.getFormPropertyDefs().stream().
filter(FormPropertyDef::isRequired).
map(fpd -> Pair.of(
- fpd.getName(),
- macroTaskForm.getProperty(fpd.getName()).map(p -> p.getValue()
!= null))).
+ fpd.getName(),
+ macroTaskForm.getProperty(fpd.getName()).map(p ->
p.getValue() != null))).
filter(pair -> pair.getRight().isEmpty()).
map(Pair::getLeft).
collect(Collectors.toSet());
@@ -274,7 +274,7 @@ public class MacroJobDelegate extends
AbstractSchedTaskJobDelegate<MacroTask> im
} else {
try {
actions = Optional.of(ImplementationManager.build(
- context.getDomain(),
+ context.domain(),
task.getMacroActions(),
() ->
perContextActions.get(task.getMacroActions().getKey()),
instance ->
perContextActions.put(task.getMacroActions().getKey(), instance)));
@@ -285,19 +285,19 @@ public class MacroJobDelegate extends
AbstractSchedTaskJobDelegate<MacroTask> im
StringBuilder output = new StringBuilder();
- SyncopeForm macroTaskForm = (SyncopeForm)
context.getData().get(MACRO_TASK_FORM_JOBDETAIL_KEY);
+ SyncopeForm macroTaskForm = (SyncopeForm)
context.data().get(MACRO_TASK_FORM_JOBDETAIL_KEY);
Optional<JexlContext> jexlContext = check(macroTaskForm, actions,
output);
Map<String, Serializable> ctx = new HashMap<>();
- actions.filter(a -> !context.isDryRun()).ifPresent(a ->
a.beforeAll(ctx));
+ actions.filter(a -> !context.dryRun()).ifPresent(a ->
a.beforeAll(ctx));
List<Pair<Command<CommandArgs>, CommandArgs>> commands = new
ArrayList<>();
for (MacroTaskCommand command : task.getCommands()) {
Command<CommandArgs> runnable;
try {
runnable = (Command<CommandArgs>) ImplementationManager.build(
- context.getDomain(),
+ context.domain(),
command.getCommand(),
() ->
perContextCommands.get(command.getCommand().getKey()),
instance ->
perContextCommands.put(command.getCommand().getKey(), instance));
@@ -308,7 +308,7 @@ public class MacroJobDelegate extends
AbstractSchedTaskJobDelegate<MacroTask> im
CommandArgs args;
if (command.getArgs() == null) {
try {
- args =
ImplementationManager.emptyArgs(context.getDomain(), command.getCommand());
+ args = ImplementationManager.emptyArgs(context.domain(),
command.getCommand());
} catch (Exception e) {
throw new JobExecutionException("While getting empty args
from " + command.getKey(), e);
}
@@ -342,8 +342,8 @@ public class MacroJobDelegate extends
AbstractSchedTaskJobDelegate<MacroTask> im
commands.add(Pair.of(runnable, args));
}
- run(commands, actions, ctx, output, context.isDryRun());
- return actions.filter(a -> !context.isDryRun()).map(a ->
a.afterAll(ctx, output)).orElse(output).toString();
+ run(commands, actions, ctx, output, context.dryRun());
+ return actions.filter(a -> !context.dryRun()).map(a -> a.afterAll(ctx,
output)).orElse(output).toString();
}
@Override
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/SyncopeTaskScheduler.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/SyncopeTaskScheduler.java
index 51382daabd..652e76b82b 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/SyncopeTaskScheduler.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/SyncopeTaskScheduler.java
@@ -61,7 +61,7 @@ public class SyncopeTaskScheduler {
}
protected void register(final Job job, final ScheduledFuture<?> instant,
final ScheduledFuture<?> cron) {
- Key key = new Key(job.getContext().getDomain(),
job.getContext().getJobName());
+ Key key = new Key(job.getContext().domain(),
job.getContext().jobName());
stop(key, instant == null ? List.of(Value::cron) :
List.of(Value::instant));
AuthContextUtils.runAsAdmin(key.domain(), () ->
jobStatusDAO.unlock(key.job()));
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/TaskJob.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/TaskJob.java
index 0a78a73684..7d4423c79d 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/TaskJob.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/TaskJob.java
@@ -18,6 +18,7 @@
*/
package org.apache.syncope.core.provisioning.java.job;
+import java.util.Set;
import org.apache.syncope.common.lib.types.TaskType;
import org.apache.syncope.core.persistence.api.DomainHolder;
import org.apache.syncope.core.persistence.api.dao.ImplementationDAO;
@@ -28,6 +29,8 @@ import
org.apache.syncope.core.provisioning.api.job.JobManager;
import org.apache.syncope.core.provisioning.api.job.SchedTaskJobDelegate;
import org.apache.syncope.core.spring.implementation.ImplementationManager;
import org.apache.syncope.core.spring.security.AuthContextUtils;
+import org.apache.syncope.core.spring.security.AuthDataAccessor;
+import org.apache.syncope.core.spring.security.SyncopeGrantedAuthority;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -52,6 +55,9 @@ public class TaskJob extends Job {
@Autowired
protected ImplementationDAO implementationDAO;
+ @Autowired
+ protected AuthDataAccessor authDataAccessor;
+
private SchedTaskJobDelegate delegate;
@Override
@@ -62,14 +68,14 @@ public class TaskJob extends Job {
protected void delegate(final JobExecutionContext context, final String
taskKey)
throws ClassNotFoundException, JobExecutionException {
- String implKey = (String)
context.getData().get(JobManager.DELEGATE_IMPLEMENTATION);
+ String implKey = (String)
context.data().get(JobManager.DELEGATE_IMPLEMENTATION);
Implementation impl = implementationDAO.findById(implKey).orElse(null);
if (impl == null) {
LOG.error("Could not find Implementation '{}', aborting", implKey);
} else {
- delegate = ImplementationManager.build(context.getDomain(), impl);
+ delegate = ImplementationManager.build(context.domain(), impl);
delegate.execute(
- (TaskType) context.getData().get(JobManager.TASK_TYPE),
+ (TaskType) context.data().get(JobManager.TASK_TYPE),
taskKey,
context);
}
@@ -77,16 +83,21 @@ public class TaskJob extends Job {
@Override
protected void execute(final JobExecutionContext context) throws
JobExecutionException {
- if (!domainHolder.getDomains().containsKey(context.getDomain())) {
- LOG.debug("Domain {} not found, skipping", context.getDomain());
+ if (!domainHolder.getDomains().containsKey(context.domain())) {
+ LOG.debug("Domain {} not found, skipping", context.domain());
return;
}
- String taskKey = (String) context.getData().get(JobManager.TASK_KEY);
+ String taskKey = (String) context.data().get(JobManager.TASK_KEY);
try {
- AuthContextUtils.runAsAdmin(context.getDomain(), () -> {
+ Set<SyncopeGrantedAuthority> authorities =
AuthContextUtils.callAsAdmin(
+ context.domain(),
+ () -> authDataAccessor.getAuthorities(context.executor(),
null));
+
+ AuthContextUtils.callAs(context.domain(), context.executor(),
authorities, () -> {
try {
delegate(context, taskKey);
+ return null;
} catch (Exception e) {
if (e instanceof RuntimeException re) {
throw re;
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/notification/NotificationJob.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/notification/NotificationJob.java
index 54210ce8f8..40cf719142 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/notification/NotificationJob.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/notification/NotificationJob.java
@@ -18,7 +18,6 @@
*/
package org.apache.syncope.core.provisioning.java.job.notification;
-import java.util.Optional;
import org.apache.syncope.core.persistence.api.DomainHolder;
import org.apache.syncope.core.provisioning.api.job.JobExecutionContext;
import org.apache.syncope.core.provisioning.api.job.JobExecutionException;
@@ -71,12 +70,12 @@ public class NotificationJob extends Job {
@Override
protected void execute(final JobExecutionContext context) throws
JobExecutionException {
LOG.debug("Waking up...");
- String executor =
Optional.ofNullable(context.getExecutor()).orElseGet(securityProperties::getAdminUser);
+
for (String domain : domainHolder.getDomains().keySet()) {
try {
AuthContextUtils.runAsAdmin(domain, () -> {
try {
- delegate.execute(executor);
+ delegate.execute(securityProperties.getAdminUser());
} catch (Exception e) {
LOG.error("While sending out notifications", e);
throw new RuntimeException(e);
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/AbstractReportJobDelegate.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/AbstractReportJobDelegate.java
index a378def165..0c52938687 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/AbstractReportJobDelegate.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/AbstractReportJobDelegate.java
@@ -118,7 +118,7 @@ public abstract class AbstractReportJobDelegate implements
ReportJobDelegate, St
return;
}
- String executor =
Optional.ofNullable(context.getExecutor()).orElseGet(() ->
securityProperties.getAdminUser());
+ String executor = Optional.ofNullable(context.executor()).orElseGet(()
-> securityProperties.getAdminUser());
ReportExec execution = entityFactory.newEntity(ReportExec.class);
execution.setStart(OffsetDateTime.now());
execution.setReport(report);
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/ReportJob.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/ReportJob.java
index f6932af1b0..b23bdc2f91 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/ReportJob.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/report/ReportJob.java
@@ -19,6 +19,7 @@
package org.apache.syncope.core.provisioning.java.job.report;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import org.apache.syncope.core.persistence.api.DomainHolder;
import org.apache.syncope.core.persistence.api.dao.ImplementationDAO;
@@ -30,6 +31,8 @@ import
org.apache.syncope.core.provisioning.api.job.report.ReportJobDelegate;
import org.apache.syncope.core.provisioning.java.job.Job;
import org.apache.syncope.core.spring.implementation.ImplementationManager;
import org.apache.syncope.core.spring.security.AuthContextUtils;
+import org.apache.syncope.core.spring.security.AuthDataAccessor;
+import org.apache.syncope.core.spring.security.SyncopeGrantedAuthority;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -54,10 +57,13 @@ public class ReportJob extends Job {
private final Map<String, ReportJobDelegate> perContextReportJobDelegates
= new ConcurrentHashMap<>();
@Autowired
- private ImplementationDAO implementationDAO;
+ private DomainHolder<?> domainHolder;
@Autowired
- private DomainHolder<?> domainHolder;
+ protected ImplementationDAO implementationDAO;
+
+ @Autowired
+ protected AuthDataAccessor authDataAccessor;
private ReportJobDelegate delegate;
@@ -69,34 +75,38 @@ public class ReportJob extends Job {
protected void delegate(final JobExecutionContext context, final String
reportKey)
throws ClassNotFoundException, JobExecutionException {
- String implKey = (String)
context.getData().get(JobManager.DELEGATE_IMPLEMENTATION);
+ String implKey = (String)
context.data().get(JobManager.DELEGATE_IMPLEMENTATION);
Implementation impl = implementationDAO.findById(implKey).orElse(null);
if (impl == null) {
LOG.error("Could not find Implementation '{}', aborting", implKey);
} else {
delegate = ImplementationManager.buildReportJobDelegate(
- context.getDomain(),
+ context.domain(),
impl,
() -> perContextReportJobDelegates.get(impl.getKey()),
instance ->
perContextReportJobDelegates.put(impl.getKey(), instance)).
- orElseThrow(() -> new IllegalArgumentException(
- "Could not instantiate " + impl.getBody()));
+ orElseThrow(() -> new IllegalArgumentException("Could not
instantiate " + impl.getBody()));
delegate.execute(reportKey, context);
}
}
@Override
protected void execute(final JobExecutionContext context) throws
JobExecutionException {
- if (!domainHolder.getDomains().containsKey(context.getDomain())) {
- LOG.debug("Domain {} not found, skipping", context.getDomain());
+ if (!domainHolder.getDomains().containsKey(context.domain())) {
+ LOG.debug("Domain {} not found, skipping", context.domain());
return;
}
- String reportKey = (String)
context.getData().get(JobManager.REPORT_KEY);
+ String reportKey = (String) context.data().get(JobManager.REPORT_KEY);
try {
- AuthContextUtils.runAsAdmin(context.getDomain(), () -> {
+ Set<SyncopeGrantedAuthority> authorities =
AuthContextUtils.callAsAdmin(
+ context.domain(),
+ () -> authDataAccessor.getAuthorities(context.executor(),
null));
+
+ AuthContextUtils.callAs(context.domain(), context.executor(),
authorities, () -> {
try {
delegate(context, reportKey);
+ return null;
} catch (Exception e) {
if (e instanceof RuntimeException re) {
throw re;
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java
index 94ea5cdbcf..a938611aa4 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/propagation/PriorityPropagationTaskExecutor.java
@@ -23,12 +23,10 @@ import java.util.Collection;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
-import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.CompletionService;
import java.util.concurrent.ExecutorCompletionService;
import java.util.concurrent.Future;
-import java.util.stream.Collectors;
import org.apache.syncope.common.lib.types.ExecStatus;
import
org.apache.syncope.core.persistence.api.attrvalue.PlainAttrValidationManager;
import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
@@ -51,8 +49,6 @@ import
org.apache.syncope.core.provisioning.java.utils.ConnObjectUtils;
import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.core.task.AsyncTaskExecutor;
-import org.springframework.security.core.GrantedAuthority;
-import org.springframework.security.core.context.SecurityContextHolder;
/**
* Sorts the tasks to be executed according to related
@@ -108,19 +104,19 @@ public class PriorityPropagationTaskExecutor extends
AbstractPropagationTaskExec
protected Callable<TaskExec<PropagationTask>> newPropagationTaskCallable(
final PropagationTaskInfo taskInfo, final PropagationReporter
reporter, final String executor) {
- String domain = AuthContextUtils.getDomain();
- Set<String> authorities =
SecurityContextHolder.getContext().getAuthentication().getAuthorities().stream().
-
map(GrantedAuthority::getAuthority).collect(Collectors.toSet());
+ return () -> AuthContextUtils.callAs(
+ AuthContextUtils.getDomain(),
+ executor,
+ AuthContextUtils.getAuthorities(),
+ () -> {
+ LOG.debug("Execution started for {}", taskInfo);
- return () -> AuthContextUtils.callAs(domain, executor, authorities, ()
-> {
- LOG.debug("Execution started for {}", taskInfo);
+ TaskExec<PropagationTask> execution =
this.execute(taskInfo, reporter, executor);
- TaskExec<PropagationTask> execution = this.execute(taskInfo,
reporter, executor);
+ LOG.debug("Execution completed for {} with results {}",
taskInfo, execution);
- LOG.debug("Execution completed for {} with results {}", taskInfo,
execution);
-
- return execution;
- });
+ return execution;
+ });
}
protected boolean failed(
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullExecutor.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullExecutor.java
index c123d818b1..62f812db7a 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullExecutor.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/AbstractPullExecutor.java
@@ -121,7 +121,7 @@ abstract class AbstractPullExecutor<T extends
ProvisioningTask<T>>
super.init(taskType, taskKey, context);
- provisionSorter = getProvisionSorter(context.getDomain(), task);
+ provisionSorter = getProvisionSorter(context.domain(), task);
latestSyncTokens.clear();
}
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LiveSyncJobDelegate.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LiveSyncJobDelegate.java
index 0e05150ac5..77f5394afc 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LiveSyncJobDelegate.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/LiveSyncJobDelegate.java
@@ -59,6 +59,7 @@ import org.apache.syncope.core.provisioning.java.job.TaskJob;
import org.apache.syncope.core.provisioning.java.utils.ConnObjectUtils;
import org.apache.syncope.core.provisioning.java.utils.MappingUtils;
import org.apache.syncope.core.spring.implementation.ImplementationManager;
+import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.identityconnectors.framework.common.objects.ObjectClass;
import org.identityconnectors.framework.common.objects.OperationOptions;
import org.identityconnectors.framework.common.objects.OperationOptionsBuilder;
@@ -103,9 +104,9 @@ public class LiveSyncJobDelegate
Implementation impl =
Optional.ofNullable(task.getLiveSyncDeltaMapper()).
orElseThrow(() -> new JobExecutionException(
- "No " + LiveSyncDeltaMapper.class.getSimpleName() + "
provided, aborting"));
+ "No " + LiveSyncDeltaMapper.class.getSimpleName() + "
provided, aborting"));
try {
- mapper = ImplementationManager.build(context.getDomain(), impl);
+ mapper = ImplementationManager.build(context.domain(), impl);
} catch (Exception e) {
throw new JobExecutionException(
"Could not build " +
IdMImplementationType.LIVE_SYNC_DELTA_MAPPER + " " + impl.getKey(), e);
@@ -140,9 +141,9 @@ public class LiveSyncJobDelegate
Optional.ofNullable(task.getResource().getInboundPolicy()).
map(InboundPolicy::getConflictResolutionAction).
orElse(ConflictResolutionAction.IGNORE),
- getInboundActions(context.getDomain(), task.getActions()),
- executor,
- context.isDryRun()) {
+ getInboundActions(context.domain(), task.getActions()),
+ AuthContextUtils.getUsername(),
+ context.dryRun()) {
@Override
public String getContext() {
@@ -181,7 +182,7 @@ public class LiveSyncJobDelegate
Optional.ofNullable(orgUnit.getSyncToken()).
ifPresent(syncToken -> setLatestSyncToken(
- orgUnit.getObjectClass(),
ConnObjectUtils.toSyncToken(syncToken)));
+ orgUnit.getObjectClass(),
ConnObjectUtils.toSyncToken(syncToken)));
}
// ...then provisions for any types
@@ -233,7 +234,7 @@ public class LiveSyncJobDelegate
Optional.ofNullable(provision.getSyncToken()).
ifPresent(syncToken -> setLatestSyncToken(
- provision.getObjectClass(),
ConnObjectUtils.toSyncToken(syncToken)));
+ provision.getObjectClass(),
ConnObjectUtils.toSyncToken(syncToken)));
}
setStatus("Initialization completed");
@@ -287,7 +288,7 @@ public class LiveSyncJobDelegate
OperationOptions options = Optional.ofNullable(
latestSyncTokens.get(info.objectClass().getObjectClassValue())).
map(syncToken -> new
OperationOptionsBuilder(info.options()).
-
setPagedResultsCookie(syncToken.getValue().toString()).build()).
+
setPagedResultsCookie(syncToken.getValue().toString()).build()).
orElseGet(() -> info.options());
profile.getConnector().livesync(
@@ -313,14 +314,14 @@ public class LiveSyncJobDelegate
AnyUtils anyUtils =
anyUtilsFactory.getInstance(info.anyTypeKind());
profile.getResults().stream().
filter(r -> r.getUidValue() != null && r.getKey()
!= null
- && r.getOperation() == ResourceOperation.CREATE
- &&
r.getAnyType().equals(info.provision().getAnyType())).
+ && r.getOperation() ==
ResourceOperation.CREATE
+ &&
r.getAnyType().equals(info.provision().getAnyType())).
forEach(r -> liveSyncTaskSaver.addAttr(
- anyUtils,
- validator,
- r.getKey(),
- info.uidOnCreate(),
- r.getUidValue()));
+ anyUtils,
+ validator,
+ r.getKey(),
+ info.uidOnCreate(),
+ r.getUidValue()));
}
});
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
index f0ab389bbe..19fc2ba225 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PullJobDelegate.java
@@ -44,6 +44,7 @@ import
org.apache.syncope.core.provisioning.api.pushpull.SyncopePullResultHandle
import org.apache.syncope.core.provisioning.java.utils.ConnObjectUtils;
import org.apache.syncope.core.provisioning.java.utils.MappingUtils;
import org.apache.syncope.core.spring.implementation.ImplementationManager;
+import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.identityconnectors.framework.common.objects.ObjectClass;
import org.identityconnectors.framework.common.objects.OperationOptions;
@@ -78,9 +79,9 @@ public class PullJobDelegate
Optional.ofNullable(task.getResource().getInboundPolicy()).
map(InboundPolicy::getConflictResolutionAction).
orElse(ConflictResolutionAction.IGNORE),
- getInboundActions(context.getDomain(), task.getActions()),
- executor,
- context.isDryRun());
+ getInboundActions(context.domain(), task.getActions()),
+ AuthContextUtils.getUsername(),
+ context.dryRun());
dispatcher = buildDispatcher();
}
@@ -120,7 +121,7 @@ public class PullJobDelegate
try {
switch (task.getPullMode()) {
case INCREMENTAL:
- if (!context.isDryRun()) {
+ if (!context.dryRun()) {
setLatestSyncToken(
orgUnit.getObjectClass(),
ConnObjectUtils.toSyncToken(orgUnit.getSyncToken()));
@@ -132,7 +133,7 @@ public class PullJobDelegate
dispatcher,
options);
- if (!context.isDryRun()) {
+ if (!context.dryRun()) {
orgUnit.setSyncToken(
ConnObjectUtils.toString(latestSyncTokens.get(orgUnit.getObjectClass())));
resourceDAO.save(task.getResource());
@@ -142,7 +143,7 @@ public class PullJobDelegate
case FILTERED_RECONCILIATION:
connector.filteredReconciliation(
new ObjectClass(orgUnit.getObjectClass()),
- getReconFilterBuilder(context.getDomain(),
task),
+ getReconFilterBuilder(context.domain(), task),
dispatcher,
options);
break;
@@ -198,7 +199,7 @@ public class PullJobDelegate
switch (task.getPullMode()) {
case INCREMENTAL:
- if (!context.isDryRun()) {
+ if (!context.dryRun()) {
setLatestSyncToken(
provision.getObjectClass(),
ConnObjectUtils.toSyncToken(provision.getSyncToken()));
@@ -210,14 +211,14 @@ public class PullJobDelegate
dispatcher,
options);
- if (!context.isDryRun()) {
+ if (!context.dryRun()) {
setSyncTokens = true;
}
break;
case FILTERED_RECONCILIATION:
connector.filteredReconciliation(new
ObjectClass(provision.getObjectClass()),
- getReconFilterBuilder(context.getDomain(),
task),
+ getReconFilterBuilder(context.domain(), task),
dispatcher,
options);
break;
@@ -257,14 +258,14 @@ public class PullJobDelegate
AnyUtils anyUtils =
anyUtilsFactory.getInstance(anyType.getKind());
profile.getResults().stream().
filter(result -> result.getUidValue() != null &&
result.getKey() != null
- && result.getOperation() ==
ResourceOperation.CREATE
- &&
result.getAnyType().equals(provision.getAnyType())).
+ && result.getOperation() ==
ResourceOperation.CREATE
+ &&
result.getAnyType().equals(provision.getAnyType())).
forEach(result -> anyUtils.addAttr(
- validator,
- result.getKey(),
-
plainSchemaDAO.findById(provision.getUidOnCreate()).orElseThrow(
- () -> new NotFoundException("PlainSchema "
+ provision.getUidOnCreate())),
- result.getUidValue()));
+ validator,
+ result.getKey(),
+
plainSchemaDAO.findById(provision.getUidOnCreate()).orElseThrow(
+ () -> new
NotFoundException("PlainSchema " + provision.getUidOnCreate())),
+ result.getUidValue()));
} catch (Throwable t) {
LOG.error("While setting UID on create", t);
}
@@ -287,7 +288,7 @@ public class PullJobDelegate
setStatus("Pull done");
- String result = createReport(profile.getResults(), task.getResource(),
context.isDryRun());
+ String result = createReport(profile.getResults(), task.getResource(),
context.dryRun());
LOG.debug("Pull result: {}", result);
return result;
}
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java
index fe0c2c266d..6f60b26493 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/PushJobDelegate.java
@@ -56,6 +56,7 @@ import
org.apache.syncope.core.provisioning.api.pushpull.SyncopePushExecutor;
import
org.apache.syncope.core.provisioning.api.pushpull.SyncopePushResultHandler;
import org.apache.syncope.core.provisioning.api.pushpull.UserPushResultHandler;
import org.apache.syncope.core.spring.implementation.ImplementationManager;
+import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.data.domain.PageRequest;
@@ -171,9 +172,9 @@ public class PushJobDelegate
Optional.ofNullable(task.getResource().getPushPolicy()).
map(PushPolicy::getConflictResolutionAction).
orElse(ConflictResolutionAction.IGNORE),
- getPushActions(context.getDomain(), task.getActions()),
- executor,
- context.isDryRun());
+ getPushActions(context.domain(), task.getActions()),
+ AuthContextUtils.getUsername(),
+ context.dryRun());
}
@Override
@@ -227,7 +228,7 @@ public class PushJobDelegate
}
// ...then provisions for any types
- ProvisionSorter provisionSorter =
getProvisionSorter(context.getDomain(), task);
+ ProvisionSorter provisionSorter = getProvisionSorter(context.domain(),
task);
for (Provision provision : task.getResource().getProvisions().stream().
filter(provision -> provision.getMapping() !=
null).sorted(provisionSorter).
@@ -290,7 +291,7 @@ public class PushJobDelegate
setStatus("Push done");
- String result = createReport(profile.getResults(), task.getResource(),
context.isDryRun());
+ String result = createReport(profile.getResults(), task.getResource(),
context.dryRun());
LOG.debug("Push result: {}", result);
return result;
}
diff --git
a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/job/SyncopeTaskSchedulerTest.java
b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/job/SyncopeTaskSchedulerTest.java
index c637754d7c..cd7f057f79 100644
---
a/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/job/SyncopeTaskSchedulerTest.java
+++
b/core/provisioning-java/src/test/java/org/apache/syncope/core/provisioning/java/job/SyncopeTaskSchedulerTest.java
@@ -79,7 +79,7 @@ public class SyncopeTaskSchedulerTest extends AbstractTest {
scheduler.schedule(job, Instant.now().plusSeconds(5));
- assertTrue(scheduler.getNextTrigger(AuthContextUtils.getDomain(),
job.getContext().getJobName()).isPresent());
+ assertTrue(scheduler.getNextTrigger(AuthContextUtils.getDomain(),
job.getContext().jobName()).isPresent());
await().atMost(10, TimeUnit.SECONDS).pollInterval(1,
TimeUnit.SECONDS).until(() -> VALUE.get() == 1);
}
diff --git
a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java
b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java
index 84be715471..3e6bd7b02b 100644
---
a/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java
+++
b/core/spring/src/main/java/org/apache/syncope/core/spring/security/AuthContextUtils.java
@@ -81,19 +81,20 @@ public final class AuthContextUtils {
public static Set<SyncopeGrantedAuthority> getAuthorities() {
return
Optional.ofNullable(SecurityContextHolder.getContext().getAuthentication()).
map(authentication -> authentication.getAuthorities().stream().
- filter(SyncopeGrantedAuthority.class::isInstance).
- map(SyncopeGrantedAuthority.class::cast).
- collect(Collectors.toSet())).
- orElseGet(Set::of);
+ filter(SyncopeGrantedAuthority.class::isInstance).
+ map(SyncopeGrantedAuthority.class::cast).
+ collect(Collectors.toSet())).
+ orElseGet(Set::of);
}
public static Map<String, Set<String>> getAuthorizations() {
return
Optional.ofNullable(SecurityContextHolder.getContext().getAuthentication()).
map(authentication -> authentication.getAuthorities().stream().
- filter(SyncopeGrantedAuthority.class::isInstance).
- map(SyncopeGrantedAuthority.class::cast).
-
collect(Collectors.toMap(SyncopeGrantedAuthority::getAuthority,
SyncopeGrantedAuthority::getRealms))).
- orElseGet(Map::of);
+ filter(SyncopeGrantedAuthority.class::isInstance).
+ map(SyncopeGrantedAuthority.class::cast).
+
collect(Collectors.toMap(SyncopeGrantedAuthority::getAuthority,
+ SyncopeGrantedAuthority::getRealms))).
+ orElseGet(Map::of);
}
public static String getDomain() {
@@ -129,12 +130,9 @@ public final class AuthContextUtils {
public static <T> T callAs(
final String domain,
final String username,
- final Collection<String> entitlements,
+ final Collection<? extends GrantedAuthority> authorities,
final Callable<T> callable) {
- List<GrantedAuthority> authorities = entitlements.stream().
- map(entitlement -> new SyncopeGrantedAuthority(entitlement,
SyncopeConstants.ROOT_REALM)).
- collect(Collectors.toList());
UsernamePasswordAuthenticationToken asAuth = new
UsernamePasswordAuthenticationToken(
new User(username, PLACEHOLDER_PWD, authorities),
PLACEHOLDER_PWD, authorities);
asAuth.setDetails(new SyncopeAuthenticationDetails(domain,
getDelegatedBy().orElse(null)));
@@ -144,10 +142,13 @@ public final class AuthContextUtils {
public static <T> T callAsAdmin(final String domain, final Callable<T>
callable) {
SecurityProperties properties =
ApplicationContextProvider.getBeanFactory().getBean(SecurityProperties.class);
+ List<SyncopeGrantedAuthority> authorities =
EntitlementsHolder.getInstance().getValues().stream().
+ map(entitlement -> new SyncopeGrantedAuthority(entitlement,
SyncopeConstants.ROOT_REALM)).
+ toList();
return callAs(
domain,
properties.getAdminUser(),
- EntitlementsHolder.getInstance().getValues(),
+ authorities,
callable);
}
diff --git
a/core/starter/src/main/java/org/apache/syncope/core/starter/actuate/JobEndpoint.java
b/core/starter/src/main/java/org/apache/syncope/core/starter/actuate/JobEndpoint.java
index 9f1f44ec74..dd67aad896 100644
---
a/core/starter/src/main/java/org/apache/syncope/core/starter/actuate/JobEndpoint.java
+++
b/core/starter/src/main/java/org/apache/syncope/core/starter/actuate/JobEndpoint.java
@@ -59,9 +59,9 @@ public class JobEndpoint {
Map<String, Object> job = new HashMap<>();
jobs.put(k.job(), job);
- job.put("executor", v.job().getContext().getExecutor());
- job.put("dryRun", v.job().getContext().isDryRun());
- job.put("context", v.job().getContext().getData());
+ job.put("executor", v.job().getContext().executor());
+ job.put("dryRun", v.job().getContext().dryRun());
+ job.put("context", v.job().getContext().data());
v.instant().ifPresent(f -> job.put("delay (seconds)",
f.getDelay(TimeUnit.SECONDS)));
diff --git
a/ext/elasticsearch/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ElasticsearchReindex.java
b/ext/elasticsearch/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ElasticsearchReindex.java
index ea43e7d027..73b0ae4926 100644
---
a/ext/elasticsearch/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ElasticsearchReindex.java
+++
b/ext/elasticsearch/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/ElasticsearchReindex.java
@@ -270,7 +270,7 @@ public class ElasticsearchReindex extends
AbstractSchedTaskJobDelegate<SchedTask
@Override
protected String doExecute(final JobExecutionContext context) throws
JobExecutionException {
- if (!context.isDryRun()) {
+ if (!context.dryRun()) {
setStatus("Start rebuilding indexes");
try {
diff --git
a/ext/openfga/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/OpenFGAReinit.java
b/ext/openfga/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/OpenFGAReinit.java
index c8f890cc93..c528e8e410 100644
---
a/ext/openfga/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/OpenFGAReinit.java
+++
b/ext/openfga/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/OpenFGAReinit.java
@@ -74,7 +74,7 @@ public class OpenFGAReinit extends
AbstractSchedTaskJobDelegate<SchedTask> {
@Override
protected String doExecute(final JobExecutionContext context) throws
JobExecutionException {
- if (!context.isDryRun()) {
+ if (!context.dryRun()) {
setStatus("Start rebuilding OpenFGA authorization model and
tuples");
try {
diff --git
a/ext/opensearch/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/OpenSearchReindex.java
b/ext/opensearch/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/OpenSearchReindex.java
index ea543f773b..6b6062ec16 100644
---
a/ext/opensearch/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/OpenSearchReindex.java
+++
b/ext/opensearch/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/job/OpenSearchReindex.java
@@ -270,7 +270,7 @@ public class OpenSearchReindex extends
AbstractSchedTaskJobDelegate<SchedTask> {
@Override
protected String doExecute(final JobExecutionContext context) throws
JobExecutionException {
- if (!context.isDryRun()) {
+ if (!context.dryRun()) {
setStatus("Start rebuilding indexes");
try {
diff --git
a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/SampleReportJobDelegate.java
b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/SampleReportJobDelegate.java
index 84c1093310..063cb62040 100644
---
a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/SampleReportJobDelegate.java
+++
b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/SampleReportJobDelegate.java
@@ -115,7 +115,7 @@ public class SampleReportJobDelegate extends
AbstractReportJobDelegate {
final OutputStream os,
final JobExecutionContext context) throws JobExecutionException {
- if (!context.isDryRun()) {
+ if (!context.dryRun()) {
try {
switch (report.getMimeType()) {
case MediaType.APPLICATION_PDF_VALUE:
@@ -133,7 +133,7 @@ public class SampleReportJobDelegate extends
AbstractReportJobDelegate {
}
}
- return (context.isDryRun()
+ return (context.dryRun()
? "DRY "
: "") + "RUNNING";
}
diff --git
a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestSampleJobDelegate.java
b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestSampleJobDelegate.java
index fe6dadf671..0ac8e4c295 100644
---
a/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestSampleJobDelegate.java
+++
b/fit/core-reference/src/main/java/org/apache/syncope/fit/core/reference/TestSampleJobDelegate.java
@@ -41,11 +41,11 @@ public class TestSampleJobDelegate extends
AbstractSchedTaskJobDelegate<SchedTas
}
}
- LOG.info("TestSampleJob {} running [SchedTask {}]", (context.isDryRun()
+ LOG.info("TestSampleJob {} running [SchedTask {}]", (context.dryRun()
? "dry "
: ""), task.getKey());
- return (context.isDryRun()
+ return (context.dryRun()
? "DRY "
: "") + "RUNNING";
}