You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by il...@apache.org on 2021/06/09 11:30:27 UTC
[syncope] branch master updated: Upgrading commons-jexl + various
changes to allow more for extendability
This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/master by this push:
new 7d6aa51 Upgrading commons-jexl + various changes to allow more for extendability
7d6aa51 is described below
commit 7d6aa51867055b2b6741c1926ea2cd31216ff5c4
Author: Francesco Chicchiriccò <il...@apache.org>
AuthorDate: Wed Jun 9 12:49:55 2021 +0200
Upgrading commons-jexl + various changes to allow more for extendability
---
.../core/persistence/jpa/dao/JPATaskExecDAO.java | 7 +--
.../provisioning/api/jexl/SandboxUberspect.java | 5 +-
.../core/provisioning/java/ConnectorManager.java | 2 +-
.../provisioning/java/DefaultAuditManager.java | 46 ++++++++---------
.../java/job/AbstractSchedTaskJobDelegate.java | 6 ++-
.../notification/DefaultNotificationManager.java | 9 ++--
.../java/pushpull/PullJobDelegate.java | 57 +++++++++++++---------
.../elasticsearch/client/ElasticsearchUtils.java | 4 +-
pom.xml | 2 +-
9 files changed, 80 insertions(+), 58 deletions(-)
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
index eb70532..cca3e2a 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPATaskExecDAO.java
@@ -128,12 +128,12 @@ public class JPATaskExecDAO extends AbstractDAO<TaskExec> implements TaskExecDAO
private static String toOrderByStatement(final List<OrderByClause> orderByClauses) {
StringBuilder statement = new StringBuilder();
- for (OrderByClause clause : orderByClauses) {
+ orderByClauses.forEach(clause -> {
String field = clause.getField().trim();
if (ReflectionUtils.findField(JPATaskExec.class, field) != null) {
statement.append("e.").append(field).append(' ').append(clause.getDirection().name());
}
- }
+ });
if (statement.length() == 0) {
statement.append("ORDER BY e.id DESC");
@@ -164,13 +164,14 @@ public class JPATaskExecDAO extends AbstractDAO<TaskExec> implements TaskExecDAO
return query.getResultList();
}
+ @Transactional(rollbackFor = { Throwable.class })
@Override
public TaskExec save(final TaskExec execution) {
return entityManager().merge(execution);
}
- @Override
@Transactional(rollbackFor = { Throwable.class })
+ @Override
public void saveAndAdd(final String taskKey, final TaskExec execution) {
Task task = taskDAO.find(taskKey);
task.add(execution);
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/SandboxUberspect.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/SandboxUberspect.java
index 08f9168..985b32f 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/SandboxUberspect.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/jexl/SandboxUberspect.java
@@ -29,6 +29,7 @@ import java.util.Map;
import java.util.Optional;
import java.util.Set;
import org.apache.commons.jexl3.JexlEngine;
+import org.apache.commons.jexl3.internal.TemplateInterpreter;
import org.apache.commons.jexl3.internal.introspection.Uberspect;
import org.apache.commons.jexl3.introspection.JexlMethod;
import org.apache.commons.jexl3.introspection.JexlPropertySet;
@@ -65,7 +66,9 @@ class SandboxUberspect extends Uberspect {
@Override
public JexlMethod getMethod(final Object obj, final String method, final Object... args) {
- if (obj instanceof AnyTO || obj instanceof Any
+ if (obj instanceof TemplateInterpreter) { // https://issues.apache.org/jira/browse/JEXL-351
+ return super.getMethod(obj, method, args);
+ } else if (obj instanceof AnyTO || obj instanceof Any
|| obj instanceof PlainAttr || obj instanceof Attr
|| obj instanceof MembershipTO || obj instanceof Membership
|| obj instanceof Realm || obj instanceof RealmTO) {
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java
index 57e861a..0f2bce3 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/ConnectorManager.java
@@ -78,7 +78,7 @@ public class ConnectorManager implements ConnectorRegistry, ConnectorFactory {
@Override
public Connector getConnector(final ExternalResource resource) {
// Try to re-create connector bean from underlying resource (useful for managing failover scenarios)
- if (!ApplicationContextProvider.getBeanFactory().containsBean(getBeanName(resource))) {
+ if (!ApplicationContextProvider.getBeanFactory().containsSingleton(getBeanName(resource))) {
registerConnector(resource);
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAuditManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAuditManager.java
index 1610019..934f03a 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAuditManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/DefaultAuditManager.java
@@ -136,31 +136,33 @@ public class DefaultAuditManager implements AuditManager {
final Object output,
final Object... input) {
- Throwable throwable = null;
- if (output instanceof Throwable) {
- throwable = (Throwable) output;
- }
-
- AuditEntry auditEntry = new AuditEntry();
- auditEntry.setWho(who);
- auditEntry.setLogger(new AuditLoggerName(type, category, subcategory, event, condition));
- auditEntry.setDate(new Date());
- auditEntry.setBefore(POJOHelper.serialize((maskSensitive(before))));
- if (throwable == null) {
- auditEntry.setOutput(POJOHelper.serialize((maskSensitive(output))));
- } else {
- auditEntry.setOutput(throwable.getMessage());
- auditEntry.setThrowable(ExceptionUtils2.getFullStackTrace(throwable));
- }
- if (input != null) {
- auditEntry.getInputs().addAll(Arrays.stream(input).
- map(DefaultAuditManager::maskSensitive).map(POJOHelper::serialize).
- collect(Collectors.toList()));
- }
+ AuditLoggerName auditLoggerName = new AuditLoggerName(type, category, subcategory, event, condition);
org.apache.syncope.core.persistence.api.entity.Logger syncopeLogger =
- loggerDAO.find(auditEntry.getLogger().toLoggerName());
+ loggerDAO.find(auditLoggerName.toLoggerName());
if (syncopeLogger != null && syncopeLogger.getLevel() == LoggerLevel.DEBUG) {
+ Throwable throwable = null;
+ if (output instanceof Throwable) {
+ throwable = (Throwable) output;
+ }
+
+ AuditEntry auditEntry = new AuditEntry();
+ auditEntry.setWho(who);
+ auditEntry.setLogger(auditLoggerName);
+ auditEntry.setDate(new Date());
+ auditEntry.setBefore(POJOHelper.serialize((maskSensitive(before))));
+ if (throwable == null) {
+ auditEntry.setOutput(POJOHelper.serialize((maskSensitive(output))));
+ } else {
+ auditEntry.setOutput(throwable.getMessage());
+ auditEntry.setThrowable(ExceptionUtils2.getFullStackTrace(throwable));
+ }
+ if (input != null) {
+ auditEntry.getInputs().addAll(Arrays.stream(input).
+ map(DefaultAuditManager::maskSensitive).map(POJOHelper::serialize).
+ collect(Collectors.toList()));
+ }
+
Logger logger = LoggerFactory.getLogger(
AuditLoggerName.getAuditLoggerName(AuthContextUtils.getDomain()));
Logger eventLogger = LoggerFactory.getLogger(
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 e8aac13..08017a7 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
@@ -141,7 +141,7 @@ public abstract class AbstractSchedTaskJobDelegate implements SchedTaskJobDelega
execution.setEnd(new Date());
if (hasToBeRegistered(execution)) {
- taskExecDAO.saveAndAdd(taskKey, execution);
+ register(execution);
}
task = taskDAO.save(task);
@@ -189,4 +189,8 @@ public abstract class AbstractSchedTaskJobDelegate implements SchedTaskJobDelega
protected boolean hasToBeRegistered(final TaskExec execution) {
return false;
}
+
+ protected void register(final TaskExec execution) {
+ taskExecDAO.saveAndAdd(task.getKey(), execution);
+ }
}
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/DefaultNotificationManager.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/DefaultNotificationManager.java
index b294c82..9d5a171 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/DefaultNotificationManager.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/notification/DefaultNotificationManager.java
@@ -295,6 +295,8 @@ public class DefaultNotificationManager implements NotificationManager {
final Object output,
final Object... input) {
+ String currentEvent = AuditLoggerName.buildEvent(type, category, subcategory, event, condition);
+
Any<?> any = null;
if (before instanceof UserTO) {
@@ -333,12 +335,11 @@ public class DefaultNotificationManager implements NotificationManager {
List<NotificationTask> notifications = new ArrayList<>();
for (Notification notification : notificationDAO.findAll()) {
if (LOG.isDebugEnabled()) {
- notification.getAbouts().forEach(
- about -> LOG.debug("Notification about {} defined: {}", about.getAnyType(), about.get()));
+ notification.getAbouts().
+ forEach(a -> LOG.debug("Notification about {} defined: {}", a.getAnyType(), a.get()));
}
if (notification.isActive()) {
- String currentEvent = AuditLoggerName.buildEvent(type, category, subcategory, event, condition);
if (!notification.getEvents().contains(currentEvent)) {
LOG.debug("No events found about {}", any);
} else if (anyType == null || any == null
@@ -348,7 +349,7 @@ public class DefaultNotificationManager implements NotificationManager {
LOG.debug("Creating notification task for event {} about {}", currentEvent, any);
- final Map<String, Object> model = new HashMap<>();
+ Map<String, Object> model = new HashMap<>();
model.put("who", who);
model.put("type", type);
model.put("category", category);
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 e056751..4ac8352 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
@@ -95,11 +95,11 @@ public class PullJobDelegate extends AbstractProvisioningJobDelegate<PullTask> i
@Override
public void reportHandled(final ObjectClass objectClass, final Name name) {
- MutablePair<Integer, String> pair = handled.get(objectClass);
- if (pair == null) {
- pair = MutablePair.of(0, null);
- handled.put(objectClass, pair);
- }
+ MutablePair<Integer, String> pair = Optional.ofNullable(handled.get(objectClass)).orElseGet(() -> {
+ MutablePair<Integer, String> p = MutablePair.of(0, null);
+ handled.put(objectClass, p);
+ return p;
+ });
pair.setLeft(pair.getLeft() + 1);
pair.setRight(name.getNameValue());
}
@@ -160,17 +160,35 @@ public class PullJobDelegate extends AbstractProvisioningJobDelegate<PullTask> i
});
}
- protected static RealmPullResultHandler buildRealmHandler() {
+ protected List<PullActions> buildPullActions(final PullTask pullTask) {
+ List<PullActions> actions = new ArrayList<>();
+ pullTask.getActions().forEach(impl -> {
+ try {
+ actions.add(ImplementationManager.build(impl));
+ } catch (Exception e) {
+ LOG.warn("While building {}", impl, e);
+ }
+ });
+ return actions;
+ }
+
+ protected ReconFilterBuilder buildReconFilterBuilder(final PullTask pullTask)
+ throws InstantiationException, IllegalAccessException, ClassNotFoundException {
+
+ return ImplementationManager.build(pullTask.getReconFilterBuilder());
+ }
+
+ protected RealmPullResultHandler buildRealmHandler() {
return (RealmPullResultHandler) ApplicationContextProvider.getBeanFactory().
createBean(DefaultRealmPullResultHandler.class, AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
}
- protected static AnyObjectPullResultHandler buildAnyObjectHandler() {
+ protected AnyObjectPullResultHandler buildAnyObjectHandler() {
return (AnyObjectPullResultHandler) ApplicationContextProvider.getBeanFactory().
createBean(DefaultAnyObjectPullResultHandler.class, AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
}
- protected static UserPullResultHandler buildUserHandler() {
+ protected UserPullResultHandler buildUserHandler() {
return (UserPullResultHandler) ApplicationContextProvider.getBeanFactory().
createBean(DefaultUserPullResultHandler.class, AbstractBeanDefinition.AUTOWIRE_BY_NAME, false);
}
@@ -194,14 +212,7 @@ public class PullJobDelegate extends AbstractProvisioningJobDelegate<PullTask> i
LOG.debug("Executing pull on {}", pullTask.getResource());
- List<PullActions> actions = new ArrayList<>();
- pullTask.getActions().forEach(impl -> {
- try {
- actions.add(ImplementationManager.build(impl));
- } catch (Exception e) {
- LOG.warn("While building {}", impl, e);
- }
- });
+ List<PullActions> actions = buildPullActions(pullTask);
profile = new ProvisioningProfile<>(connector, pullTask);
profile.getActions().addAll(actions);
@@ -256,10 +267,9 @@ public class PullJobDelegate extends AbstractProvisioningJobDelegate<PullTask> i
break;
case FILTERED_RECONCILIATION:
- ReconFilterBuilder filterBuilder =
- ImplementationManager.build(pullTask.getReconFilterBuilder());
- connector.filteredReconciliation(orgUnit.getObjectClass(),
- filterBuilder,
+ connector.filteredReconciliation(
+ orgUnit.getObjectClass(),
+ buildReconFilterBuilder(pullTask),
handler,
options);
break;
@@ -340,7 +350,7 @@ public class PullJobDelegate extends AbstractProvisioningJobDelegate<PullTask> i
case FILTERED_RECONCILIATION:
connector.filteredReconciliation(
provision.getObjectClass(),
- ImplementationManager.build(pullTask.getReconFilterBuilder()),
+ buildReconFilterBuilder(pullTask),
handler,
options);
break;
@@ -360,9 +370,8 @@ public class PullJobDelegate extends AbstractProvisioningJobDelegate<PullTask> i
filter(result -> result.getUidValue() != null && result.getKey() != null
&& result.getOperation() == ResourceOperation.CREATE
&& result.getAnyType().equals(provision.getAnyType().getKey())).
- forEach(result -> {
- anyUtils.addAttr(result.getKey(), provision.getUidOnCreate(), result.getUidValue());
- });
+ forEach(result -> anyUtils.addAttr(
+ result.getKey(), provision.getUidOnCreate(), result.getUidValue()));
}
} catch (Throwable t) {
throw new JobExecutionException("While pulling from connector", t);
diff --git a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
index 122c96f..490a457 100644
--- a/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
+++ b/ext/elasticsearch/client-elasticsearch/src/main/java/org/apache/syncope/ext/elasticsearch/client/ElasticsearchUtils.java
@@ -131,9 +131,11 @@ public class ElasticsearchUtils {
field("realm", any.getRealm().getFullPath()).
field("anyType", any.getType().getKey()).
field("creationDate", any.getCreationDate()).
+ field("creationContext", any.getCreationContext()).
field("creator", any.getCreator()).
field("lastChangeDate", any.getLastChangeDate()).
field("lastModifier", any.getLastModifier()).
+ field("lastChangeContext", any.getLastChangeContext()).
field("status", any.getStatus()).
field("resources", resources).
field("dynRealms", dynRealms);
@@ -169,7 +171,7 @@ public class ElasticsearchUtils {
builder = builder.field("groupOwner", group.getGroupOwner().getKey());
}
- List<String> members = new ArrayList<>();
+ Set<String> members = new HashSet<>();
AuthContextUtils.callAsAdmin(domain, () -> {
members.addAll(groupDAO.findUMemberships(group).stream().
map(membership -> membership.getLeftEnd().getKey()).collect(Collectors.toList()));
diff --git a/pom.xml b/pom.xml
index 8f659f6..e810109 100644
--- a/pom.xml
+++ b/pom.xml
@@ -439,7 +439,7 @@ under the License.
<log4j.version>2.14.1</log4j.version>
<disruptor.version>3.4.4</disruptor.version>
- <commons-jexl.version>3.1</commons-jexl.version>
+ <commons-jexl.version>3.2</commons-jexl.version>
<commons-lang.version>3.12.0</commons-lang.version>
<commons-text.version>1.9</commons-text.version>
<commons-codec.version>1.15</commons-codec.version>