diff --git a/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls b/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls index 62667bd295..992966b3a7 100644 --- a/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls +++ b/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls @@ -142,6 +142,7 @@ type ServerConfig { productConfiguration: Object! productInfo: ProductInfo! defaultNavigatorSettings: NavigatorSettings! + disabledDrivers: [ID!]! } type SessionInfo { @@ -189,6 +190,7 @@ type DriverInfo { driverInfoURL: String driverPropertiesURL: String embedded: Boolean + enabled: Boolean! # this fields must be removed and be replaced by DriverAuthModel allowsEmptyPassword: Boolean @deprecated diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebDatabaseDriverConfig.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebDatabaseDriverConfig.java index b7da447237..a5cca85bf8 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebDatabaseDriverConfig.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebDatabaseDriverConfig.java @@ -19,6 +19,7 @@ package io.cloudbeaver.model; import io.cloudbeaver.DBWebException; import io.cloudbeaver.WebServiceUtils; import io.cloudbeaver.model.session.WebSession; +import io.cloudbeaver.server.ConfigurationUtils; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.model.DBConstants; import org.jkiss.dbeaver.model.connection.DBPAuthModelDescriptor; @@ -233,4 +234,8 @@ public class WebDatabaseDriverConfig { .toArray(WebPropertyInfo[]::new); } + @Property + public boolean isEnabled() { + return ConfigurationUtils.isDriverEnabled(driver); + } } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebServerConfig.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebServerConfig.java index 51b9f060ed..26b3df1f42 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebServerConfig.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebServerConfig.java @@ -189,4 +189,9 @@ public class WebServerConfig { return new WebProductInfo(); } + @Property + public String[] getDisabledDrivers() { + return application.getAppConfiguration().getDisabledDrivers(); + } + } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBAppConfig.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBAppConfig.java index 8b039b1773..85c74d31dd 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBAppConfig.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBAppConfig.java @@ -166,6 +166,10 @@ public class CBAppConfig { return disabledDrivers; } + public void setDisabledDrivers(String[] disabledDrivers) { + this.disabledDrivers = disabledDrivers; + } + public boolean isFeatureEnabled(String id) { return ArrayUtils.contains(getEnabledFeatures(), id); } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBApplication.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBApplication.java index 137cb1a433..e687f230c4 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBApplication.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBApplication.java @@ -801,6 +801,9 @@ public class CBApplication extends BaseApplicationImpl { if (appConfig.getEnabledDrivers() != null) { JSONUtils.serializeStringList(json, "enabledDrivers", Arrays.asList(appConfig.getEnabledDrivers()), true); } + if (appConfig.getDisabledDrivers() != null) { + JSONUtils.serializeStringList(json, "disabledDrivers", Arrays.asList(appConfig.getDisabledDrivers()), true); + } if (!CommonUtils.isEmpty(appConfig.getPlugins())) { JSONUtils.serializeProperties(json, "plugins", appConfig.getPlugins()); diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBPlatform.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBPlatform.java index 3c15d23daf..2af8c29439 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBPlatform.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBPlatform.java @@ -18,7 +18,6 @@ package io.cloudbeaver.server; import io.cloudbeaver.model.session.WebSessionManager; -import io.cloudbeaver.registry.WebDriverRegistry; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Platform; import org.jkiss.code.NotNull; @@ -302,9 +301,6 @@ public class CBPlatform extends BasePlatformImpl { for (DBPDataSourceProviderDescriptor dspd : DataSourceProviderRegistry.getInstance().getEnabledDataSourceProviders()) { for (DBPDriver driver : dspd.getEnabledDrivers()) { - if (!WebDriverRegistry.getInstance().isDriverEnabled(driver)) { - continue; - } List libraries = driver.getDriverLibraries(); { boolean hasAllFiles = true; diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/ConfigurationUtils.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/ConfigurationUtils.java index 4c82505947..8aa868173a 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/ConfigurationUtils.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/ConfigurationUtils.java @@ -85,14 +85,16 @@ public class ConfigurationUtils { public static boolean isDriverEnabled(@NotNull DBPDriver driver) { var driverId = driver.getFullId(); + + String[] disabledDrivers = CBApplication.getInstance().getAppConfiguration().getDisabledDrivers(); + if (ArrayUtils.contains(disabledDrivers, driverId)) { + return false; + } String[] enabledDrivers = CBApplication.getInstance().getAppConfiguration().getEnabledDrivers(); if (enabledDrivers.length > 0 && !ArrayUtils.contains(enabledDrivers, driverId)) { return false; } - String[] disabledDrivers = CBApplication.getInstance().getAppConfiguration().getDisabledDrivers(); - if (disabledDrivers.length > 0 && ArrayUtils.contains(disabledDrivers, driverId)) { - return false; - } + return true; } } diff --git a/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls b/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls index 42be744d40..6a75465d96 100644 --- a/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls +++ b/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls @@ -91,7 +91,7 @@ input ServerConfigInput { enabledFeatures: [ID!] enabledAuthProviders: [ID!] - enabledDrivers: [ID!] + disabledDrivers: [ID!] sessionExpireTime: Int } diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminServerConfig.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminServerConfig.java index 3fa17c723c..113774ed60 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminServerConfig.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminServerConfig.java @@ -42,6 +42,7 @@ public class AdminServerConfig { private final List enabledFeatures; private final List enabledAuthProviders; private final String[] enabledDrivers; + private final String[] disabledDrivers; private long sessionExpireTime; @@ -76,6 +77,12 @@ public class AdminServerConfig { } else { this.enabledDrivers = appConfig.getEnabledDrivers(); } + + if (params.containsKey("disabledDrivers")) { + this.disabledDrivers = JSONUtils.getStringList(params, "disabledDrivers").toArray(new String[0]); + } else { + this.disabledDrivers = appConfig.getDisabledDrivers(); + } } public String getServerName() { @@ -145,4 +152,8 @@ public class AdminServerConfig { public String[] getEnabledDrivers() { return enabledDrivers; } + + public String[] getDisabledDrivers() { + return disabledDrivers; + } } diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java index 194eb269d4..ba4b59821f 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java @@ -474,6 +474,7 @@ public class WebServiceAdmin implements DBWServiceAdmin { appConfig.setAdminCredentialsSaveEnabled(config.isAdminCredentialsSaveEnabled()); appConfig.setEnabledFeatures(config.getEnabledFeatures().toArray(new String[0])); appConfig.setEnabledDrivers(config.getEnabledDrivers()); + appConfig.setDisabledDrivers(config.getDisabledDrivers()); if (CommonUtils.isEmpty(config.getEnabledAuthProviders())) { // All of them