Browse Source

CB-5287 hotfix resave secret without reselect (#34399)

* CB-5287 hotfix resave secret without reselect

* CB-5287 fix unexpected redshift secret deletion

* CB-5287 do not resolve shared secrets
Alexander Skoblikov 1 year ago
parent
commit
1c14b38b61

+ 1 - 1
plugins/org.jkiss.dbeaver.core/src/org/jkiss/dbeaver/ui/actions/datasource/UIServiceConnectionsImpl.java

@@ -42,7 +42,7 @@ public class UIServiceConnectionsImpl implements DBServiceConnections, UIService
     @Override
     public void openConnectionEditor(@NotNull DBPDataSourceContainer dataSourceContainer, String defaultPageName) {
         if (dataSourceContainer.getProject().hasRealmPermission(RMConstants.PERMISSION_PROJECT_DATASOURCES_EDIT)) {
-            if (dataSourceContainer.getProject().isUseSecretStorage()) {
+            if (dataSourceContainer.getProject().isUseSecretStorage() && !dataSourceContainer.isSharedCredentials()) {
                 try {
                     DBSSecretController secretController = DBSSecretController.getProjectSecretController(dataSourceContainer.getProject());
                     dataSourceContainer.resolveSecrets(secretController);

+ 5 - 6
plugins/org.jkiss.dbeaver.registry/src/org/jkiss/dbeaver/registry/DataSourceDescriptor.java

@@ -900,6 +900,7 @@ public class DataSourceDescriptor
         persistSecrets(secretController, false);
     }
 
+    //TODO move secret management logic to separate service
     void persistSecrets(DBSSecretController secretController, boolean isNewDataSource) throws DBException {
         if (!CommonUtils.isBitSet(
             secretController.getSupportedFeatures(),
@@ -921,11 +922,15 @@ public class DataSourceDescriptor
         } else {
             if (selectedSharedCredentials != null) {
                 String subjectId = DataSourceUtils.getSubjectFromSecret(selectedSharedCredentials);
+                var selectedSharedCredentialsCopy = selectedSharedCredentials;
+                selectedSharedCredentialsCopy.setValue(secret);
                 try {
                     secretController.setSubjectSecretValue(subjectId, this,
                         new DBSSecretValue(subjectId, getSecretValueId(), "", secret));
                     //the list of available secrets has changed, force update
                     resetAllSecrets();
+                    // to resave current secret without additional click in UI
+                    setSelectedSharedCredentials(selectedSharedCredentialsCopy);
                 } catch (DBException e) {
                     throw new DBException("Cannot set team '" + subjectId + "' credentials: " + e.getMessage(), e);
                 }
@@ -1356,12 +1361,6 @@ public class DataSourceDescriptor
         resolveSecrets(secretController);
     }
 
-    public void refreshSecretFromConfiguration() {
-        if (selectedSharedCredentials != null) {
-            selectedSharedCredentials.setValue(saveToSecret());
-        }
-    }
-
     public void openDataSource(DBRProgressMonitor monitor, boolean initialize) throws DBException {
         final DBPDataSourceProvider provider = driver.getDataSourceProvider();
         final DBPDataSourceProviderSynchronizable providerSynchronizable = GeneralUtils.adapt(provider, DBPDataSourceProviderSynchronizable.class);