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"));