diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/WebConnectionInfo.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/WebConnectionInfo.java index d590d9c24f..b5105b6229 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/WebConnectionInfo.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/WebConnectionInfo.java @@ -25,6 +25,7 @@ import io.cloudbeaver.utils.CBModelConstants; import io.cloudbeaver.utils.ServletAppUtils; import io.cloudbeaver.utils.WebCommonUtils; import org.jkiss.code.NotNull; +import org.jkiss.code.Nullable; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.model.*; @@ -76,6 +77,8 @@ public class WebConnectionInfo { private String connectTime; private String serverVersion; private String clientVersion; + @Nullable + private Boolean credentialsSavedInSession; private transient Map savedAuthProperties; private transient List savedNetworkCredentials; @@ -195,7 +198,8 @@ public class WebConnectionInfo { @Property public boolean isCredentialsSaved() throws DBException { - return dataSourceContainer.isCredentialsSaved(); + // isCredentialsSaved can be true if credentials were saved during connection init for global project + return dataSourceContainer.isCredentialsSaved() && !(credentialsSavedInSession != null && credentialsSavedInSession); } @Property @@ -514,4 +518,10 @@ public class WebConnectionInfo { return tools; } + /** + * Updates param that checks whether credentials were saved only in session. + */ + public void setCredentialsSavedInSession(@Nullable Boolean credentialsSavedInSession) { + this.credentialsSavedInSession = credentialsSavedInSession; + } } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/DBWServiceCore.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/DBWServiceCore.java index c03064c1ac..2549fa64c5 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/DBWServiceCore.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/DBWServiceCore.java @@ -121,8 +121,8 @@ public interface DBWServiceCore extends DBWService { @NotNull String connectionId, @NotNull Map authProperties, @Nullable List networkCredentials, - @Nullable Boolean saveCredentials, - @Nullable Boolean sharedCredentials, + boolean saveCredentials, + boolean sharedCredentials, @Nullable String selectedCredentials ) throws DBWebException; diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/WebServiceBindingCore.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/WebServiceBindingCore.java index 6f416ec19b..c310b95d33 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/WebServiceBindingCore.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/WebServiceBindingCore.java @@ -24,7 +24,6 @@ import io.cloudbeaver.WebServiceUtils; import io.cloudbeaver.model.WebConnectionConfig; import io.cloudbeaver.model.WebNetworkHandlerConfigInput; import io.cloudbeaver.model.session.WebSession; -import io.cloudbeaver.server.BaseWebPlatform; import io.cloudbeaver.server.WebAppSessionManager; import io.cloudbeaver.server.WebAppUtils; import io.cloudbeaver.server.graphql.GraphQLEndpoint; @@ -33,6 +32,7 @@ import io.cloudbeaver.service.WebServiceBindingBase; import io.cloudbeaver.service.core.impl.WebServiceCore; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; +import org.jkiss.utils.CommonUtils; import java.util.Collections; import java.util.List; @@ -134,8 +134,8 @@ public class WebServiceBindingCore extends WebServiceBindingBase env.getArgument("id"), env.getArgument("credentials"), nhc, - env.getArgument("saveCredentials"), - env.getArgument("sharedCredentials"), + CommonUtils.toBoolean(env.getArgument("saveCredentials")), + CommonUtils.toBoolean(env.getArgument("sharedCredentials")), env.getArgument("selectedSecretId") ); } 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 94a79fb022..f08c41b0e4 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 @@ -339,8 +339,8 @@ public class WebServiceCore implements DBWServiceCore { @NotNull String connectionId, @NotNull Map authProperties, @Nullable List networkCredentials, - @Nullable Boolean saveCredentials, - @Nullable Boolean sharedCredentials, + boolean saveCredentials, + boolean sharedCredentials, @Nullable String selectedSecretId ) throws DBWebException { WebConnectionInfo connectionInfo = WebDataSourceUtils.getWebConnectionInfo(webSession, projectId, connectionId); @@ -408,14 +408,14 @@ public class WebServiceCore implements DBWServiceCore { } }); } - if (saveCredentials != null && saveCredentials) { + if (saveCredentials) { // Save all passed credentials in the datasource container WebServiceUtils.saveAuthProperties( dataSourceContainer, dataSourceContainer.getConnectionConfiguration(), authProperties, true, - sharedCredentials == null ? false : sharedCredentials + sharedCredentials ); var project = dataSourceContainer.getProject(); @@ -436,6 +436,9 @@ public class WebServiceCore implements DBWServiceCore { } if (WebServiceUtils.isGlobalProject(dataSourceContainer.getProject())) { // Do not flush config for global project (only admin can do it - CB-2415) + if (saveCredentials) { + connectionInfo.setCredentialsSavedInSession(true); + } saveConfig[0] = false; } if (saveConfig[0]) { @@ -556,6 +559,7 @@ public class WebServiceCore implements DBWServiceCore { config.isSharedCredentials() ); } + connectionInfo.setCredentialsSavedInSession(null); WSDataSourceProperty property = getDatasourceEventProperty(oldDataSource, dataSource);