This is an automated email from the ASF dual-hosted git repository.
ilgrosso pushed a commit to branch 4_0_X
in repository https://gitbox.apache.org/repos/asf/syncope.git
The following commit(s) were added to refs/heads/4_0_X by this push:
new 3adc9bcff0 Rationalize AdminRealmFilter for AnySearchDAO impls
3adc9bcff0 is described below
commit 3adc9bcff088d8fe71f023170350c547c46f8bd6
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Thu Aug 13 10:26:04 2026 +0200
Rationalize AdminRealmFilter for AnySearchDAO impls
---
.../jpa/dao/AbstractJPAAnySearchDAO.java | 43 +++++++-------
.../persistence/neo4j/dao/Neo4jAnySearchDAO.java | 45 +++++++--------
.../dao/ElasticsearchAnySearchDAO.java | 67 ++++++++++++----------
.../opensearch/dao/OpenSearchAnySearchDAO.java | 65 +++++++++++----------
4 files changed, 112 insertions(+), 108 deletions(-)
diff --git
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractJPAAnySearchDAO.java
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractJPAAnySearchDAO.java
index 666e6481bf..f0fcf02405 100644
---
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractJPAAnySearchDAO.java
+++
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/AbstractJPAAnySearchDAO.java
@@ -698,34 +698,31 @@ abstract class AbstractJPAAnySearchDAO extends
AbstractAnySearchDAO {
Set<String> dynRealmKeys = new HashSet<>();
Set<String> groupOwners = new HashSet<>();
- if (recursive) {
- adminRealms.forEach(realmPath ->
RealmUtils.GroupOwnerRealm.of(realmPath).ifPresentOrElse(
- goRealm -> groupOwners.add(goRealm.groupKey()),
- () -> {
- if (realmPath.startsWith("/")) {
- Realm realm =
realmSearchDAO.findByFullPath(realmPath).orElseThrow(() -> {
- SyncopeClientException noRealm =
-
SyncopeClientException.build(ClientExceptionType.InvalidRealm);
- noRealm.getElements().add("Invalid realm
specified: " + realmPath);
- return noRealm;
- });
+ adminRealms.forEach(realmPath ->
RealmUtils.GroupOwnerRealm.of(realmPath).ifPresentOrElse(
+ realm -> groupOwners.add(realm.groupKey()),
+ () -> {
+ if (realmPath.startsWith("/")) {
+ Realm realm =
realmSearchDAO.findByFullPath(realmPath).orElseThrow(() -> {
+ SyncopeClientException noRealm =
SyncopeClientException.build(
+ ClientExceptionType.InvalidRealm);
+ noRealm.getElements().add("Invalid realm
specified: " + realmPath);
+ return noRealm;
+ });
+ if (recursive) {
realmKeys.addAll(realmSearchDAO.findDescendants(realm.getFullPath(),
base.getFullPath()).
stream().map(Realm::getKey).toList());
} else {
- dynRealmDAO.findById(realmPath).ifPresentOrElse(
- dynRealm ->
dynRealmKeys.add(dynRealm.getKey()),
- () -> LOG.warn("Ignoring invalid dynamic
realm {}", realmPath));
+ if (RealmUtils.subtree(realm.getFullPath(),
base.getFullPath())) {
+ realmKeys.add(realm.getKey());
+ }
}
- }));
- if (!dynRealmKeys.isEmpty()) {
- realmKeys.clear();
- }
- } else {
- if
(RealmUtils.SubtreePredicate.of(adminRealms).test(base.getFullPath())) {
- realmKeys.add(base.getKey());
- }
- }
+ } else {
+ dynRealmDAO.findById(realmPath).ifPresentOrElse(
+ dynRealm ->
dynRealmKeys.add(dynRealm.getKey()),
+ () -> LOG.warn("Ignoring invalid dynamic realm
{}", realmPath));
+ }
+ }));
return new AdminRealmsFilter(buildAdminRealmsFilter(realmKeys, svs,
parameters), dynRealmKeys, groupOwners);
}
diff --git
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/Neo4jAnySearchDAO.java
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/Neo4jAnySearchDAO.java
index 47271a3347..f2f66bf428 100644
---
a/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/Neo4jAnySearchDAO.java
+++
b/core/persistence-neo4j/src/main/java/org/apache/syncope/core/persistence/neo4j/dao/Neo4jAnySearchDAO.java
@@ -207,34 +207,31 @@ public class Neo4jAnySearchDAO extends
AbstractAnySearchDAO {
Set<String> dynRealmKeys = new HashSet<>();
Set<String> groupOwners = new HashSet<>();
- if (recursive) {
- adminRealms.forEach(realmPath ->
RealmUtils.GroupOwnerRealm.of(realmPath).ifPresentOrElse(
- goRealm -> groupOwners.add(goRealm.groupKey()),
- () -> {
- if (realmPath.startsWith("/")) {
- Realm realm =
realmSearchDAO.findByFullPath(realmPath).orElseThrow(() -> {
- SyncopeClientException noRealm =
-
SyncopeClientException.build(ClientExceptionType.InvalidRealm);
- noRealm.getElements().add("Invalid realm
specified: " + realmPath);
- return noRealm;
- });
-
+ adminRealms.forEach(realmPath ->
RealmUtils.GroupOwnerRealm.of(realmPath).ifPresentOrElse(
+ realm -> groupOwners.add(realm.groupKey()),
+ () -> {
+ if (realmPath.startsWith("/")) {
+ Realm realm =
realmSearchDAO.findByFullPath(realmPath).orElseThrow(() -> {
+ SyncopeClientException noRealm =
SyncopeClientException.build(
+ ClientExceptionType.InvalidRealm);
+ noRealm.getElements().add("Invalid realm
specified: " + realmPath);
+ return noRealm;
+ });
+
+ if (recursive) {
realmKeys.addAll(realmSearchDAO.findDescendants(realm.getFullPath(),
base.getFullPath()).
stream().map(Realm::getKey).toList());
} else {
- dynRealmDAO.findById(realmPath).ifPresentOrElse(
- dynRealm ->
dynRealmKeys.add(dynRealm.getKey()),
- () -> LOG.warn("Ignoring invalid dynamic
realm {}", realmPath));
+ if (RealmUtils.subtree(realm.getFullPath(),
base.getFullPath())) {
+ realmKeys.add(realm.getKey());
+ }
}
- }));
- if (!dynRealmKeys.isEmpty()) {
- realmKeys.clear();
- }
- } else {
- if
(RealmUtils.SubtreePredicate.of(adminRealms).test(base.getFullPath())) {
- realmKeys.add(base.getKey());
- }
- }
+ } else {
+ dynRealmDAO.findById(realmPath).ifPresentOrElse(
+ dynRealm ->
dynRealmKeys.add(dynRealm.getKey()),
+ () -> LOG.warn("Ignoring invalid dynamic realm
{}", realmPath));
+ }
+ }));
return new AdminRealmsFilter(buildAdminRealmsFilter(realmKeys,
parameters), dynRealmKeys, groupOwners);
}
diff --git
a/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAO.java
b/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAO.java
index f88dbbb5a6..463b7091aa 100644
---
a/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAO.java
+++
b/ext/elasticsearch/persistence/src/main/java/org/apache/syncope/core/persistence/elasticsearch/dao/ElasticsearchAnySearchDAO.java
@@ -42,9 +42,11 @@ import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.AttrSchemaType;
+import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.rest.api.service.JAXRSService;
import
org.apache.syncope.core.persistence.api.attrvalue.PlainAttrValidationManager;
import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
@@ -134,38 +136,41 @@ public class ElasticsearchAnySearchDAO extends
AbstractAnySearchDAO {
Set<String> groupOwners = new HashSet<>();
List<Query> queries = new ArrayList<>();
- if (recursive) {
- adminRealms.forEach(realmPath -> {
- Optional<RealmUtils.GroupOwnerRealm> goRealm =
RealmUtils.GroupOwnerRealm.of(realmPath);
- if (goRealm.isPresent()) {
- groupOwners.add(goRealm.get().groupKey());
- } else if (realmPath.startsWith("/")) {
- Realm realm = realmSearchDAO.findByFullPath(realmPath).
- orElseThrow(() -> new
IllegalArgumentException("Invalid Realm full path: " + realmPath));
-
- realmSearchDAO.findDescendants(realm.getFullPath(),
base.getFullPath()).
- stream().map(Realm::getKey).forEach(descendant ->
queries.add(
- new Query.Builder().term(QueryBuilders.term().
-
field("realm").value(descendant).caseInsensitive(false).build()).
- build()));
- } else {
- dynRealmDAO.findById(realmPath).ifPresentOrElse(
- dynRealm -> {
- dynRealmKeys.add(dynRealm.getKey());
+ adminRealms.forEach(realmPath ->
RealmUtils.GroupOwnerRealm.of(realmPath).ifPresentOrElse(
+ realm -> groupOwners.add(realm.groupKey()),
+ () -> {
+ if (realmPath.startsWith("/")) {
+ Realm realm =
realmSearchDAO.findByFullPath(realmPath).orElseThrow(() -> {
+ SyncopeClientException noRealm =
SyncopeClientException.build(
+ ClientExceptionType.InvalidRealm);
+ noRealm.getElements().add("Invalid realm
specified: " + realmPath);
+ return noRealm;
+ });
+
+ if (recursive) {
+
realmSearchDAO.findDescendants(realm.getFullPath(), base.getFullPath()).
+
stream().map(Realm::getKey).forEach(descendant -> queries.add(
+ new
Query.Builder().term(QueryBuilders.term().
+ field("realm").value(descendant).
+
caseInsensitive(false).build()).build()));
+ } else {
+ if (RealmUtils.subtree(realm.getFullPath(),
base.getFullPath())) {
queries.add(new
Query.Builder().term(QueryBuilders.term().
-
field("dynRealm").value(dynRealm.getKey()).caseInsensitive(false).build()).
- build());
- },
- () -> LOG.warn("Ignoring invalid dynamic realm
{}", realmPath));
- }
- });
- } else {
- if
(RealmUtils.SubtreePredicate.of(adminRealms).test(base.getFullPath())) {
- queries.add(new Query.Builder().term(QueryBuilders.term().
-
field("realm").value(base.getKey()).caseInsensitive(false).build()).
- build());
- }
- }
+ field("realm").value(realm.getKey()).
+
caseInsensitive(false).build()).build());
+ }
+ }
+ } else {
+ dynRealmDAO.findById(realmPath).ifPresentOrElse(
+ dynRealm -> {
+ dynRealmKeys.add(dynRealm.getKey());
+ queries.add(new
Query.Builder().term(QueryBuilders.term().
+
field("dynRealm").value(FieldValue.of(dynRealm.getKey())).
+
caseInsensitive(false).build()).build());
+ },
+ () -> LOG.warn("Ignoring invalid dynamic realm
{}", realmPath));
+ }
+ }));
return new AdminRealmsFilter(
dynRealmKeys.isEmpty() && groupOwners.isEmpty()
diff --git
a/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAO.java
b/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAO.java
index dc9c98e746..d0a41e90ed 100644
---
a/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAO.java
+++
b/ext/opensearch/persistence/src/main/java/org/apache/syncope/core/persistence/opensearch/dao/OpenSearchAnySearchDAO.java
@@ -26,9 +26,11 @@ import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import org.apache.syncope.common.lib.SyncopeClientException;
import org.apache.syncope.common.lib.SyncopeConstants;
import org.apache.syncope.common.lib.types.AnyTypeKind;
import org.apache.syncope.common.lib.types.AttrSchemaType;
+import org.apache.syncope.common.lib.types.ClientExceptionType;
import org.apache.syncope.common.rest.api.service.JAXRSService;
import
org.apache.syncope.core.persistence.api.attrvalue.PlainAttrValidationManager;
import org.apache.syncope.core.persistence.api.dao.AnyObjectDAO;
@@ -133,38 +135,41 @@ public class OpenSearchAnySearchDAO extends
AbstractAnySearchDAO {
Set<String> groupOwners = new HashSet<>();
List<Query> queries = new ArrayList<>();
- if (recursive) {
- adminRealms.forEach(realmPath -> {
- Optional<RealmUtils.GroupOwnerRealm> goRealm =
RealmUtils.GroupOwnerRealm.of(realmPath);
- if (goRealm.isPresent()) {
- groupOwners.add(goRealm.get().groupKey());
- } else if (realmPath.startsWith("/")) {
- Realm realm = realmSearchDAO.findByFullPath(realmPath).
- orElseThrow(() -> new
IllegalArgumentException("Invalid Realm full path: " + realmPath));
-
- realmSearchDAO.findDescendants(realm.getFullPath(),
base.getFullPath()).
- stream().map(Realm::getKey).forEach(descendant ->
queries.add(
- new Query.Builder().term(QueryBuilders.term().
-
field("realm").value(FieldValue.of(descendant)).caseInsensitive(false).build()).
- build()));
- } else {
- dynRealmDAO.findById(realmPath).ifPresentOrElse(
- dynRealm -> {
- dynRealmKeys.add(dynRealm.getKey());
+ adminRealms.forEach(realmPath ->
RealmUtils.GroupOwnerRealm.of(realmPath).ifPresentOrElse(
+ realm -> groupOwners.add(realm.groupKey()),
+ () -> {
+ if (realmPath.startsWith("/")) {
+ Realm realm =
realmSearchDAO.findByFullPath(realmPath).orElseThrow(() -> {
+ SyncopeClientException noRealm =
SyncopeClientException.build(
+ ClientExceptionType.InvalidRealm);
+ noRealm.getElements().add("Invalid realm
specified: " + realmPath);
+ return noRealm;
+ });
+
+ if (recursive) {
+
realmSearchDAO.findDescendants(realm.getFullPath(), base.getFullPath()).
+
stream().map(Realm::getKey).forEach(descendant -> queries.add(
+ new
Query.Builder().term(QueryBuilders.term().
+
field("realm").value(FieldValue.of(descendant)).
+
caseInsensitive(false).build()).build()));
+ } else {
+ if (RealmUtils.subtree(realm.getFullPath(),
base.getFullPath())) {
queries.add(new
Query.Builder().term(QueryBuilders.term().
-
field("dynRealm").value(FieldValue.of(dynRealm.getKey())).
+
field("realm").value(FieldValue.of(realm.getKey())).
caseInsensitive(false).build()).build());
- },
- () -> LOG.warn("Ignoring invalid dynamic realm
{}", realmPath));
- }
- });
- } else {
- if
(RealmUtils.SubtreePredicate.of(adminRealms).test(base.getFullPath())) {
- queries.add(new Query.Builder().term(QueryBuilders.term().
-
field("realm").value(FieldValue.of(base.getKey())).caseInsensitive(false).build()).
- build());
- }
- }
+ }
+ }
+ } else {
+ dynRealmDAO.findById(realmPath).ifPresentOrElse(
+ dynRealm -> {
+ dynRealmKeys.add(dynRealm.getKey());
+ queries.add(new
Query.Builder().term(QueryBuilders.term().
+
field("dynRealm").value(FieldValue.of(dynRealm.getKey())).
+
caseInsensitive(false).build()).build());
+ },
+ () -> LOG.warn("Ignoring invalid dynamic realm
{}", realmPath));
+ }
+ }));
return new AdminRealmsFilter(
dynRealmKeys.isEmpty() && groupOwners.isEmpty()