You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@syncope.apache.org by md...@apache.org on 2020/04/20 17:04:19 UTC

[syncope] branch 2_1_X updated: [SYNCOPE-1521] Fix RealmChoicePanel

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

mdisabatino pushed a commit to branch 2_1_X
in repository https://gitbox.apache.org/repos/asf/syncope.git


The following commit(s) were added to refs/heads/2_1_X by this push:
     new b3308f4  [SYNCOPE-1521] Fix RealmChoicePanel
b3308f4 is described below

commit b3308f4e0b3f888745a52206cae727e3701ddb37
Author: Marco Di Sabatino Di Diodoro <ma...@tirasa.net>
AuthorDate: Mon Apr 20 19:04:06 2020 +0200

    [SYNCOPE-1521] Fix RealmChoicePanel
---
 .../syncope/client/console/SyncopeConsoleSession.java | 16 ++++++++++++++++
 .../syncope/client/console/panels/AnyPanel.java       |  3 ++-
 .../apache/syncope/client/console/panels/Realm.java   |  3 ++-
 .../client/console/panels/RealmChoicePanel.java       | 19 +++++++++++++------
 4 files changed, 33 insertions(+), 8 deletions(-)

diff --git a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
index 72da875..9c9bdd7 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/SyncopeConsoleSession.java
@@ -26,6 +26,7 @@ import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.Callable;
 import java.util.concurrent.CompletableFuture;
@@ -282,6 +283,21 @@ public class SyncopeConsoleSession extends AuthenticatedWebSession {
         return auth.values().stream().flatMap(Set::stream).distinct().sorted().collect(Collectors.toList());
     }
 
+    public Set<String> getVisibleRealms() {
+        Set<String> roots = auth.get(StandardEntitlement.REALM_LIST);
+        return roots.isEmpty()
+                ? Collections.emptySet()
+                : roots.stream().sorted().collect(Collectors.toSet());
+    }
+
+    public Optional<String> getRootRealm() {
+        Set<String> roots = getVisibleRealms();
+        if (roots.isEmpty()) {
+            return Optional.empty();
+        }
+        return roots.stream().findFirst();
+    }
+
     public boolean owns(final String entitlements, final String... realms) {
         if (StringUtils.isEmpty(entitlements)) {
             return true;
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyPanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyPanel.java
index bb62175..7e62958 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyPanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/AnyPanel.java
@@ -89,7 +89,8 @@ public class AnyPanel extends Panel implements ModalPanel {
 
                 final String realm;
                 final String dynRealm;
-                if (realmTO.getFullPath().startsWith(SyncopeConstants.ROOT_REALM)) {
+                if (StringUtils.isNotBlank(realmTO.getFullPath())
+                    && realmTO.getFullPath().startsWith(SyncopeConstants.ROOT_REALM)) {
                     realm = realmTO.getFullPath();
                     dynRealm = null;
                 } else {
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
index 6d692fd..f2adcca 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/Realm.java
@@ -108,7 +108,8 @@ public abstract class Realm extends WizardMgtPanel<RealmTO> {
             public Panel getPanel(final String panelId) {
                 final ActionsPanel<RealmTO> actionPanel = new ActionsPanel<>("actions", null);
 
-                if (realmTO.getFullPath().startsWith(SyncopeConstants.ROOT_REALM)) {
+                if (StringUtils.isNotBlank(realmTO.getFullPath()) 
+                        && realmTO.getFullPath().startsWith(SyncopeConstants.ROOT_REALM)) {
 
                     actionPanel.add(new ActionLink<RealmTO>(realmTO) {
 
diff --git a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java
index 4d9b945..5d38105 100644
--- a/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java
+++ b/client/console/src/main/java/org/apache/syncope/client/console/panels/RealmChoicePanel.java
@@ -33,6 +33,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import org.apache.commons.lang3.StringUtils;
@@ -47,7 +48,6 @@ import org.apache.syncope.common.lib.SyncopeConstants;
 import org.apache.syncope.common.lib.to.DynRealmTO;
 import org.apache.syncope.common.lib.to.RealmTO;
 import org.apache.syncope.common.lib.types.StandardEntitlement;
-import org.apache.syncope.common.rest.api.beans.RealmQuery;
 import org.apache.wicket.PageReference;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.authroles.authorization.strategies.role.metadata.MetaDataRoleAuthorizationStrategy;
@@ -100,7 +100,7 @@ public class RealmChoicePanel extends Panel {
     public RealmChoicePanel(final String id, final PageReference pageRef) {
         super(id);
         this.pageRef = pageRef;
-        availableRealms = SyncopeConsoleSession.get().getAuthRealms();
+        availableRealms = SyncopeConsoleSession.get().getVisibleRealms();
         tree = new HashMap<>();
         isSearchEnabled = RealmsUtils.isSearchEnabled();
 
@@ -162,9 +162,15 @@ public class RealmChoicePanel extends Panel {
             }
         };
 
-        RealmTO realmTO = realmRestClient.search(
-                new RealmQuery.Builder().keyword("*" + availableRealms.stream().findFirst().get() + "*").build()).
-                getResult().stream().findFirst().get();
+        RealmTO realmTO = new RealmTO();
+        Optional<String> rootRealm = SyncopeConsoleSession.get().getRootRealm();
+        if (rootRealm.isPresent()) {
+            List<RealmTO> realmTOs = realmRestClient.search(
+                    RealmsUtils.buildQuery(SyncopeConstants.ROOT_REALM.equals(rootRealm)
+                            ? SyncopeConstants.ROOT_REALM
+                            : StringUtils.substringAfterLast(rootRealm.get(), "/"))).getResult();
+            realmTO = realmTOs.stream().filter(realm -> rootRealm.get().equals(realm.getFullPath())).findFirst().get();
+        }
 
         model = Model.of(realmTO);
         searchQuery = realmTO.getName();
@@ -180,7 +186,8 @@ public class RealmChoicePanel extends Panel {
 
         container.addOrReplace(realmLabel);
 
-        if (model.getObject().getFullPath().startsWith(SyncopeConstants.ROOT_REALM)) {
+        if (StringUtils.isBlank(model.getObject().getFullPath())
+                || model.getObject().getFullPath().startsWith(SyncopeConstants.ROOT_REALM))  {
             realmLabel.setDefaultModel(new ResourceModel("realmLabel", "Realm"));
         } else {
             realmLabel.setDefaultModel(new ResourceModel("dynRealmLabel", "Dynamic Realm"));