diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/WebConnectionConfigInputHandler.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/WebConnectionConfigInputHandler.java index 31c25973a9..cca417f8a8 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/WebConnectionConfigInputHandler.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/WebConnectionConfigInputHandler.java @@ -18,6 +18,7 @@ package io.cloudbeaver; import io.cloudbeaver.model.WebConnectionConfig; import io.cloudbeaver.model.app.WebAppConfiguration; +import io.cloudbeaver.model.session.WebSession; import io.cloudbeaver.utils.ServletAppUtils; import io.cloudbeaver.utils.WebDataSourceUtils; import org.jkiss.code.NotNull; @@ -32,8 +33,10 @@ public class WebConnectionConfigInputHandler(getDataSourceRegistry(), configInput); + return new WebConnectionConfigInputHandler<>(webSession, getDataSourceRegistry(), configInput); } diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/session/WebSession.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/session/WebSession.java index 8bdc8c4b86..4fa4567917 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/session/WebSession.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/session/WebSession.java @@ -840,7 +840,7 @@ public class WebSession extends BaseWebSession // uncommented because we had the problem with non-native auth models // (for example, can't connect to DynamoDB if credentials are not saved) DBAAuthCredentials credentials = configuration.getAuthModel().loadCredentials(dataSourceContainer, configuration); - WebDataSourceUtils.updateCredentialsFromProperties(credentials, configuration.getAuthProperties()); + WebDataSourceUtils.updateCredentialsFromProperties(this.progressMonitor, credentials, configuration.getAuthProperties()); configuration.getAuthModel().provideCredentials(dataSourceContainer, configuration, credentials); } catch (DBException e) { diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebDataSourceUtils.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebDataSourceUtils.java index a796ba8542..bca722e867 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebDataSourceUtils.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebDataSourceUtils.java @@ -16,10 +16,6 @@ */ package io.cloudbeaver.utils; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.InstanceCreator; -import com.google.gson.Strictness; import io.cloudbeaver.DBWConstants; import io.cloudbeaver.DBWebException; import io.cloudbeaver.WebSessionProjectImpl; @@ -34,7 +30,6 @@ import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.model.DBConstants; import org.jkiss.dbeaver.model.DBPDataSourceContainer; import org.jkiss.dbeaver.model.access.DBAAuthCredentials; -import org.jkiss.dbeaver.model.access.DBAAuthCredentialsWithComplexProperties; import org.jkiss.dbeaver.model.app.DBPDataSourceRegistry; import org.jkiss.dbeaver.model.app.DBPProject; import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration; @@ -43,7 +38,9 @@ import org.jkiss.dbeaver.model.connection.DBPDriver; import org.jkiss.dbeaver.model.impl.auth.AuthModelDatabaseNativeCredentials; import org.jkiss.dbeaver.model.net.DBWHandlerConfiguration; import org.jkiss.dbeaver.model.net.ssh.SSHConstants; +import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor; import org.jkiss.dbeaver.model.websocket.event.datasource.WSDataSourceDisconnectEvent; +import org.jkiss.dbeaver.registry.DataSourceUtils; import org.jkiss.dbeaver.registry.network.NetworkHandlerDescriptor; import org.jkiss.dbeaver.registry.network.NetworkHandlerRegistry; import org.jkiss.dbeaver.runtime.DBWorkbench; @@ -211,31 +208,30 @@ public class WebDataSourceUtils { return webSession.getAccessibleProjectById(projectId).getWebConnectionInfo(connectionId); } - - public static void updateCredentialsFromProperties(@NotNull DBAAuthCredentials credentials, @NotNull Map properties) { - InstanceCreator credTypeAdapter = type -> credentials; - Gson credGson = new GsonBuilder() - .setStrictness(Strictness.LENIENT) - .registerTypeAdapter(credentials.getClass(), credTypeAdapter) - .create(); - - if (credentials instanceof DBAAuthCredentialsWithComplexProperties complexProperties) { - complexProperties.updateCredentialsFromComplexProperties(properties); + public static void updateCredentialsFromProperties( + @NotNull DBRProgressMonitor progressMonitor, + @NotNull DBAAuthCredentials credentials, + @Nullable Map properties + ) { + if (properties == null) { + return; } - credGson.fromJson(credGson.toJsonTree(properties), credentials.getClass()); + DataSourceUtils.updateCredentialsFromProperties(progressMonitor, credentials, properties); } public static void saveAuthProperties( + @NotNull DBRProgressMonitor progressMonitor, @NotNull DBPDataSourceContainer dataSourceContainer, @NotNull DBPConnectionConfiguration configuration, @Nullable Map authProperties, boolean saveCredentials, boolean sharedCredentials ) { - saveAuthProperties(dataSourceContainer, configuration, authProperties, saveCredentials, sharedCredentials, false); + saveAuthProperties(progressMonitor, dataSourceContainer, configuration, authProperties, saveCredentials, sharedCredentials, false); } public static void saveAuthProperties( + @NotNull DBRProgressMonitor progressMonitor, @NotNull DBPDataSourceContainer dataSourceContainer, @NotNull DBPConnectionConfiguration configuration, @Nullable Map authProperties, @@ -271,7 +267,7 @@ public class WebDataSourceUtils { configuration.setAuthProperties(currentAuthProps); } if (!authProperties.isEmpty()) { - updateCredentialsFromProperties(credentials, authProperties); + updateCredentialsFromProperties(progressMonitor, credentials, authProperties); } configuration.getAuthModel().saveCredentials(dataSourceContainer, configuration, credentials); diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/impl/WebServiceCore.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/impl/WebServiceCore.java index 94388e500d..5db3858023 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/impl/WebServiceCore.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/impl/WebServiceCore.java @@ -373,6 +373,7 @@ public class WebServiceCore implements DBWServiceCore { if (saveCredentials) { // Save all passed credentials in the datasource container WebDataSourceUtils.saveAuthProperties( + webSession.getProgressMonitor(), dataSourceContainer, dataSourceContainer.getConnectionConfiguration(), authProperties, @@ -529,6 +530,7 @@ public class WebServiceCore implements DBWServiceCore { } } WebDataSourceUtils.saveAuthProperties( + webSession.getProgressMonitor(), testDataSource, testDataSource.getConnectionConfiguration(), configInput.getCredentials(),