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 2019/03/27 16:33:44 UTC
[syncope] branch 2_1_X updated: [SYNCOPE-1453] MappingItem with
"mustChangePassword" field cannot be provisioned and updated during import
This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 2_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/2_1_X by this push:
new ac58796 [SYNCOPE-1453] MappingItem with "mustChangePassword" field cannot be provisioned and updated during import
ac58796 is described below
commit ac58796c8fc10b484389b63abca1182297768224
Author: Dmitriy Brashevets <dm...@gmail.com>
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 | 12 +++++++++++-
.../core/provisioning/java/utils/ConnObjectUtils.java | 5 ++++-
.../syncope/core/provisioning/java/utils/MappingUtils.java | 6 ++++++
3 files changed, 21 insertions(+), 2 deletions(-)
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 2ccfa5c..1006cfb 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
@@ -70,6 +70,7 @@ import org.apache.syncope.core.persistence.api.entity.resource.Provision;
import org.apache.syncope.core.persistence.api.entity.user.UMembership;
import org.apache.syncope.core.persistence.api.entity.user.UPlainAttr;
import org.apache.syncope.core.persistence.api.entity.user.URelationship;
+import org.apache.syncope.core.provisioning.java.utils.MappingUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
@@ -329,6 +330,15 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
if (userPatch.getMustChangePassword() != null) {
user.setMustChangePassword(userPatch.getMustChangePassword().getValue());
+
+ propByRes.addAll(
+ ResourceOperation.UPDATE,
+ anyUtils.getAllResources(toBeUpdated).stream().
+ filter(resource -> resource.getProvision(toBeUpdated.getType()).isPresent()).
+ filter(resource -> MappingUtils.hasMustChangePassword(
+ resource.getProvision(toBeUpdated.getType()).get())).
+ map(Entity::getKey).
+ collect(Collectors.toSet()));
}
// roles
@@ -422,7 +432,7 @@ public class UserDataBinderImpl extends AbstractAnyDataBinder implements UserDat
plainAttrValueDAO.deleteAll(attr, anyUtils);
plainAttrDAO.delete(attr);
});
-
+
if (membPatch.getOperation() == PatchOperation.DELETE) {
groupDAO.findAllResourceKeys(membership.getRightEnd().getKey()).stream().
filter(resource -> reasons.containsKey(resource)).
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 26b9d8b..fd475a9 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
@@ -261,7 +261,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 5d0c9d2..d4d096e 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
@@ -214,6 +214,12 @@ public final class MappingUtils {
return builder.build();
}
+ public static boolean hasMustChangePassword(final Provision provision) {
+ return provision != null && provision.getMapping() != null
+ && provision.getMapping().getItems().stream().
+ anyMatch(mappingItem -> "mustChangePassword".equals(mappingItem.getIntAttrName()));
+ }
+
/**
* Private default constructor, for static-only classes.
*/