This is an automated email from the ASF dual-hosted git repository.

ilgrosso pushed a commit to branch 3_0_X
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/3_0_X by this push:
     new 1085d945cf [SYNCOPE-1761] Take into account the base parameter to 
compute effective admin realms
1085d945cf is described below

commit 1085d945cf60e15dd3f99ee24ec5a3c4f00db8c9
Author: Francesco Chicchiriccò <[email protected]>
AuthorDate: Wed May 31 16:38:48 2023 +0200

    [SYNCOPE-1761] Take into account the base parameter to compute effective 
admin realms
---
 .../core/persistence/jpa/dao/JPAAnySearchDAO.java  |  8 +++--
 ext/elasticsearch/persistence-jpa/pom.xml          |  5 +++
 .../jpa/dao/ElasticsearchAnySearchDAO.java         | 37 ++++++++++++----------
 .../jpa/dao/ElasticsearchAnySearchDAOTest.java     | 13 ++++----
 4 files changed, 36 insertions(+), 27 deletions(-)

diff --git 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
index 6facb6f33f..1d75d8fe94 100644
--- 
a/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
+++ 
b/core/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/JPAAnySearchDAO.java
@@ -138,8 +138,10 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
                                 return noRealm;
                             });
 
-                            
realmKeys.addAll(realmDAO.findDescendants(realm.getFullPath(), null, -1, 
-1).stream().
-                                    
map(Realm::getKey).collect(Collectors.toSet()));
+                            realmKeys.addAll(
+                                    
realmDAO.findDescendants(realm.getFullPath(), null, -1, -1).stream().
+                                            filter(r -> 
r.getFullPath().startsWith(base.getFullPath())).
+                                            
map(Realm::getKey).collect(Collectors.toSet()));
                         } else {
                             DynRealm dynRealm = dynRealmDAO.find(realmPath);
                             if (dynRealm == null) {
@@ -153,7 +155,7 @@ public class JPAAnySearchDAO extends AbstractAnySearchDAO {
                 realmKeys.clear();
             }
         } else {
-            if (adminRealms.stream().anyMatch(r -> 
base.getFullPath().startsWith(r))) {
+            if (adminRealms.stream().anyMatch(r -> 
r.startsWith(base.getFullPath()))) {
                 realmKeys.add(base.getKey());
             }
         }
diff --git a/ext/elasticsearch/persistence-jpa/pom.xml 
b/ext/elasticsearch/persistence-jpa/pom.xml
index 3dad9accfd..ccb4fe18ef 100644
--- a/ext/elasticsearch/persistence-jpa/pom.xml
+++ b/ext/elasticsearch/persistence-jpa/pom.xml
@@ -51,6 +51,11 @@ under the License.
     </dependency>
 
     <!-- TEST -->
+    <dependency>
+      <groupId>org.slf4j</groupId>
+      <artifactId>slf4j-simple</artifactId>
+      <scope>test</scope>
+    </dependency>
     <dependency>
       <groupId>org.mockito</groupId>
       <artifactId>mockito-inline</artifactId>
diff --git 
a/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAO.java
 
b/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAO.java
index c1ba3cd8b7..1d90017f60 100644
--- 
a/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAO.java
+++ 
b/ext/elasticsearch/persistence-jpa/src/main/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAO.java
@@ -158,9 +158,12 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
                         return noRealm;
                     });
 
-                    realmDAO.findDescendants(realm.getFullPath(), null, -1, 
-1).forEach(descendant -> queries.add(
+                    realmDAO.findDescendants(
+                            realm.getFullPath(), null, -1, -1).stream().
+                            filter(r -> 
r.getFullPath().startsWith(base.getFullPath())).
+                            forEach(descendant -> queries.add(
                             new Query.Builder().term(QueryBuilders.term().
-                                    
field("realm").value(FieldValue.of(descendant.getKey())).build()).
+                                    
field("realm").value(descendant.getKey()).build()).
                                     build()));
                 } else {
                     DynRealm dynRealm = dynRealmDAO.find(realmPath);
@@ -169,15 +172,15 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
                     } else {
                         dynRealmKeys.add(dynRealm.getKey());
                         queries.add(new 
Query.Builder().term(QueryBuilders.term().
-                                
field("dynRealm").value(FieldValue.of(dynRealm.getKey())).build()).
+                                
field("dynRealm").value(dynRealm.getKey()).build()).
                                 build());
                     }
                 }
             });
         } else {
-            if (adminRealms.stream().anyMatch(r -> 
base.getFullPath().startsWith(r))) {
+            if (adminRealms.stream().anyMatch(r -> 
r.startsWith(base.getFullPath()))) {
                 queries.add(new Query.Builder().term(QueryBuilders.term().
-                        
field("realm").value(FieldValue.of(base.getKey())).build()).
+                        field("realm").value(base.getKey()).build()).
                         build());
             }
         }
@@ -205,7 +208,7 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
                 query = new Query.Builder().bool(
                         QueryBuilders.bool().
                                 must(new 
Query.Builder().term(QueryBuilders.term().
-                                        
field("realm").value(FieldValue.of(base.getKey())).build()).
+                                        
field("realm").value(base.getKey()).build()).
                                         build()).
                                 must(query).build()).
                         build();
@@ -460,13 +463,13 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
 
     protected Query getQuery(final AnyTypeCond cond) {
         return new Query.Builder().term(QueryBuilders.term().
-                
field("anyType").value(FieldValue.of(cond.getAnyTypeKey())).build()).
+                field("anyType").value(cond.getAnyTypeKey()).build()).
                 build();
     }
 
     protected Query getQuery(final RelationshipTypeCond cond) {
         return new Query.Builder().term(QueryBuilders.term().
-                
field("relationshipTypes").value(FieldValue.of(cond.getRelationshipTypeKey())).build()).
+                
field("relationshipTypes").value(cond.getRelationshipTypeKey()).build()).
                 build();
     }
 
