This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 2_0_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/2_0_X by this push:
new 5c384b0 [SYNCOPE-1453] MappingItem with "mustChangePassword" field
cannot be provisioned and updated during import
5c384b0 is described below
commit 5c384b068005173dc7e2dd9bfac6de178f3d3a44
Author: Dmitriy Brashevets <[email protected]>
AuthorDate: Wed Mar 27 14:42:26 2019 +0300
[SYNCOPE-1453] MappingItem with "mustChangePassword" field cannot be
provisioned and updated during import
---
.../core/provisioning/java/data/UserDataBinderImpl.java | 9 +++++++++
.../core/provisioning/java/utils/ConnObjectUtils.java | 5 ++++-
.../syncope/core/provisioning/java/utils/MappingUtils.java | 13 +++++++++++++
3 files changed, 26 insertions(+), 1 deletion(-)
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
index febbc90..e1a75da 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/UserDataBinderImpl.java
@@ -60,6 +60,7 @@ import
org.apache.syncope.core.persistence.api.entity.user.SecurityQuestion;
import org.apache.syncope.core.persistence.api.entity.user.User;
import org.apache.syncope.core.provisioning.api.PropagationByResource;
import org.apache.syncope.core.provisioning.api.data.UserDataBinder;
+import org.apache.syncope.core.provisioning.java.utils.MappingUtils;
import org.apache.syncope.core.spring.security.AuthContextUtils;
import org.apache.syncope.core.spring.BeanUtils;
import org.apache.syncope.core.provisioning.api.utils.EntityUtils;
@@ -349,6 +350,14 @@ public class UserDataBinderImpl extends
AbstractAnyDataBinder implements UserDat
if (userPatch.getMustChangePassword() != null) {
user.setMustChangePassword(userPatch.getMustChangePassword().getValue());
+ Set<ExternalResource> externalResources =
anyUtils.getAllResources(toBeUpdated);
+
+ for (ExternalResource resource : externalResources) {
+ Provision provision =
resource.getProvision(toBeUpdated.getType());
+ if (MappingUtils.hasMustChangePassword(provision)) {
+ propByRes.add(ResourceOperation.UPDATE, resource.getKey());
+ }
+ }
}
// roles
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/ConnObjectUtils.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/ConnObjectUtils.java
index c87f292..a564e75 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/ConnObjectUtils.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/ConnObjectUtils.java
@@ -266,7 +266,10 @@ public class ConnObjectUtils {
}
updatedUser.setSecurityQuestion(originalUser.getSecurityQuestion());
-
updatedUser.setMustChangePassword(originalUser.isMustChangePassword());
+
+ if (!MappingUtils.hasMustChangePassword(provision)) {
+
updatedUser.setMustChangePassword(originalUser.isMustChangePassword());
+ }
anyPatch = (T) AnyOperations.diff(updatedUser,
originalUser, true);
break;
diff --git
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/MappingUtils.java
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/MappingUtils.java
index f0b2551..9f1028a 100644
---
a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/MappingUtils.java
+++
b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/utils/MappingUtils.java
@@ -23,6 +23,8 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
+
+import org.apache.commons.collections4.IterableUtils;
import org.apache.commons.collections4.ListUtils;
import org.apache.commons.collections4.Predicate;
import org.apache.commons.jexl3.JexlContext;
@@ -244,6 +246,17 @@ public final class MappingUtils {
return builder.build();
}
+ public static boolean hasMustChangePassword(final Provision provision) {
+ return provision != null && provision.getMapping() != null
+ && IterableUtils.matchesAny(provision.getMapping().getItems(),
new Predicate<MappingItem>() {
+
+ @Override
+ public boolean evaluate(final MappingItem mappingItem) {
+ return
"mustChangePassword".equals(mappingItem.getIntAttrName());
+ }
+ });
+ }
+
/**
* Private default constructor, for static-only classes.
*/