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

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


The following commit(s) were added to refs/heads/master by this push:
     new 48982e2227 [SYNCOPE-1997] - Fix connectivity check and improve 
topology UI to prevent scrolling (#1530)
48982e2227 is described below

commit 48982e2227eb468b82fbb01d41456bef25a225b6
Author: Matteo Tatoni <[email protected]>
AuthorDate: Mon Sep 14 08:22:15 2026 +0200

    [SYNCOPE-1997] - Fix connectivity check and improve topology UI to prevent 
scrolling (#1530)
---
 .../resources/META-INF/resources/css/topology.scss |  2 +-
 .../syncope/client/console/topology/Topology.html  |  2 +-
 .../apache/syncope/core/logic/ResourceLogic.java   |  9 ++++
 .../provisioning/api/data/ResourceDataBinder.java  | 49 ++++++++++++++++++++++
 4 files changed, 60 insertions(+), 2 deletions(-)

diff --git 
a/client/idm/console/src/main/resources/META-INF/resources/css/topology.scss 
b/client/idm/console/src/main/resources/META-INF/resources/css/topology.scss
index 52674d114b..de890ca91c 100644
--- a/client/idm/console/src/main/resources/META-INF/resources/css/topology.scss
+++ b/client/idm/console/src/main/resources/META-INF/resources/css/topology.scss
@@ -32,7 +32,7 @@
 #topology {
   position: relative;
   border: 0;
-  height: 780px;
+  height: calc(100vh - 175px);
   overflow: hidden;
   cursor: grab;
 }
diff --git 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/topology/Topology.html
 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/topology/Topology.html
index 17ccca0022..d2ec3c78a5 100644
--- 
a/client/idm/console/src/main/resources/org/apache/syncope/client/console/topology/Topology.html
+++ 
b/client/idm/console/src/main/resources/org/apache/syncope/client/console/topology/Topology.html
@@ -40,7 +40,7 @@ under the License.
   <wicket:extend>
     <span wicket:id="toggle"/>
 
-    <div id="zoom" class="ui-button ui-widget ui-state-default ui-corner-all 
ui-button-text-only">
+    <div id="zoom" class="ui-button ui-widget ui-state-default ui-corner-all 
ui-button-text-only pt-2 pe-2 pb-1">
       <span wicket:id="zoom">[Actions]</span>
     </div>
     <div id="topology">
diff --git 
a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java 
b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
index c0f6177c21..4678327172 100644
--- 
a/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
+++ 
b/core/idm/logic/src/main/java/org/apache/syncope/core/logic/ResourceLogic.java
@@ -33,6 +33,7 @@ import org.apache.syncope.common.lib.to.Item;
 import org.apache.syncope.common.lib.to.Provision;
 import org.apache.syncope.common.lib.to.ResourceTO;
 import org.apache.syncope.common.lib.types.ClientExceptionType;
+import org.apache.syncope.common.lib.types.ConnConfProperty;
 import org.apache.syncope.common.lib.types.IdMEntitlement;
 import org.apache.syncope.core.persistence.api.dao.AnyTypeDAO;
 import org.apache.syncope.core.persistence.api.dao.ConnInstanceDAO;
@@ -423,6 +424,14 @@ public class ResourceLogic extends 
AbstractTransactionalLogic<ResourceTO> {
         ConnInstance connInstance = 
connInstanceDAO.findById(resourceTO.getConnector()).
                 orElseThrow(() -> new NotFoundException("Connector " + 
resourceTO.getConnector()));
 
+        
Optional.ofNullable(resourceTO.getKey()).flatMap(resourceDAO::findById).
+                ifPresent(externalResource -> {
+                    Optional<List<ConnConfProperty>> newConfOverride =
+                            
ResourceDataBinder.newConf(externalResource.getConfOverride(),
+                                    resourceTO.getConfOverride());
+                    resourceTO.setConfOverride(newConfOverride);
+                });
+
         connectorManager.createConnector(
                 connectorManager.buildConnInstanceOverride(
                         connInstance,
diff --git 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ResourceDataBinder.java
 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ResourceDataBinder.java
index eb72ae70a6..e45cbaf2cd 100644
--- 
a/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ResourceDataBinder.java
+++ 
b/core/provisioning-api/src/main/java/org/apache/syncope/core/provisioning/api/data/ResourceDataBinder.java
@@ -18,8 +18,13 @@
  */
 package org.apache.syncope.core.provisioning.api.data;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Optional;
 import org.apache.syncope.common.lib.to.ResourceTO;
+import org.apache.syncope.common.lib.types.ConnConfProperty;
 import org.apache.syncope.core.persistence.api.entity.ExternalResource;
+import org.identityconnectors.common.security.GuardedString;
 
 public interface ResourceDataBinder {
 
@@ -28,4 +33,48 @@ public interface ResourceDataBinder {
     ExternalResource create(ResourceTO resourceTO);
 
     ExternalResource update(ExternalResource resource, ResourceTO resourceTO);
+
+    static Optional<List<ConnConfProperty>> newConf(
+            final Optional<List<ConnConfProperty>> previousConfOverride,
+            final Optional<List<ConnConfProperty>> toConfOverride) {
+
+        if (toConfOverride.isEmpty()) {
+            return Optional.empty();
+        }
+
+        if (previousConfOverride.isEmpty()) {
+            return toConfOverride;
+        }
+
+        List<ConnConfProperty> newConf = new ArrayList<>();
+
+        toConfOverride.get().forEach(property -> {
+            if (property.getSchema().isConfidential()
+                    || 
GuardedString.class.getName().equals(property.getSchema().getType())) {
+
+                if (property.getValues().isEmpty()) {
+                    // no values provided, keep existing
+                    previousConfOverride.get().stream().
+                            filter(p -> 
p.getSchema().getName().equals(property.getSchema().getName())).
+                            findFirst().ifPresent(newConf::add);
+                } else {
+                    // translate confidential properties' cleartext values 
into GuardedStrings
+                    ConnConfProperty newProperty = new ConnConfProperty();
+                    newProperty.setSchema(property.getSchema());
+                    newProperty.setOverridable(property.isOverridable());
+                    property.getValues().forEach(value -> {
+                        if (value instanceof String string) {
+                            newProperty.getValues().add(new 
GuardedString(string.toCharArray()));
+                        } else {
+                            newProperty.getValues().add(value);
+                        }
+                    });
+                }
+            }
+
+            newConf.add(property);
+        });
+
+        return Optional.of(newConf);
+    }
 }

Reply via email to