From 77ef182b516aeb489ecde4611f04a8d5cb3a1d56 Mon Sep 17 00:00:00 2001 From: Serge Rider Date: Tue, 20 Oct 2020 18:43:24 +0300 Subject: [PATCH] CB-422 AWS cloud configuration --- .../io/cloudbeaver/server/CBAppConfig.java | 16 ++++++++- .../io/cloudbeaver/server/CBApplication.java | 6 ++++ .../service/DBWServiceServerConfigurator.java | 33 +++++++++++++++++++ .../service/admin/impl/WebServiceAdmin.java | 12 +++++++ 4 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/DBWServiceServerConfigurator.java 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 6e27dbadf2..1b72a81742 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 @@ -90,12 +90,26 @@ public class CBAppConfig { return defaultAuthProvider; } + public Map getPlugins() { + return plugins; + } + public Map getPluginConfig(String pluginId) { + return getPluginConfig(pluginId, false); + } + + public Map getPluginConfig(String pluginId, boolean create) { Object config = plugins.get(pluginId); if (config instanceof Map) { return (Map) config; } else { - return Collections.emptyMap(); + if (create) { + Map newConfig = new LinkedHashMap<>(); + plugins.put(pluginId, newConfig); + return newConfig; + } else { + return Collections.emptyMap(); + } } } 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 b8c5639b39..6a76a70130 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 @@ -554,6 +554,7 @@ public class CBApplication extends BaseApplicationImpl { .setPrettyPrinting() .create(); try (JsonWriter json = gson.newJsonWriter(out)) { + json.setLenient(true); json.beginObject(); { json.name("server"); @@ -572,6 +573,11 @@ public class CBApplication extends BaseApplicationImpl { JSONUtils.field(json, "anonymousAccessEnabled", appConfig.isAnonymousAccessEnabled()); JSONUtils.field(json, "authenticationEnabled", appConfig.isAuthenticationEnabled()); JSONUtils.field(json, "supportsCustomConnections", appConfig.isSupportsCustomConnections()); + + if (!CommonUtils.isEmpty(appConfig.getPlugins())) { + JSONUtils.serializeProperties(json, "plugins", appConfig.getPlugins()); + } + json.endObject(); } json.endObject(); diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/DBWServiceServerConfigurator.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/DBWServiceServerConfigurator.java new file mode 100644 index 0000000000..39eca62987 --- /dev/null +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/DBWServiceServerConfigurator.java @@ -0,0 +1,33 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2020 DBeaver Corp and others + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.cloudbeaver.service; + +import io.cloudbeaver.model.session.WebSession; +import io.cloudbeaver.server.CBAppConfig; +import org.jkiss.code.NotNull; +import org.jkiss.code.Nullable; +import org.jkiss.dbeaver.DBException; +import org.jkiss.dbeaver.model.app.DBPApplication; + +/** + * Web service implementation + */ +public interface DBWServiceServerConfigurator extends DBWServiceBinding { + + void configureServer(@NotNull DBPApplication application, @Nullable WebSession session, @NotNull CBAppConfig appConfig) throws DBException; + +} 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 0c1a5e59ca..ab6358af18 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 @@ -32,6 +32,7 @@ import io.cloudbeaver.registry.WebServiceRegistry; import io.cloudbeaver.server.CBAppConfig; import io.cloudbeaver.server.CBApplication; import io.cloudbeaver.server.CBPlatform; +import io.cloudbeaver.service.DBWServiceServerConfigurator; import io.cloudbeaver.service.admin.*; import org.jkiss.code.NotNull; import org.jkiss.dbeaver.Log; @@ -306,12 +307,23 @@ public class WebServiceAdmin implements DBWServiceAdmin { adminName = curUser == null ? null : curUser.getUserId(); adminPassword = null; } + + // Patch configuration by services + for (DBWServiceServerConfigurator wsc : WebServiceRegistry.getInstance().getWebServices(DBWServiceServerConfigurator.class)) { + try { + wsc.configureServer(CBApplication.getInstance(), webSession, appConfig); + } catch (Exception e) { + log.warn("Error configuring server by web service " + wsc.getClass().getName(), e); + } + } + CBApplication.getInstance().finishConfiguration( config.getServerName(), adminName, adminPassword, config.getSessionExpireTime(), appConfig); + // Refresh active session webSession.forceUserRefresh(null); } catch (Throwable e) {