@@ -474,7 +477,7 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
         String rightAnyObjectKey = check(cond);
 
         return new Query.Builder().term(QueryBuilders.term().
-                
field("relationships").value(FieldValue.of(rightAnyObjectKey)).build()).
+                field("relationships").value(rightAnyObjectKey).build()).
                 build();
     }
 
@@ -483,7 +486,7 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
 
         List<Query> membershipQueries = groupKeys.stream().
                 map(key -> new Query.Builder().term(QueryBuilders.term().
-                field("memberships").value(FieldValue.of(key)).build()).
+                field("memberships").value(key).build()).
                 build()).collect(Collectors.toList());
         if (membershipQueries.size() == 1) {
             return membershipQueries.get(0);
@@ -494,19 +497,19 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
 
     protected Query getQuery(final RoleCond cond) {
         return new Query.Builder().term(QueryBuilders.term().
-                field("roles").value(FieldValue.of(cond.getRole())).build()).
+                field("roles").value(cond.getRole()).build()).
                 build();
     }
 
     protected Query getQuery(final PrivilegeCond cond) {
         return new Query.Builder().term(QueryBuilders.term().
-                
field("privileges").value(FieldValue.of(cond.getPrivilege())).build()).
+                field("privileges").value(cond.getPrivilege()).build()).
                 build();
     }
 
     protected Query getQuery(final DynRealmCond cond) {
         return new Query.Builder().term(QueryBuilders.term().
-                
field("dynRealms").value(FieldValue.of(cond.getDynRealm())).build()).
+                field("dynRealms").value(cond.getDynRealm()).build()).
                 build();
     }
 
@@ -514,19 +517,19 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
         String memberKey = check(cond);
 
         return new Query.Builder().term(QueryBuilders.term().
-                field("members").value(FieldValue.of(memberKey)).build()).
+                field("members").value(memberKey).build()).
                 build();
     }
 
     protected Query getQuery(final AuxClassCond cond) {
         return new Query.Builder().term(QueryBuilders.term().
-                
field("auxClasses").value(FieldValue.of(cond.getAuxClass())).build()).
+                field("auxClasses").value(cond.getAuxClass()).build()).
                 build();
     }
 
     protected Query getQuery(final ResourceCond cond) {
         return new Query.Builder().term(QueryBuilders.term().
-                
field("resources").value(FieldValue.of(cond.getResource())).build()).
+                field("resources").value(cond.getResource()).build()).
                 build();
     }
 
@@ -577,7 +580,7 @@ public class ElasticsearchAnySearchDAO extends 
AbstractAnySearchDAO {
 
             case IEQ:
                 query = new Query.Builder().match(QueryBuilders.match().
-                        
field(schema.getKey()).query(FieldValue.of(cond.getExpression().toLowerCase())).build()).
+                        
field(schema.getKey()).query(cond.getExpression().toLowerCase()).build()).
                         build();
                 break;
 
diff --git 
a/ext/elasticsearch/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAOTest.java
 
b/ext/elasticsearch/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAOTest.java
index f17e8c5e48..02619dc813 100644
--- 
a/ext/elasticsearch/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAOTest.java
+++ 
b/ext/elasticsearch/persistence-jpa/src/test/java/org/apache/syncope/core/persistence/jpa/dao/ElasticsearchAnySearchDAOTest.java
@@ -27,7 +27,6 @@ import static org.mockito.Mockito.doAnswer;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
-import co.elastic.clients.elasticsearch._types.FieldValue;
 import co.elastic.clients.elasticsearch._types.SearchType;
 import co.elastic.clients.elasticsearch._types.query_dsl.BoolQuery;
 import co.elastic.clients.elasticsearch._types.query_dsl.DisMaxQuery;
@@ -122,12 +121,12 @@ public class ElasticsearchAnySearchDAOTest {
         // 2. test
         Set<String> adminRealms = Set.of(SyncopeConstants.ROOT_REALM);
         Triple<Optional<Query>, Set<String>, Set<String>> filter =
-                searchDAO.getAdminRealmsFilter(realmDAO.getRoot(), true, 
adminRealms, AnyTypeKind.USER);
+                searchDAO.getAdminRealmsFilter(root, true, adminRealms, 
AnyTypeKind.USER);
 
         assertThat(
                 new Query.Builder().disMax(QueryBuilders.disMax().queries(
                         new 
Query.Builder().term(QueryBuilders.term().field("realm").value(
-                                
FieldValue.of("rootKey")).build()).build()).build()).
+                                "rootKey").build()).build()).build()).
                         build()).
                 usingRecursiveComparison().isEqualTo(filter.getLeft().get());
         assertEquals(Set.of(), filter.getMiddle());
@@ -196,10 +195,10 @@ public class ElasticsearchAnySearchDAOTest {
             assertThat(
                     new Query.Builder().bool(QueryBuilders.bool().
                             must(new 
Query.Builder().exists(QueryBuilders.exists().field("id").build()).build()).
-                            must(new 
Query.Builder().term(QueryBuilders.term().field("memberships").value(
-                                    
FieldValue.of("groupKey")).build()).build()).
-                            build()).build()).
-                    usingRecursiveComparison().isEqualTo(request.query());
+                            must(new 
Query.Builder().term(QueryBuilders.term().field("memberships").value("groupKey").
+                                    build()).build()).build()).build()).
+                    usingRecursiveComparison().
+                    isEqualTo(request.query());
         }
     }
 

Reply via email to