You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by mm...@apache.org on 2020/03/07 15:49:49 UTC
[syncope] 05/06: clean up NPEs; add tests for attr rel policy
This is an automated email from the ASF dual-hosted git repository.
mmoayyed pushed a commit to branch SYNCOPE-163-1
in repository https://gitbox.apache.org/repos/asf/syncope.git
commit 7cf7746bfa40f323023e62143c2677583270b977
Author: Misagh Moayyed <mm...@gmail.com>
AuthorDate: Fri Mar 6 13:58:45 2020 +0330
clean up NPEs; add tests for attr rel policy
---
.../lib/attrs/AbstractAttrReleasePolicyConf.java | 2 +-
.../lib/attrs/AllowedAttrReleasePolicyConf.java | 4 +
.../syncope/common/lib/to/client/ClientAppTO.java | 5 +-
.../client/package-info.java} | 22 ++--
.../package-info.java} | 22 ++--
.../core/persistence/api/dao/PolicyDAO.java | 4 -
.../dao/authentication/AttrReleasePolicyDAO.java | 24 ++--
.../syncope/core/persistence/api/entity/Realm.java | 5 +
.../api/entity/authentication/ClientApp.java | 5 +
.../src/test/resources/domains/MasterContent.xml | 3 +-
.../core/persistence/jpa/dao/JPAPolicyDAO.java | 124 +++++++++------------
.../authentication/JPAAttrReleasePolicyDAO.java | 69 ++++++++++++
.../persistence/jpa/entity/JPAEntityFactory.java | 4 +
.../core/persistence/jpa/entity/JPARealm.java | 16 +++
.../entity/authentication/AbstractClientApp.java | 15 +++
.../jpa/inner/AttrReleasePolicyTest.java | 103 +++++++++++++++++
.../jpa/inner/AuthenticationModuleTest.java | 4 +-
.../jpa/inner/AuthenticationPolicyTest.java | 4 +-
.../jpa/inner/OIDCRelyingPartyTest.java | 4 +-
.../jpa/inner/SAML2ServiceProviderTest.java | 4 +-
.../src/test/resources/domains/MasterContent.xml | 10 ++
...ITCase.java => SAML2ServiceProviderITCase.java} | 6 +-
22 files changed, 349 insertions(+), 110 deletions(-)
diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/attrs/AbstractAttrReleasePolicyConf.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/attrs/AbstractAttrReleasePolicyConf.java
index 608943a..0c388df 100644
--- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/attrs/AbstractAttrReleasePolicyConf.java
+++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/attrs/AbstractAttrReleasePolicyConf.java
@@ -24,7 +24,7 @@ import javax.xml.bind.annotation.XmlType;
import java.io.Serializable;
@XmlType
-@XmlSeeAlso({AllAttrReleasePolicyConf.class, AllowedAttrReleasePolicyConf.class})
+@XmlSeeAlso({AllowedAttrReleasePolicyConf.class})
public abstract class AbstractAttrReleasePolicyConf implements Serializable, AttrReleasePolicyConf {
private static final long serialVersionUID = 1153200197344709778L;
diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/attrs/AllowedAttrReleasePolicyConf.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/attrs/AllowedAttrReleasePolicyConf.java
index 7d241bc..9dd3762 100644
--- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/attrs/AllowedAttrReleasePolicyConf.java
+++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/attrs/AllowedAttrReleasePolicyConf.java
@@ -29,6 +29,10 @@ import java.util.List;
public class AllowedAttrReleasePolicyConf extends AbstractAttrReleasePolicyConf implements AttrReleasePolicyConf {
private static final long serialVersionUID = -1969836661359025380L;
+ /**
+ * Specify the list of allowed attribute to release.
+ * Use the special {@code *} to release everything.
+ */
private List<String> allowedAttributes = new ArrayList<>();
public List<String> getAllowedAttributes() {
diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/client/ClientAppTO.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/client/ClientAppTO.java
index 1033781..0dc8052 100644
--- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/client/ClientAppTO.java
+++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/client/ClientAppTO.java
@@ -30,13 +30,16 @@ import org.apache.syncope.common.lib.to.AttrReleasePolicyTO;
import org.apache.syncope.common.lib.to.AuthenticationPolicyTO;
import org.apache.syncope.common.lib.to.EntityTO;
+import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
+@XmlRootElement(name = "clientApp")
@XmlType
@XmlSeeAlso({OIDCRelyingPartyTO.class, SAML2ServiceProviderTO.class})
@JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "@class")
-@JsonPropertyOrder(value = {"@class", "key", "name", "description", "authenticationPolicy", "accessPolicy"})
+@JsonPropertyOrder(value = {"@class", "key", "name", "description",
+ "authenticationPolicy", "accessPolicy", "attReleasePolicy"})
@Schema(subTypes = {OIDCRelyingPartyTO.class, SAML2ServiceProviderTO.class}, discriminatorProperty = "@class")
public abstract class ClientAppTO extends BaseBean implements EntityTO {
diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/attrs/AllAttrReleasePolicyConf.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/client/package-info.java
similarity index 58%
copy from common/am/lib/src/main/java/org/apache/syncope/common/lib/attrs/AllAttrReleasePolicyConf.java
copy to common/am/lib/src/main/java/org/apache/syncope/common/lib/to/client/package-info.java
index 3f097e2..503eff0 100644
--- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/attrs/AllAttrReleasePolicyConf.java
+++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/client/package-info.java
@@ -6,7 +6,8 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
@@ -14,15 +15,16 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
- *
*/
-package org.apache.syncope.common.lib.attrs;
+@XmlSchema(namespace = SyncopeConstants.NS)
+@XmlJavaTypeAdapters({ @XmlJavaTypeAdapter(type = Date.class, value = DateAdapter.class), })
+package org.apache.syncope.common.lib.to.client;
+
+import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.jaxb.DateAdapter;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlSchema;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
-@XmlRootElement(name = "AllAttrReleasePolicyConf")
-@XmlType
-public class AllAttrReleasePolicyConf extends AbstractAttrReleasePolicyConf implements AttrReleasePolicyConf {
- private static final long serialVersionUID = -1969836661359025380L;
-}
+import java.util.Date;
diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/attrs/AllAttrReleasePolicyConf.java b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/package-info.java
similarity index 58%
copy from common/am/lib/src/main/java/org/apache/syncope/common/lib/attrs/AllAttrReleasePolicyConf.java
copy to common/am/lib/src/main/java/org/apache/syncope/common/lib/to/package-info.java
index 3f097e2..54e71ba 100644
--- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/attrs/AllAttrReleasePolicyConf.java
+++ b/common/am/lib/src/main/java/org/apache/syncope/common/lib/to/package-info.java
@@ -6,7 +6,8 @@
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
@@ -14,15 +15,16 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
- *
*/
-package org.apache.syncope.common.lib.attrs;
+@XmlSchema(namespace = SyncopeConstants.NS)
+@XmlJavaTypeAdapters({ @XmlJavaTypeAdapter(type = Date.class, value = DateAdapter.class), })
+package org.apache.syncope.common.lib.to;
+
+import org.apache.syncope.common.lib.SyncopeConstants;
+import org.apache.syncope.common.lib.jaxb.DateAdapter;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
+import javax.xml.bind.annotation.XmlSchema;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
-@XmlRootElement(name = "AllAttrReleasePolicyConf")
-@XmlType
-public class AllAttrReleasePolicyConf extends AbstractAttrReleasePolicyConf implements AttrReleasePolicyConf {
- private static final long serialVersionUID = -1969836661359025380L;
-}
+import java.util.Date;
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PolicyDAO.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PolicyDAO.java
index 4d0cb1e..7dc74c2 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PolicyDAO.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/PolicyDAO.java
@@ -52,10 +52,6 @@ public interface PolicyDAO extends DAO<Policy> {
List<AccountPolicy> findByResource(ExternalResource resource);
- List<AuthenticationPolicy> findByAuthenticationRule(Implementation authenticationRule);
-
- List<AccessPolicy> findByAccessRule(Implementation accessRule);
-
List<Policy> findAll();
<T extends Policy> T save(T policy);
diff --git a/common/am/lib/src/main/java/org/apache/syncope/common/lib/attrs/AllAttrReleasePolicyConf.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/authentication/AttrReleasePolicyDAO.java
similarity index 60%
rename from common/am/lib/src/main/java/org/apache/syncope/common/lib/attrs/AllAttrReleasePolicyConf.java
rename to core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/authentication/AttrReleasePolicyDAO.java
index 3f097e2..b2c1d19 100644
--- a/common/am/lib/src/main/java/org/apache/syncope/common/lib/attrs/AllAttrReleasePolicyConf.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/dao/authentication/AttrReleasePolicyDAO.java
@@ -16,13 +16,23 @@
* under the License.
*
*/
-package org.apache.syncope.common.lib.attrs;
+package org.apache.syncope.core.persistence.api.dao.authentication;
-import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlType;
+import org.apache.syncope.core.persistence.api.dao.DAO;
+import org.apache.syncope.core.persistence.api.entity.policy.AttrReleasePolicy;
+
+import java.util.List;
+
+public interface AttrReleasePolicyDAO extends DAO<AttrReleasePolicy> {
+
+ AttrReleasePolicy find(String key);
+
+ List<AttrReleasePolicy> findAll();
+
+ AttrReleasePolicy save(AttrReleasePolicy authenticationModule);
+
+ void delete(String key);
+
+ void delete(AttrReleasePolicy authenticationModule);
-@XmlRootElement(name = "AllAttrReleasePolicyConf")
-@XmlType
-public class AllAttrReleasePolicyConf extends AbstractAttrReleasePolicyConf implements AttrReleasePolicyConf {
- private static final long serialVersionUID = -1969836661359025380L;
}
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Realm.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Realm.java
index 6c7a542..bcdbd9d 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Realm.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/Realm.java
@@ -19,6 +19,7 @@
package org.apache.syncope.core.persistence.api.entity;
import org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy;
+import org.apache.syncope.core.persistence.api.entity.policy.AttrReleasePolicy;
import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy;
import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import java.util.List;
@@ -54,6 +55,10 @@ public interface Realm extends Entity {
AccessPolicy getAccessPolicy();
+ void setAttrReleasePolicy(AttrReleasePolicy policy);
+
+ AttrReleasePolicy getAttrReleasePolicy();
+
boolean add(Implementation action);
List<? extends Implementation> getActions();
diff --git a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/authentication/ClientApp.java b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/authentication/ClientApp.java
index 1c3cce9..4a6cee1 100644
--- a/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/authentication/ClientApp.java
+++ b/core/persistence-api/src/main/java/org/apache/syncope/core/persistence/api/entity/authentication/ClientApp.java
@@ -20,6 +20,7 @@ package org.apache.syncope.core.persistence.api.entity.authentication;
import org.apache.syncope.core.persistence.api.entity.Entity;
import org.apache.syncope.core.persistence.api.entity.policy.AccessPolicy;
+import org.apache.syncope.core.persistence.api.entity.policy.AttrReleasePolicy;
import org.apache.syncope.core.persistence.api.entity.policy.AuthenticationPolicy;
public interface ClientApp extends Entity {
@@ -39,4 +40,8 @@ public interface ClientApp extends Entity {
AccessPolicy getAccessPolicy();
void setAccessPolicy(AccessPolicy policy);
+
+ AttrReleasePolicy getAttrReleasePolicy();
+
+ void setAttrReleasePolicy(AttrReleasePolicy policy);
}
diff --git a/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
index d25dc95..e9037de 100644
--- a/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa-json/src/test/resources/domains/MasterContent.xml
@@ -59,6 +59,7 @@ under the License.
<AccessPolicy id="419935c7-deb3-40b3-8a9a-683037e523a2" name="MyDefaultAccessPolicyConf"
description="an access policy" />
+
<RelationshipType id="inclusion" description="Models the act that an object is included in another"/>
<RelationshipType id="neighborhood" description="Models the act that an object is near another"/>
@@ -2398,4 +2399,4 @@ $$ }
<SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[AnyObjectLogic]:[]:[unassign]:[SUCCESS]" logLevel="DEBUG"/>
<SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[AnyObjectLogic]:[]:[unlink]:[SUCCESS]" logLevel="DEBUG"/>
<SyncopeLogger logType="AUDIT" logName="syncope.audit.[LOGIC]:[AnyObjectLogic]:[]:[update]:[SUCCESS]" logLevel="DEBUG"/>
-</dataset>
\ No newline at end of file
+</dataset>
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java
index f552f2a..fbaad71 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAPolicyDAO.java
@@ -18,9 +18,6 @@
*/
package org.apache.syncope.core.persistence.jpa.dao;
-import java.util.List;
-import javax.persistence.TypedQuery;
-import org.apache.syncope.common.lib.access.to.AccessPolicyTO;
import org.apache.syncope.core.persistence.api.dao.ExternalResourceDAO;
import org.apache.syncope.core.persistence.api.dao.PolicyDAO;
import org.apache.syncope.core.persistence.api.dao.RealmDAO;
@@ -29,18 +26,18 @@ import org.apache.syncope.core.persistence.api.entity.policy.AccessPolicy;
import org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy;
import org.apache.syncope.core.persistence.api.entity.policy.AttrReleasePolicy;
import org.apache.syncope.core.persistence.api.entity.policy.AuthenticationPolicy;
-import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy;
import org.apache.syncope.core.persistence.api.entity.policy.Policy;
import org.apache.syncope.core.persistence.api.entity.policy.PullPolicy;
import org.apache.syncope.core.persistence.api.entity.policy.PushPolicy;
+import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.persistence.jpa.entity.policy.AbstractPolicy;
import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAccessPolicy;
import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAccountPolicy;
import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAttrReleasePolicy;
import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAuthenticationPolicy;
-import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPullCorrelationRuleEntity;
import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPasswordPolicy;
+import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPullCorrelationRuleEntity;
import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPullPolicy;
import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPushCorrelationRuleEntity;
import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPushPolicy;
@@ -48,6 +45,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Repository;
+import javax.persistence.TypedQuery;
+
+import java.util.List;
+
@Repository
public class JPAPolicyDAO extends AbstractDAO<Policy> implements PolicyDAO {
@@ -61,20 +62,20 @@ public class JPAPolicyDAO extends AbstractDAO<Policy> implements PolicyDAO {
private static <T extends Policy> Class<? extends AbstractPolicy> getEntityReference(final Class<T> reference) {
return AccountPolicy.class.isAssignableFrom(reference)
- ? JPAAccountPolicy.class
- : PasswordPolicy.class.isAssignableFrom(reference)
- ? JPAPasswordPolicy.class
- : PullPolicy.class.isAssignableFrom(reference)
- ? JPAPullPolicy.class
- : PushPolicy.class.isAssignableFrom(reference)
- ? JPAPushPolicy.class
- : AuthenticationPolicy.class.isAssignableFrom(reference)
- ? JPAAuthenticationPolicy.class
- : AccessPolicy.class.isAssignableFrom(reference)
- ? JPAAttrReleasePolicy.class
- : AttrReleasePolicy.class.isAssignableFrom(reference)
- ? JPAAccessPolicy.class
- : null;
+ ? JPAAccountPolicy.class
+ : PasswordPolicy.class.isAssignableFrom(reference)
+ ? JPAPasswordPolicy.class
+ : PullPolicy.class.isAssignableFrom(reference)
+ ? JPAPullPolicy.class
+ : PushPolicy.class.isAssignableFrom(reference)
+ ? JPAPushPolicy.class
+ : AuthenticationPolicy.class.isAssignableFrom(reference)
+ ? JPAAuthenticationPolicy.class
+ : AccessPolicy.class.isAssignableFrom(reference)
+ ? JPAAttrReleasePolicy.class
+ : AttrReleasePolicy.class.isAssignableFrom(reference)
+ ? JPAAccessPolicy.class
+ : null;
}
@SuppressWarnings("unchecked")
@@ -86,7 +87,7 @@ public class JPAPolicyDAO extends AbstractDAO<Policy> implements PolicyDAO {
@Override
public <T extends Policy> List<T> find(final Class<T> reference) {
TypedQuery<T> query = entityManager().createQuery(
- "SELECT e FROM " + getEntityReference(reference).getSimpleName() + " e", reference);
+ "SELECT e FROM " + getEntityReference(reference).getSimpleName() + " e", reference);
return query.getResultList();
}
@@ -94,7 +95,7 @@ public class JPAPolicyDAO extends AbstractDAO<Policy> implements PolicyDAO {
@Override
public List<AccountPolicy> findByAccountRule(final Implementation accountRule) {
TypedQuery<AccountPolicy> query = entityManager().createQuery(
- "SELECT e FROM " + JPAAccountPolicy.class.getSimpleName() + " e "
+ "SELECT e FROM " + JPAAccountPolicy.class.getSimpleName() + " e "
+ "WHERE :accountRule MEMBER OF e.rules", AccountPolicy.class);
query.setParameter("accountRule", accountRule);
@@ -104,7 +105,7 @@ public class JPAPolicyDAO extends AbstractDAO<Policy> implements PolicyDAO {
@Override
public List<PasswordPolicy> findByPasswordRule(final Implementation passwordRule) {
TypedQuery<PasswordPolicy> query = entityManager().createQuery(
- "SELECT e FROM " + JPAPasswordPolicy.class.getSimpleName() + " e "
+ "SELECT e FROM " + JPAPasswordPolicy.class.getSimpleName() + " e "
+ "WHERE :passwordRule MEMBER OF e.rules", PasswordPolicy.class);
query.setParameter("passwordRule", passwordRule);
@@ -112,9 +113,19 @@ public class JPAPolicyDAO extends AbstractDAO<Policy> implements PolicyDAO {
}
@Override
+ public List<PullPolicy> findByPullCorrelationRule(final Implementation correlationRule) {
+ TypedQuery<PullPolicy> query = entityManager().createQuery(
+ "SELECT DISTINCT e.pullPolicy FROM " + JPAPullCorrelationRuleEntity.class.getSimpleName() + " e "
+ + "WHERE e.implementation=:correlationRule", PullPolicy.class);
+ query.setParameter("correlationRule", correlationRule);
+
+ return query.getResultList();
+ }
+
+ @Override
public List<AuthenticationPolicy> findByAuthenticationPolicy(final Implementation policy) {
TypedQuery<AuthenticationPolicy> query = entityManager().createQuery(
- "SELECT e FROM " + JPAAuthenticationPolicy.class.getSimpleName() + " e "
+ "SELECT e FROM " + JPAAuthenticationPolicy.class.getSimpleName() + " e "
+ "WHERE :authenticationPolicy MEMBER OF e.rules", AuthenticationPolicy.class);
query.setParameter("authenticationPolicy", policy);
return query.getResultList();
@@ -123,7 +134,7 @@ public class JPAPolicyDAO extends AbstractDAO<Policy> implements PolicyDAO {
@Override
public List<AccessPolicy> findByAccessPolicy(final Implementation policy) {
TypedQuery<AccessPolicy> query = entityManager().createQuery(
- "SELECT e FROM " + JPAAuthenticationPolicy.class.getSimpleName() + " e "
+ "SELECT e FROM " + JPAAuthenticationPolicy.class.getSimpleName() + " e "
+ "WHERE :accessPolicy MEMBER OF e.rules", AccessPolicy.class);
query.setParameter("accessPolicy", policy);
return query.getResultList();
@@ -139,19 +150,9 @@ public class JPAPolicyDAO extends AbstractDAO<Policy> implements PolicyDAO {
}
@Override
- public List<PullPolicy> findByPullCorrelationRule(final Implementation correlationRule) {
- TypedQuery<PullPolicy> query = entityManager().createQuery(
- "SELECT DISTINCT e.pullPolicy FROM " + JPAPullCorrelationRuleEntity.class.getSimpleName() + " e "
- + "WHERE e.implementation=:correlationRule", PullPolicy.class);
- query.setParameter("correlationRule", correlationRule);
-
- return query.getResultList();
- }
-
- @Override
public List<PushPolicy> findByPushCorrelationRule(final Implementation correlationRule) {
TypedQuery<PushPolicy> query = entityManager().createQuery(
- "SELECT DISTINCT e.pushPolicy FROM " + JPAPushCorrelationRuleEntity.class.getSimpleName() + " e "
+ "SELECT DISTINCT e.pushPolicy FROM " + JPAPushCorrelationRuleEntity.class.getSimpleName() + " e "
+ "WHERE e.implementation=:correlationRule", PushPolicy.class);
query.setParameter("correlationRule", correlationRule);
@@ -161,7 +162,7 @@ public class JPAPolicyDAO extends AbstractDAO<Policy> implements PolicyDAO {
@Override
public List<AccountPolicy> findByResource(final ExternalResource resource) {
TypedQuery<AccountPolicy> query = entityManager().createQuery(
- "SELECT e FROM " + JPAAccountPolicy.class.getSimpleName() + " e "
+ "SELECT e FROM " + JPAAccountPolicy.class.getSimpleName() + " e "
+ "WHERE :resource MEMBER OF e.resources", AccountPolicy.class);
query.setParameter("resource", resource);
@@ -171,27 +172,7 @@ public class JPAPolicyDAO extends AbstractDAO<Policy> implements PolicyDAO {
@Override
public List<Policy> findAll() {
TypedQuery<Policy> query = entityManager().createQuery(
- "SELECT e FROM " + AbstractPolicy.class.getSimpleName() + " e", Policy.class);
- return query.getResultList();
- }
-
- @Override
- public List<AuthenticationPolicy> findByAuthenticationRule(final Implementation authenticationRule) {
- TypedQuery<AuthenticationPolicy> query = entityManager().createQuery(
- "SELECT e FROM " + JPAAuthenticationPolicy.class.getSimpleName() + " e "
- + "WHERE :authenticationRule MEMBER OF e.rules", AuthenticationPolicy.class);
- query.setParameter("authenticationRule", authenticationRule);
-
- return query.getResultList();
- }
-
- @Override
- public List<AccessPolicy> findByAccessRule(final Implementation accessRule) {
- TypedQuery<AccessPolicy> query = entityManager().createQuery(
- "SELECT e FROM " + JPAAccessPolicy.class.getSimpleName() + " e "
- + "WHERE :accessRule MEMBER OF e.rules", AccessPolicy.class);
- query.setParameter("accessRule", accessRule);
-
+ "SELECT e FROM " + AbstractPolicy.class.getSimpleName() + " e", Policy.class);
return query.getResultList();
}
@@ -202,19 +183,24 @@ public class JPAPolicyDAO extends AbstractDAO<Policy> implements PolicyDAO {
@Override
public <T extends Policy> void delete(final T policy) {
- if (!(policy instanceof AccessPolicyTO)) {
- realmDAO.findByPolicy(policy).forEach(realm -> {
- if (policy instanceof AccountPolicy) {
- realm.setAccountPolicy(null);
- } else if (policy instanceof PasswordPolicy) {
- realm.setPasswordPolicy(null);
- } else if (policy instanceof AuthenticationPolicy) {
- realm.setAuthenticationPolicy(null);
- }
- });
- }
- if (!(policy instanceof AuthenticationPolicy) && !(policy instanceof AccessPolicyTO)) {
+ realmDAO.findByPolicy(policy).forEach(realm -> {
+ if (policy instanceof AccountPolicy) {
+ realm.setAccountPolicy(null);
+ } else if (policy instanceof PasswordPolicy) {
+ realm.setPasswordPolicy(null);
+ } else if (policy instanceof AuthenticationPolicy) {
+ realm.setAuthenticationPolicy(null);
+ } else if (policy instanceof AccessPolicy) {
+ realm.setAccessPolicy(null);
+ } else if (policy instanceof AttrReleasePolicy) {
+ realm.setAttrReleasePolicy(null);
+ }
+ });
+
+ if (!(policy instanceof AuthenticationPolicy)
+ && !(policy instanceof AttrReleasePolicy)
+ && !(policy instanceof AccessPolicy)) {
resourceDAO.findByPolicy(policy).forEach(resource -> {
if (policy instanceof AccountPolicy) {
resource.setAccountPolicy(null);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/authentication/JPAAttrReleasePolicyDAO.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/authentication/JPAAttrReleasePolicyDAO.java
new file mode 100644
index 0000000..c210fda
--- /dev/null
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/authentication/JPAAttrReleasePolicyDAO.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.syncope.core.persistence.jpa.dao.authentication;
+
+import org.apache.syncope.core.persistence.api.dao.authentication.AttrReleasePolicyDAO;
+import org.apache.syncope.core.persistence.api.entity.policy.AttrReleasePolicy;
+import org.apache.syncope.core.persistence.jpa.dao.AbstractDAO;
+import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAttrReleasePolicy;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.persistence.TypedQuery;
+
+import java.util.List;
+
+@Repository
+public class JPAAttrReleasePolicyDAO extends AbstractDAO<AttrReleasePolicy> implements AttrReleasePolicyDAO {
+
+ @Override
+ public AttrReleasePolicy find(final String key) {
+ return entityManager().find(JPAAttrReleasePolicy.class, key);
+ }
+
+ @Transactional(readOnly = true)
+ @Override
+ public List<AttrReleasePolicy> findAll() {
+ TypedQuery<AttrReleasePolicy> query = entityManager().createQuery(
+ "SELECT e FROM " + JPAAttrReleasePolicy.class.getSimpleName() + " e", AttrReleasePolicy.class);
+
+ return query.getResultList();
+ }
+
+ @Override
+ public AttrReleasePolicy save(final AttrReleasePolicy policy) {
+ return entityManager().merge(policy);
+ }
+
+ @Override
+ public void delete(final String key) {
+ AttrReleasePolicy policy = find(key);
+ if (policy == null) {
+ return;
+ }
+
+ delete(policy);
+ }
+
+ @Override
+ public void delete(final AttrReleasePolicy policy) {
+ entityManager().remove(policy);
+ }
+
+}
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAEntityFactory.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAEntityFactory.java
index e7953e6..2dc357a 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAEntityFactory.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPAEntityFactory.java
@@ -66,6 +66,7 @@ import org.apache.syncope.core.persistence.api.entity.group.Group;
import org.apache.syncope.core.persistence.api.entity.group.TypeExtension;
import org.apache.syncope.core.persistence.api.entity.policy.AccessPolicy;
import org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy;
+import org.apache.syncope.core.persistence.api.entity.policy.AttrReleasePolicy;
import org.apache.syncope.core.persistence.api.entity.policy.AuthenticationPolicy;
import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy;
import org.apache.syncope.core.persistence.api.entity.policy.PullCorrelationRuleEntity;
@@ -117,6 +118,7 @@ import org.apache.syncope.core.persistence.jpa.entity.group.JPAGroup;
import org.apache.syncope.core.persistence.jpa.entity.group.JPATypeExtension;
import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAccessPolicy;
import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAccountPolicy;
+import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAttrReleasePolicy;
import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAuthenticationPolicy;
import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPasswordPolicy;
import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPullCorrelationRuleEntity;
@@ -309,6 +311,8 @@ public class JPAEntityFactory implements EntityFactory {
result = (E) new JPAAuthenticationPolicy();
} else if (reference.equals(AccessPolicy.class)) {
result = (E) new JPAAccessPolicy();
+ } else if (reference.equals(AttrReleasePolicy.class)) {
+ result = (E) new JPAAttrReleasePolicy();
} else if (reference.equals(OIDCRelyingParty.class)) {
result = (E) new JPAOIDCRelyingParty();
} else if (reference.equals(SAML2ServiceProvider.class)) {
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java
index 79a6dfa..91633d4 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/JPARealm.java
@@ -26,9 +26,11 @@ import org.apache.syncope.core.persistence.api.entity.AnyType;
import org.apache.syncope.core.persistence.api.entity.Implementation;
import org.apache.syncope.core.persistence.api.entity.Realm;
import org.apache.syncope.core.persistence.api.entity.policy.AccountPolicy;
+import org.apache.syncope.core.persistence.api.entity.policy.AttrReleasePolicy;
import org.apache.syncope.core.persistence.api.entity.policy.PasswordPolicy;
import org.apache.syncope.core.persistence.api.entity.resource.ExternalResource;
import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAccountPolicy;
+import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAttrReleasePolicy;
import org.apache.syncope.core.persistence.jpa.entity.policy.JPAPasswordPolicy;
import org.apache.syncope.core.persistence.jpa.entity.resource.JPAExternalResource;
import org.apache.syncope.core.persistence.jpa.validation.entity.RealmCheck;
@@ -84,6 +86,9 @@ public class JPARealm extends AbstractGeneratedKeyEntity implements Realm {
@ManyToOne(fetch = FetchType.EAGER)
private JPAAccessPolicy accessPolicy;
+ @ManyToOne(fetch = FetchType.EAGER)
+ private JPAAttrReleasePolicy attrReleasePolicy;
+
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(name = TABLE + "Action",
joinColumns =
@@ -209,6 +214,17 @@ public class JPARealm extends AbstractGeneratedKeyEntity implements Realm {
}
@Override
+ public void setAttrReleasePolicy(final AttrReleasePolicy policy) {
+ checkType(policy, JPAAttrReleasePolicy.class);
+ this.attrReleasePolicy = (JPAAttrReleasePolicy) policy;
+ }
+
+ @Override
+ public AttrReleasePolicy getAttrReleasePolicy() {
+ return this.attrReleasePolicy;
+ }
+
+ @Override
public boolean add(final ExternalResource resource) {
checkType(resource, JPAExternalResource.class);
return resources.contains((JPAExternalResource) resource) || resources.add((JPAExternalResource) resource);
diff --git a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/authentication/AbstractClientApp.java b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/authentication/AbstractClientApp.java
index 4ad3910..d2926e8 100644
--- a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/authentication/AbstractClientApp.java
+++ b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/entity/authentication/AbstractClientApp.java
@@ -19,9 +19,11 @@
package org.apache.syncope.core.persistence.jpa.entity.authentication;
import org.apache.syncope.core.persistence.api.entity.authentication.ClientApp;
+import org.apache.syncope.core.persistence.api.entity.policy.AttrReleasePolicy;
import org.apache.syncope.core.persistence.api.entity.policy.AuthenticationPolicy;
import org.apache.syncope.core.persistence.api.entity.policy.AccessPolicy;
import org.apache.syncope.core.persistence.jpa.entity.AbstractGeneratedKeyEntity;
+import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAttrReleasePolicy;
import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAuthenticationPolicy;
import org.apache.syncope.core.persistence.jpa.entity.policy.JPAAccessPolicy;
@@ -47,6 +49,9 @@ public class AbstractClientApp extends AbstractGeneratedKeyEntity implements Cli
@ManyToOne(fetch = FetchType.EAGER)
private JPAAccessPolicy accessPolicy;
+ @ManyToOne(fetch = FetchType.EAGER)
+ private JPAAttrReleasePolicy attrReleasePolicy;
+
@Override
public String getName() {
return name;
@@ -87,4 +92,14 @@ public class AbstractClientApp extends AbstractGeneratedKeyEntity implements Cli
this.accessPolicy = (JPAAccessPolicy) accessPolicy;
}
+ @Override
+ public AttrReleasePolicy getAttrReleasePolicy() {
+ return this.attrReleasePolicy;
+ }
+
+ @Override
+ public void setAttrReleasePolicy(final AttrReleasePolicy policy) {
+ checkType(policy, JPAAccessPolicy.class);
+ this.attrReleasePolicy = (JPAAttrReleasePolicy) policy;
+ }
}
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AttrReleasePolicyTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AttrReleasePolicyTest.java
new file mode 100644
index 0000000..f801229
--- /dev/null
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AttrReleasePolicyTest.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.syncope.core.persistence.jpa.inner;
+
+import org.apache.syncope.common.lib.attrs.AllowedAttrReleasePolicyConf;
+import org.apache.syncope.common.lib.types.AMImplementationType;
+import org.apache.syncope.common.lib.types.ImplementationEngine;
+import org.apache.syncope.core.persistence.api.dao.ImplementationDAO;
+import org.apache.syncope.core.persistence.api.dao.authentication.AttrReleasePolicyDAO;
+import org.apache.syncope.core.persistence.api.entity.Implementation;
+import org.apache.syncope.core.persistence.api.entity.policy.AttrReleasePolicy;
+import org.apache.syncope.core.persistence.jpa.AbstractTest;
+import org.apache.syncope.core.provisioning.api.serialization.POJOHelper;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.UUID;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+
+@Transactional("Master")
+public class AttrReleasePolicyTest extends AbstractTest {
+
+ @Autowired
+ private AttrReleasePolicyDAO attrReleasePolicyDAO;
+
+ @Autowired
+ private ImplementationDAO implementationDAO;
+
+ @Test
+ public void find() {
+ AttrReleasePolicy policy = attrReleasePolicyDAO.find("019935c7-deb3-40b3-8a9a-683037e523a2");
+ assertNull(policy);
+ policy = attrReleasePolicyDAO.find("319935c7-deb3-40b3-8a9a-683037e523a2");
+ assertNotNull(policy);
+ policy = attrReleasePolicyDAO.find(UUID.randomUUID().toString());
+ assertNull(policy);
+ }
+
+ @Test
+ public void findAll() {
+ List<AttrReleasePolicy> policies = attrReleasePolicyDAO.findAll();
+ assertNotNull(policies);
+ assertEquals(2, policies.size());
+ }
+
+ @Test
+ public void save() {
+ int beforeCount = attrReleasePolicyDAO.findAll().size();
+ AttrReleasePolicy policy = entityFactory.newEntity(AttrReleasePolicy.class);
+ policy.setName("AttrReleasePolicyAllowEverything");
+ policy.setDescription("This is a sample attr release policy that releases everything");
+
+ AllowedAttrReleasePolicyConf conf = new AllowedAttrReleasePolicyConf();
+ conf.setAllowedAttributes(List.of("*"));
+ conf.setName("AttrReleasePolicyAllowEverything");
+
+ Implementation type = entityFactory.newEntity(Implementation.class);
+ type.setKey("AttrReleasePolicyAllowEverything");
+ type.setEngine(ImplementationEngine.JAVA);
+ type.setType(AMImplementationType.ATTR_RELEASE_POLICY_CONFIGURATIONS);
+ type.setBody(POJOHelper.serialize(conf));
+ type = implementationDAO.save(type);
+
+ policy.addConfiguration(type);
+ attrReleasePolicyDAO.save(policy);
+
+ assertNotNull(policy);
+ assertNotNull(policy.getKey());
+
+ int afterCount = attrReleasePolicyDAO.findAll().size();
+ assertEquals(afterCount, beforeCount + 1);
+ }
+
+ @Test
+ public void delete() {
+ AttrReleasePolicy policy = attrReleasePolicyDAO.find("319935c7-deb3-40b3-8a9a-683037e523a2");
+ assertNotNull(policy);
+ attrReleasePolicyDAO.delete("319935c7-deb3-40b3-8a9a-683037e523a2");
+ policy = attrReleasePolicyDAO.find("319935c7-deb3-40b3-8a9a-683037e523a2");
+ assertNull(policy);
+ }
+}
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AuthenticationModuleTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AuthenticationModuleTest.java
index 37db549..26e7bc4 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AuthenticationModuleTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AuthenticationModuleTest.java
@@ -39,7 +39,9 @@ import java.util.List;
import java.util.Map;
import java.util.UUID;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
@Transactional("Master")
public class AuthenticationModuleTest extends AbstractTest {
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AuthenticationPolicyTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AuthenticationPolicyTest.java
index 9303c14..d5f2942 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AuthenticationPolicyTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/AuthenticationPolicyTest.java
@@ -34,7 +34,9 @@ import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.UUID;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
@Transactional("Master")
public class AuthenticationPolicyTest extends AbstractTest {
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/OIDCRelyingPartyTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/OIDCRelyingPartyTest.java
index c2fd74f..a9b33f9 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/OIDCRelyingPartyTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/OIDCRelyingPartyTest.java
@@ -27,7 +27,9 @@ import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
@Transactional("Master")
public class OIDCRelyingPartyTest extends AbstractClientAppTest {
diff --git a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/SAML2ServiceProviderTest.java b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/SAML2ServiceProviderTest.java
index 19898d0..c3a287d 100644
--- a/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/SAML2ServiceProviderTest.java
+++ b/core/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/inner/SAML2ServiceProviderTest.java
@@ -27,7 +27,9 @@ import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
-import static org.junit.jupiter.api.Assertions.*;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
@Transactional("Master")
public class SAML2ServiceProviderTest extends AbstractClientAppTest {
diff --git a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
index 1556977..7375f12 100644
--- a/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
+++ b/core/persistence-jpa/src/test/resources/domains/MasterContent.xml
@@ -59,6 +59,16 @@ under the License.
<AccessPolicy id="419935c7-deb3-40b3-8a9a-683037e523a2" name="MyDefaultAccessPolicyConf"
description="an access policy" />
+ <!-- Attr Release Policies -->
+ <Implementation id="AllowedAttrReleasePolicyConf" type="ATTR_RELEASE_CONFIGURATIONS" engine="JAVA"
+ body='{"@class":"org.apache.syncope.common.lib.attrs.AllowedAttrReleasePolicyConf","name":"AllowedAttrReleasePolicy","allowedAttributes":["cn","givenName","uid"]}'/>
+ <AttrReleasePolicy id="319935c7-deb3-40b3-8a9a-683037e523a2" name="AllowedAttrReleasePolicy"
+ description="allowed attribute release policy policy" />
+
+ <Implementation id="DenyAttrReleasePolicyConf" type="ATTR_RELEASE_CONFIGURATIONS" engine="JAVA"
+ body='{"@class":"org.apache.syncope.common.lib.attrs.AllowedAttrReleasePolicyConf","name":"DenyAttrReleasePolicyConf"}'/>
+ <AttrReleasePolicy id="219935c7-deb3-40b3-8a9a-683037e523a2" name="DenyAttrReleasePolicy" description="deny attribute release policy policy" />
+
<RelationshipType id="inclusion" description="Models the act that an object is included in another"/>
<RelationshipType id="neighborhood" description="Models the act that an object is near another"/>
diff --git a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2SPITCase.java b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2ServiceProviderITCase.java
similarity index 92%
rename from fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2SPITCase.java
rename to fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2ServiceProviderITCase.java
index 95dac54..8f217979 100644
--- a/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2SPITCase.java
+++ b/fit/core-reference/src/test/java/org/apache/syncope/fit/core/SAML2ServiceProviderITCase.java
@@ -20,14 +20,14 @@ package org.apache.syncope.fit.core;
import static org.junit.jupiter.api.Assertions.assertNotNull;
-import org.apache.syncope.common.lib.access.to.AccessPolicyTO;
-import org.apache.syncope.common.lib.authentication.policy.to.AuthenticationPolicyTO;
+import org.apache.syncope.common.lib.to.AccessPolicyTO;
+import org.apache.syncope.common.lib.to.AuthenticationPolicyTO;
import org.apache.syncope.common.lib.to.client.SAML2ServiceProviderTO;
import org.apache.syncope.common.lib.types.PolicyType;
import org.apache.syncope.fit.AbstractITCase;
import org.junit.jupiter.api.Test;
-public class SAML2SPITCase extends AbstractITCase {
+public class SAML2ServiceProviderITCase extends AbstractITCase {
@Test
public void create() {