From c852ade3bfe906fe505182d8544af207773477a6 Mon Sep 17 00:00:00 2001 From: Aleksandr Skoblikov Date: Wed, 3 Aug 2022 19:46:05 +0300 Subject: [PATCH] CB-2311 filter unaccessible connections --- .../src/io/cloudbeaver/model/session/WebSession.java | 10 +++++++++- .../src/io/cloudbeaver/utils/WebAppUtils.java | 11 +++++++++++ .../src/io/cloudbeaver/WebServiceUtils.java | 4 ++-- .../service/navigator/impl/WebServiceNavigator.java | 5 +++++ 4 files changed, 27 insertions(+), 3 deletions(-) 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 83f9f1ced5..8631f57196 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 @@ -27,6 +27,7 @@ import io.cloudbeaver.model.user.WebUser; import io.cloudbeaver.service.DBWSessionHandler; import io.cloudbeaver.service.sql.WebSQLConstants; import io.cloudbeaver.utils.CBModelConstants; +import io.cloudbeaver.utils.WebAppUtils; import io.cloudbeaver.utils.WebDataSourceUtils; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IStatus; @@ -356,11 +357,18 @@ public class WebSession extends AbstractSessionPersistent implements SMSession, // Add all provided datasources to the session List connList = new ArrayList<>(); for (DBPProject project : accessibleProjects) { + boolean isGlobalProject = WebAppUtils.isGlobalProject(project); DBPDataSourceRegistry registry = project.getDataSourceRegistry(); for (DBPDataSourceContainer ds : registry.getDataSources()) { WebConnectionInfo connectionInfo = new WebConnectionInfo(this, ds); - connList.add(connectionInfo); + if (isGlobalProject) { + if (isDataSourceAccessible(ds)) { + connList.add(connectionInfo); + } + } else { + connList.add(connectionInfo); + } } Throwable lastError = registry.getLastError(); if (lastError != null) { diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebAppUtils.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebAppUtils.java index 45edfeb74c..4e81e3ca73 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebAppUtils.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebAppUtils.java @@ -23,7 +23,9 @@ 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.app.DBPProject; import org.jkiss.dbeaver.model.auth.SMAuthenticationManager; +import org.jkiss.dbeaver.model.rm.RMProject; import org.jkiss.dbeaver.runtime.DBWorkbench; import org.jkiss.utils.CommonUtils; @@ -152,4 +154,13 @@ public class WebAppUtils { } return null; } + + public static boolean isGlobalProject(DBPProject project) { + return project.getId().equals(getGlobalProjectId()); + } + + public static String getGlobalProjectId() { + String globalConfigurationName = getWebApplication().getDefaultProjectName(); + return RMProject.Type.GLOBAL.getPrefix() + "_" + globalConfigurationName; + } } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/WebServiceUtils.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/WebServiceUtils.java index a5f56a3a5b..e9d31ffca5 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/WebServiceUtils.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/WebServiceUtils.java @@ -25,6 +25,7 @@ import io.cloudbeaver.model.WebNetworkHandlerConfigInput; import io.cloudbeaver.model.session.WebActionParameters; import io.cloudbeaver.model.session.WebSession; import io.cloudbeaver.server.CBApplication; +import io.cloudbeaver.utils.WebAppUtils; import io.cloudbeaver.utils.WebCommonUtils; import org.jkiss.code.NotNull; import org.jkiss.code.Nullable; @@ -95,8 +96,7 @@ public class WebServiceUtils extends WebCommonUtils { } public static DBPDataSourceRegistry getGlobalRegistry(WebSession session) { - String globalConfigurationName = CBApplication.getInstance().getDefaultProjectName(); - return session.getProjectById(RMProject.Type.GLOBAL.getPrefix() + "_" + globalConfigurationName).getDataSourceRegistry(); + return session.getProjectById(WebAppUtils.getGlobalProjectId()).getDataSourceRegistry(); } @NotNull diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java index 186f24f0b3..1c3be2f607 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java @@ -130,6 +130,11 @@ public class WebServiceNavigator implements DBWServiceNavigator { if (container.isTemplate()) { continue; } + + //TODO node should not contain unaccessible datasource + if (session.findWebConnectionInfo(container.getId()) == null) { + continue; + } } result.add(new WebNavigatorNodeInfo(session, node)); }