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 2017/11/02 14:36:43 UTC
[1/4] syncope git commit: [SYNCOPE-1232] Prevent AnyType removal if
AnyObject instances are found
Repository: syncope
Updated Branches:
refs/heads/2_0_X f9aed7b8d -> edb004d8d
refs/heads/master 3a9d872f1 -> 81a030bd7
[SYNCOPE-1232] Prevent AnyType removal if AnyObject instances are found
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/c3acdc3e
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/c3acdc3e
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/c3acdc3e
Branch: refs/heads/2_0_X
Commit: c3acdc3e57699af236c915bd2c8fb05bca7bcd92
Parents: f9aed7b
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Nov 2 14:33:47 2017 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Nov 2 14:33:47 2017 +0100
----------------------------------------------------------------------
.../org/apache/syncope/core/logic/AnyTypeLogic.java | 12 ++++++++++++
1 file changed, 12 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/c3acdc3e/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
index f967da8..a7a41ff 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
@@ -29,6 +29,7 @@ import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.to.AnyTypeTO;
import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
import org.apache.syncope.core.persistence.api.dao.NotFoundException;
import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
import org.apache.syncope.core.persistence.api.dao.DuplicateException;
@@ -48,6 +49,9 @@ public class AnyTypeLogic extends AbstractTransactionalLogic<AnyTypeTO> {
@Autowired
private AnyTypeDAO anyTypeDAO;
+ @Autowired
+ private AnyObjectDAO anyObjectDAO;
+
@PreAuthorize("hasRole('" + StandardEntitlement.ANYTYPE_READ + "')")
@Transactional(readOnly = true)
public AnyTypeTO read(final String key) {
@@ -92,6 +96,7 @@ public class AnyTypeLogic extends AbstractTransactionalLogic<AnyTypeTO> {
AnyType anyType = anyTypeDAO.find(anyTypeTO.getKey());
if (anyType == null) {
LOG.error("Could not find anyType '" + anyTypeTO.getKey() + "'");
+
throw new NotFoundException(anyTypeTO.getKey());
}
@@ -111,6 +116,13 @@ public class AnyTypeLogic extends AbstractTransactionalLogic<AnyTypeTO> {
}
try {
+ Integer anyObjects = anyObjectDAO.countByType().get(anyType);
+ if (anyObjects != null && anyObjects > 0) {
+ LOG.error("{} AnyObject instances found for {}, aborting", anyObjects, anyType);
+
+ throw new IllegalArgumentException("AnyObject instances found for " + key);
+ }
+
return binder.delete(anyType);
} catch (IllegalArgumentException e) {
SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidAnyType);
[3/4] syncope git commit: [SYNCOPE-1232] Prevent AnyType removal if
AnyObject instances are found
Posted by il...@apache.org.
[SYNCOPE-1232] Prevent AnyType removal if AnyObject instances are found
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/cd731aa1
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/cd731aa1
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/cd731aa1
Branch: refs/heads/master
Commit: cd731aa1b81664539bc7f818d6e111ad4e697d1a
Parents: 3a9d872
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Nov 2 14:33:47 2017 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Nov 2 15:36:21 2017 +0100
----------------------------------------------------------------------
.../org/apache/syncope/core/logic/AnyTypeLogic.java | 12 ++++++++++++
1 file changed, 12 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/cd731aa1/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
index 783d356..a0c70d0 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/AnyTypeLogic.java
@@ -27,6 +27,7 @@ import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.to.AnyTypeTO;
import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.lib.types.StandardEntitlement;
+import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
import org.apache.syncope.core.persistence.api.dao.NotFoundException;
import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
import org.apache.syncope.core.persistence.api.dao.DuplicateException;
@@ -46,6 +47,9 @@ public class AnyTypeLogic extends AbstractTransactionalLogic<AnyTypeTO> {
@Autowired
private AnyTypeDAO anyTypeDAO;
+ @Autowired
+ private AnyObjectDAO anyObjectDAO;
+
@PreAuthorize("hasRole('" + StandardEntitlement.ANYTYPE_READ + "')")
@Transactional(readOnly = true)
public AnyTypeTO read(final String key) {
@@ -84,6 +88,7 @@ public class AnyTypeLogic extends AbstractTransactionalLogic<AnyTypeTO> {
AnyType anyType = anyTypeDAO.find(anyTypeTO.getKey());
if (anyType == null) {
LOG.error("Could not find anyType '" + anyTypeTO.getKey() + "'");
+
throw new NotFoundException(anyTypeTO.getKey());
}
@@ -103,6 +108,13 @@ public class AnyTypeLogic extends AbstractTransactionalLogic<AnyTypeTO> {
}
try {
+ Integer anyObjects = anyObjectDAO.countByType().get(anyType);
+ if (anyObjects != null && anyObjects > 0) {
+ LOG.error("{} AnyObject instances found for {}, aborting", anyObjects, anyType);
+
+ throw new IllegalArgumentException("AnyObject instances found for " + key);
+ }
+
return binder.delete(anyType);
} catch (IllegalArgumentException e) {
SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidAnyType);
[4/4] syncope git commit: [SYNCOPE-1228] Graceful handling of parent
info for create
Posted by il...@apache.org.
[SYNCOPE-1228] Graceful handling of parent info for create
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/81a030bd
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/81a030bd
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/81a030bd
Branch: refs/heads/master
Commit: 81a030bd7196a54205deaadea12df3f8c8703b9c
Parents: cd731aa
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Nov 2 15:36:11 2017 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Nov 2 15:36:25 2017 +0100
----------------------------------------------------------------------
.../apache/syncope/core/logic/RealmLogic.java | 29 ++++++++++++++++++--
.../provisioning/api/data/RealmDataBinder.java | 2 +-
.../java/data/RealmDataBinderImpl.java | 4 +--
.../pushpull/DefaultRealmPullResultHandler.java | 2 +-
4 files changed, 31 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/81a030bd/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
index 03cfe0f..a0e888f 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
@@ -85,12 +85,37 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
@PreAuthorize("hasRole('" + StandardEntitlement.REALM_CREATE + "')")
public ProvisioningResult<RealmTO> create(final String parentPath, final RealmTO realmTO) {
- String fullPath = StringUtils.appendIfMissing(parentPath, "/") + realmTO.getName();
+ Realm parent;
+ if (StringUtils.isBlank(realmTO.getParent())) {
+ parent = realmDAO.findByFullPath(parentPath);
+ if (parent == null) {
+ LOG.error("Could not find parent realm " + parentPath);
+
+ throw new NotFoundException(parentPath);
+ }
+
+ realmTO.setParent(parent.getFullPath());
+ } else {
+ parent = realmDAO.find(realmTO.getParent());
+ if (parent == null) {
+ LOG.error("Could not find parent realm " + realmTO.getParent());
+
+ throw new NotFoundException(realmTO.getParent());
+ }
+
+ if (!parent.getFullPath().equals(parentPath)) {
+ SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidPath);
+ sce.getElements().add("Mismatching parent realm: " + parentPath + " Vs " + parent.getFullPath());
+ throw sce;
+ }
+ }
+
+ String fullPath = StringUtils.appendIfMissing(parent.getFullPath(), "/") + realmTO.getName();
if (realmDAO.findByFullPath(fullPath) != null) {
throw new DuplicateException(fullPath);
}
- Realm realm = realmDAO.save(binder.create(parentPath, realmTO));
+ Realm realm = realmDAO.save(binder.create(parent, realmTO));
PropagationByResource propByRes = new PropagationByResource();
realm.getResourceKeys().forEach(resource -> {
http://git-wip-us.apache.org/repos/asf/syncope/blob/81a030bd/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RealmDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RealmDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RealmDataBinder.java
index 44e00fc..1e3183c 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RealmDataBinder.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RealmDataBinder.java
@@ -24,7 +24,7 @@ import org.apache.syncope.core.persistence.api.entity.Realm;
public interface RealmDataBinder {
- Realm create(String parentPath, RealmTO realmTO);
+ Realm create(Realm parent, RealmTO realmTO);
PropagationByResource update(Realm realm, RealmTO realmTO);
http://git-wip-us.apache.org/repos/asf/syncope/blob/81a030bd/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
index 08bd787..8537331 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
@@ -98,11 +98,11 @@ public class RealmDataBinderImpl implements RealmDataBinder {
}
@Override
- public Realm create(final String parentPath, final RealmTO realmTO) {
+ public Realm create(final Realm parent, final RealmTO realmTO) {
Realm realm = entityFactory.newEntity(Realm.class);
realm.setName(realmTO.getName());
- realm.setParent(realmDAO.findByFullPath(parentPath));
+ realm.setParent(parent);
if (realmTO.getPasswordPolicy() != null) {
Policy policy = policyDAO.find(realmTO.getPasswordPolicy());
http://git-wip-us.apache.org/repos/asf/syncope/blob/81a030bd/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
index 69c0604..d4a54e7 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
@@ -232,7 +232,7 @@ public class DefaultRealmPullResultHandler
Result resultStatus;
try {
- Realm realm = realmDAO.save(binder.create(profile.getTask().getDestinatioRealm().getFullPath(), realmTO));
+ Realm realm = realmDAO.save(binder.create(profile.getTask().getDestinatioRealm(), realmTO));
PropagationByResource propByRes = new PropagationByResource();
for (String resource : realm.getResourceKeys()) {
[2/4] syncope git commit: [SYNCOPE-1228] Graceful handling of parent
info for create
Posted by il...@apache.org.
[SYNCOPE-1228] Graceful handling of parent info for create
Project: http://git-wip-us.apache.org/repos/asf/syncope/repo
Commit: http://git-wip-us.apache.org/repos/asf/syncope/commit/edb004d8
Tree: http://git-wip-us.apache.org/repos/asf/syncope/tree/edb004d8
Diff: http://git-wip-us.apache.org/repos/asf/syncope/diff/edb004d8
Branch: refs/heads/2_0_X
Commit: edb004d8da264aae453ef3b46ca37cd9d5d4d3e9
Parents: c3acdc3
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Nov 2 15:36:11 2017 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Nov 2 15:36:11 2017 +0100
----------------------------------------------------------------------
.../apache/syncope/core/logic/RealmLogic.java | 29 ++++++++++++++++++--
.../provisioning/api/data/RealmDataBinder.java | 2 +-
.../java/data/RealmDataBinderImpl.java | 4 +--
.../pushpull/DefaultRealmPullResultHandler.java | 2 +-
4 files changed, 31 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/syncope/blob/edb004d8/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
----------------------------------------------------------------------
diff --git a/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java b/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
index e82e495..261cb42 100644
--- a/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
+++ b/core/logic/src/main/java/org/apache/syncope/core/logic/RealmLogic.java
@@ -92,12 +92,37 @@ public class RealmLogic extends AbstractTransactionalLogic<RealmTO> {
@PreAuthorize("hasRole('" + StandardEntitlement.REALM_CREATE + "')")
public ProvisioningResult<RealmTO> create(final String parentPath, final RealmTO realmTO) {
- String fullPath = StringUtils.appendIfMissing(parentPath, "/") + realmTO.getName();
+ Realm parent;
+ if (StringUtils.isBlank(realmTO.getParent())) {
+ parent = realmDAO.findByFullPath(parentPath);
+ if (parent == null) {
+ LOG.error("Could not find parent realm " + parentPath);
+
+ throw new NotFoundException(parentPath);
+ }
+
+ realmTO.setParent(parent.getFullPath());
+ } else {
+ parent = realmDAO.find(realmTO.getParent());
+ if (parent == null) {
+ LOG.error("Could not find parent realm " + realmTO.getParent());
+
+ throw new NotFoundException(realmTO.getParent());
+ }
+
+ if (!parent.getFullPath().equals(parentPath)) {
+ SyncopeClientException sce = SyncopeClientException.build(ClientExceptionType.InvalidPath);
+ sce.getElements().add("Mismatching parent realm: " + parentPath + " Vs " + parent.getFullPath());
+ throw sce;
+ }
+ }
+
+ String fullPath = StringUtils.appendIfMissing(parent.getFullPath(), "/") + realmTO.getName();
if (realmDAO.findByFullPath(fullPath) != null) {
throw new DuplicateException(fullPath);
}
- Realm realm = realmDAO.save(binder.create(parentPath, realmTO));
+ Realm realm = realmDAO.save(binder.create(parent, realmTO));
PropagationByResource propByRes = new PropagationByResource();
for (String resource : realm.getResourceKeys()) {
http://git-wip-us.apache.org/repos/asf/syncope/blob/edb004d8/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RealmDataBinder.java
----------------------------------------------------------------------
diff --git a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RealmDataBinder.java b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RealmDataBinder.java
index 44e00fc..1e3183c 100644
--- a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RealmDataBinder.java
+++ b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/RealmDataBinder.java
@@ -24,7 +24,7 @@ import org.apache.syncope.core.persistence.api.entity.Realm;
public interface RealmDataBinder {
- Realm create(String parentPath, RealmTO realmTO);
+ Realm create(Realm parent, RealmTO realmTO);
PropagationByResource update(Realm realm, RealmTO realmTO);
http://git-wip-us.apache.org/repos/asf/syncope/blob/edb004d8/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
index 32678cc..4f7eda9 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/data/RealmDataBinderImpl.java
@@ -100,11 +100,11 @@ public class RealmDataBinderImpl implements RealmDataBinder {
}
@Override
- public Realm create(final String parentPath, final RealmTO realmTO) {
+ public Realm create(final Realm parent, final RealmTO realmTO) {
Realm realm = entityFactory.newEntity(Realm.class);
realm.setName(realmTO.getName());
- realm.setParent(realmDAO.findByFullPath(parentPath));
+ realm.setParent(parent);
if (realmTO.getPasswordPolicy() != null) {
Policy policy = policyDAO.find(realmTO.getPasswordPolicy());
http://git-wip-us.apache.org/repos/asf/syncope/blob/edb004d8/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
----------------------------------------------------------------------
diff --git a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
index 69c0604..d4a54e7 100644
--- a/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
+++ b/core/provisioning-java/src/main/java/org/apache/syncope/core/provisioning/java/pushpull/DefaultRealmPullResultHandler.java
@@ -232,7 +232,7 @@ public class DefaultRealmPullResultHandler
Result resultStatus;
try {
- Realm realm = realmDAO.save(binder.create(profile.getTask().getDestinatioRealm().getFullPath(), realmTO));
+ Realm realm = realmDAO.save(binder.create(profile.getTask().getDestinatioRealm(), realmTO));
PropagationByResource propByRes = new PropagationByResource();
for (String resource : realm.getResourceKeys()) {