diff --git a/server/bundles/io.cloudbeaver.server/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.server/META-INF/MANIFEST.MF index 026a7cf62c..d9535a322b 100644 --- a/server/bundles/io.cloudbeaver.server/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.server/META-INF/MANIFEST.MF @@ -9,11 +9,9 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Bundle-Activator: io.cloudbeaver.server.WebPlatformActivator Bundle-ClassPath: . -Require-Bundle: org.eclipse.core.runtime, +Require-Bundle: org.eclipse.core.runtime;visibility:=reexport, org.eclipse.core.expressions, - org.apache.commons.logging, - org.eclipse.core.commands, - org.eclipse.core.resources, + org.eclipse.core.resources;visibility:=reexport, org.apache.commons.jexl, org.jkiss.utils;visibility:=reexport, org.jkiss.dbeaver.model;visibility:=reexport, 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 3b7959dae8..7980fdbfb6 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/WebServiceUtils.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/WebServiceUtils.java @@ -80,17 +80,4 @@ public class WebServiceUtils { return WebServiceUtils.class.getClassLoader().getResourceAsStream(path); } - public static TypeDefinitionRegistry loadSchemaDefinition(Class theClass, String schemaPath) throws DBWebException { - try (InputStream schemaStream = theClass.getClassLoader().getResourceAsStream(schemaPath)) { - if (schemaStream == null) { - throw new IOException("Schema file '" + schemaPath + "' not found"); - } - try (Reader schemaReader = new InputStreamReader(schemaStream)) { - return new SchemaParser().parse(schemaReader); - } - } catch (IOException e) { - throw new RuntimeException("Error reading core schema", e); - } - } - } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/api/WebServiceBase.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/api/WebServiceBase.java new file mode 100644 index 0000000000..2bd6c0663b --- /dev/null +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/api/WebServiceBase.java @@ -0,0 +1,50 @@ +/* + * 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.api; + +import graphql.schema.DataFetchingEnvironment; +import graphql.schema.idl.SchemaParser; +import graphql.schema.idl.TypeDefinitionRegistry; +import io.cloudbeaver.DBWebException; + +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; + +/** + * Web service implementation + */ +public abstract class WebServiceBase implements DBWServiceGraphQL { + + protected void checkPermission(DBWModel model, DataFetchingEnvironment env, String permission) { + + } + + public static TypeDefinitionRegistry loadSchemaDefinition(Class theClass, String schemaPath) throws DBWebException { + try (InputStream schemaStream = theClass.getClassLoader().getResourceAsStream(schemaPath)) { + if (schemaStream == null) { + throw new IOException("Schema file '" + schemaPath + "' not found"); + } + try (Reader schemaReader = new InputStreamReader(schemaStream)) { + return new SchemaParser().parse(schemaReader); + } + } catch (IOException e) { + throw new RuntimeException("Error reading core schema", e); + } + } +} diff --git a/server/bundles/io.cloudbeaver.service.admin/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.service.admin/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..2244f50fd4 --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.admin/META-INF/MANIFEST.MF @@ -0,0 +1,13 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Vendor: %Bundle-Vendor +Bundle-Name: %Bundle-Name +Bundle-SymbolicName: io.cloudbeaver.service.admin;singleton:=true +Bundle-Version: 1.0.0.qualifier +Bundle-Release-Date: 20200504 +Bundle-RequiredExecutionEnvironment: JavaSE-1.8 +Bundle-ActivationPolicy: lazy +Bundle-ClassPath: . +Require-Bundle: io.cloudbeaver.server +Bundle-Localization: OSGI-INF/l10n/bundle +Automatic-Module-Name: io.cloudbeaver.service.admin diff --git a/server/bundles/io.cloudbeaver.service.admin/OSGI-INF/l10n/bundle.properties b/server/bundles/io.cloudbeaver.service.admin/OSGI-INF/l10n/bundle.properties new file mode 100644 index 0000000000..d87bca20aa --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.admin/OSGI-INF/l10n/bundle.properties @@ -0,0 +1,2 @@ +Bundle-Vendor = DBeaver Corp +Bundle-Name = Cloudbeaver Web Service - Metadata diff --git a/server/bundles/io.cloudbeaver.service.admin/build.properties b/server/bundles/io.cloudbeaver.service.admin/build.properties new file mode 100644 index 0000000000..91bb65c8b8 --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.admin/build.properties @@ -0,0 +1,7 @@ +source.. = src/ +output.. = target/classes/ +bin.includes = .,\ + META-INF/,\ + OSGI-INF/,\ + schema/,\ + plugin.xml diff --git a/server/bundles/io.cloudbeaver.service.admin/plugin.xml b/server/bundles/io.cloudbeaver.service.admin/plugin.xml new file mode 100644 index 0000000000..4154c83660 --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.admin/plugin.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/server/bundles/io.cloudbeaver.service.admin/pom.xml b/server/bundles/io.cloudbeaver.service.admin/pom.xml new file mode 100644 index 0000000000..ced79749fc --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.admin/pom.xml @@ -0,0 +1,16 @@ + + + 4.0.0 + + io.cloudbeaver + bundles + 1.0.0-SNAPSHOT + ../ + + io.cloudbeaver.service.admin + 1.0.0-SNAPSHOT + eclipse-plugin + + diff --git a/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls b/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls new file mode 100644 index 0000000000..6d3028957a --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls @@ -0,0 +1,40 @@ + +type AdminUserInfo { + userName: ID! + + grantedRoles: [ID]! +} + +type AdminRoleInfo { + roleName: ID! + + rolePermissions: [ID]! +} + +type AdminPermissionInfo { + id: ID! + + label: [String] + description: [String] + category: String +} + +extend type Query { + + listUsers(userName: ID): [AdminUserInfo]! + listRoles(roleName: ID): [AdminRoleInfo]! + listPermissions(permissionId: ID): [AdminPermissionInfo] + + createUser(userName: ID!): AdminUserInfo! + deleteUser(userName: ID!): Boolean + + getUserAdminCredentials(userName: ID!): Object + + setUserAdminCredentials(userName: ID!, credentials: Object): Boolean + + grantUserRole(user: ID!, role: ID!): Boolean + revokeUserRole(user: ID!, role: ID!): Boolean + + setRolePermissions(roleID: ID!, permissions: [ID]!): Boolean + +} diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminPermissions.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminPermissions.java new file mode 100644 index 0000000000..421cf175e9 --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminPermissions.java @@ -0,0 +1,26 @@ +/* + * 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.admin; + +/** + * Web service implementation + */ +public class AdminPermissions { + + public static final String PERMISSION_ADMIN = "admin"; + +} diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceAdmin.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceAdmin.java new file mode 100644 index 0000000000..cd84a2f1d0 --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceAdmin.java @@ -0,0 +1,48 @@ +/* + * 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.admin; + +import graphql.schema.DataFetchingEnvironment; +import graphql.schema.idl.TypeDefinitionRegistry; +import io.cloudbeaver.DBWebException; +import io.cloudbeaver.api.DBWModel; +import io.cloudbeaver.api.DBWServiceGraphQL; +import io.cloudbeaver.api.WebServiceBase; +import org.osgi.framework.AdminPermission; + +/** + * Web service implementation + */ +public class WebServiceAdmin extends WebServiceBase { + + private static final String SCHEMA_FILE_NAME = "schema/service.admin.graphqls"; + + @Override + public TypeDefinitionRegistry getTypeDefinition() throws DBWebException { + return loadSchemaDefinition(getClass(), SCHEMA_FILE_NAME); + } + + @Override + public void bindWiring(DBWModel model) throws DBWebException { + model.getQueryType().dataFetcher("listUsers", env -> { + checkPermission(model, env, AdminPermissions.PERMISSION_ADMIN); + throw new DBWebException("Not implemented"); + }); + + } + +} diff --git a/server/bundles/io.cloudbeaver.service.auth/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.service.auth/META-INF/MANIFEST.MF index b1e39539c2..c305bfbc5f 100644 --- a/server/bundles/io.cloudbeaver.service.auth/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.service.auth/META-INF/MANIFEST.MF @@ -8,13 +8,6 @@ Bundle-Release-Date: 20200504 Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Bundle-ClassPath: . -Require-Bundle: org.eclipse.core.runtime, - org.eclipse.core.expressions, - org.apache.commons.logging, - org.eclipse.core.commands, - org.eclipse.core.resources, - io.cloudbeaver.server, - org.jkiss.dbeaver.model, - org.jkiss.dbeaver.model.sql +Require-Bundle: io.cloudbeaver.server Bundle-Localization: OSGI-INF/l10n/bundle Automatic-Module-Name: io.cloudbeaver.service.auth diff --git a/server/bundles/io.cloudbeaver.service.auth/plugin.xml b/server/bundles/io.cloudbeaver.service.auth/plugin.xml index e0b61a223e..c714ef8ae6 100644 --- a/server/bundles/io.cloudbeaver.service.auth/plugin.xml +++ b/server/bundles/io.cloudbeaver.service.auth/plugin.xml @@ -4,7 +4,7 @@ - + diff --git a/server/bundles/io.cloudbeaver.service.auth/pom.xml b/server/bundles/io.cloudbeaver.service.auth/pom.xml index c836eeeb6b..604f19b40a 100644 --- a/server/bundles/io.cloudbeaver.service.auth/pom.xml +++ b/server/bundles/io.cloudbeaver.service.auth/pom.xml @@ -9,7 +9,7 @@ 1.0.0-SNAPSHOT ../ - io.cloudbeaver.service.metadata + io.cloudbeaver.service.auth 1.0.0-SNAPSHOT eclipse-plugin diff --git a/server/bundles/io.cloudbeaver.service.auth/schema/service.auth.graphqls b/server/bundles/io.cloudbeaver.service.auth/schema/service.auth.graphqls index b2915780d7..fef0a1ee47 100644 --- a/server/bundles/io.cloudbeaver.service.auth/schema/service.auth.graphqls +++ b/server/bundles/io.cloudbeaver.service.auth/schema/service.auth.graphqls @@ -1,35 +1,3 @@ - -type UserInfo { - userName: ID! -} - -type RoleInfo { - roleName: ID! - - permissions: [ID]! -} - -type PermissionInfo { - id: ID! - - label: [String] - description: [String] -} - -type Admin { - users: [UserInfo] - roles: [RoleInfo] - permissions: [PermissionInfo] - - createUser(userName: ID!): UserInfo! - deleteUser(userName: ID!): Boolean - - setUserAuthCredentials(userName: ID!, model: ID!, credentials: Object): Boolean - - grantUserRole(user: ID!, role: ID!): Boolean - revokeUserRole(user: ID!, role: ID!): Boolean -} - type AuthCredentialInfo { id: ID! label: String! @@ -62,9 +30,9 @@ type UserAuthInfo { extend type Query { - login(model: ID!, credentials: Object!): UserAuthInfo + authLogin(model: ID!, credentials: Object!): UserAuthInfo - logout: Boolean + authLogout: Boolean sessionUser: UserAuthInfo diff --git a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/metadata/WebServiceAuth.java b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/WebServiceAuth.java similarity index 63% rename from server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/metadata/WebServiceAuth.java rename to server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/WebServiceAuth.java index 660a9779db..6e899c7d8e 100644 --- a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/metadata/WebServiceAuth.java +++ b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/WebServiceAuth.java @@ -14,39 +14,30 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package io.cloudbeaver.service.metadata; +package io.cloudbeaver.service.auth; import graphql.schema.idl.TypeDefinitionRegistry; import io.cloudbeaver.DBWebException; -import io.cloudbeaver.WebServiceUtils; import io.cloudbeaver.api.DBWModel; import io.cloudbeaver.api.DBWServiceGraphQL; -import io.cloudbeaver.api.DBWUtils; -import io.cloudbeaver.server.model.WebNavigatorNodeInfo; -import io.cloudbeaver.server.model.session.WebSession; -import org.jkiss.dbeaver.model.DBPScriptObject; -import org.jkiss.dbeaver.model.navigator.DBNDatabaseNode; -import org.jkiss.dbeaver.model.navigator.DBNNode; -import org.jkiss.dbeaver.model.struct.DBSObject; - -import java.util.LinkedHashMap; -import java.util.Map; +import io.cloudbeaver.api.WebServiceBase; /** * Web service implementation */ -public class WebServiceAuth implements DBWServiceGraphQL { +public class WebServiceAuth extends WebServiceBase { private static final String SCHEMA_FILE_NAME = "schema/service.auth.graphqls"; @Override public TypeDefinitionRegistry getTypeDefinition() throws DBWebException { - return WebServiceUtils.loadSchemaDefinition(getClass(), SCHEMA_FILE_NAME); + return loadSchemaDefinition(getClass(), SCHEMA_FILE_NAME); } @Override public void bindWiring(DBWModel model) throws DBWebException { - model.getQueryType().dataFetcher("login", env -> { + model.getQueryType().dataFetcher("authLogin", env -> { + Object context = env.getContext(); throw new DBWebException("Not implemented"); }); diff --git a/server/bundles/io.cloudbeaver.service.data.transfer/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.service.data.transfer/META-INF/MANIFEST.MF index 1f7dda6247..1f70148940 100644 --- a/server/bundles/io.cloudbeaver.service.data.transfer/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.service.data.transfer/META-INF/MANIFEST.MF @@ -8,14 +8,8 @@ Bundle-Release-Date: 20200504 Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Bundle-ClassPath: . -Require-Bundle: org.eclipse.core.runtime, - org.eclipse.core.expressions, - org.apache.commons.logging, - org.eclipse.core.commands, - org.eclipse.core.resources, - io.cloudbeaver.server, +Require-Bundle: io.cloudbeaver.server, org.jkiss.dbeaver.data.transfer, - org.jkiss.dbeaver.model.sql, org.jkiss.dbeaver.registry Bundle-Localization: OSGI-INF/l10n/bundle Automatic-Module-Name: io.cloudbeaver.service.data.transfer diff --git a/server/bundles/io.cloudbeaver.service.data.transfer/src/io/cloudbeaver/service/data/transfer/WebServiceDataTransfer.java b/server/bundles/io.cloudbeaver.service.data.transfer/src/io/cloudbeaver/service/data/transfer/WebServiceDataTransfer.java index e29ae2d076..c477dcc3b0 100644 --- a/server/bundles/io.cloudbeaver.service.data.transfer/src/io/cloudbeaver/service/data/transfer/WebServiceDataTransfer.java +++ b/server/bundles/io.cloudbeaver.service.data.transfer/src/io/cloudbeaver/service/data/transfer/WebServiceDataTransfer.java @@ -19,11 +19,7 @@ package io.cloudbeaver.service.data.transfer; import graphql.schema.DataFetchingEnvironment; import graphql.schema.idl.TypeDefinitionRegistry; import io.cloudbeaver.DBWebException; -import io.cloudbeaver.WebServiceUtils; -import io.cloudbeaver.api.DBWModel; -import io.cloudbeaver.api.DBWServiceGraphQL; -import io.cloudbeaver.api.DBWServiceServlet; -import io.cloudbeaver.api.DBWUtils; +import io.cloudbeaver.api.*; import io.cloudbeaver.server.CloudbeaverApplication; import io.cloudbeaver.server.model.session.WebSession; import org.eclipse.jetty.servlet.ServletContextHandler; @@ -32,7 +28,7 @@ import org.eclipse.jetty.servlet.ServletHolder; /** * Web service implementation */ -public class WebServiceDataTransfer implements DBWServiceGraphQL, DBWServiceServlet { +public class WebServiceDataTransfer extends WebServiceBase implements DBWServiceServlet { private static final String DT_SCHEMA_FILE_NAME = "schema/service.data.transfer.graphqls"; @@ -45,7 +41,7 @@ public class WebServiceDataTransfer implements DBWServiceGraphQL, DBWServiceServ @Override public TypeDefinitionRegistry getTypeDefinition() throws DBWebException { - return WebServiceUtils.loadSchemaDefinition(getClass(), DT_SCHEMA_FILE_NAME); + return loadSchemaDefinition(getClass(), DT_SCHEMA_FILE_NAME); } @Override diff --git a/server/bundles/io.cloudbeaver.service.metadata/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.service.metadata/META-INF/MANIFEST.MF index 3640939625..847a24eec2 100644 --- a/server/bundles/io.cloudbeaver.service.metadata/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.service.metadata/META-INF/MANIFEST.MF @@ -8,12 +8,6 @@ Bundle-Release-Date: 20200504 Bundle-RequiredExecutionEnvironment: JavaSE-1.8 Bundle-ActivationPolicy: lazy Bundle-ClassPath: . -Require-Bundle: org.eclipse.core.runtime, - org.eclipse.core.expressions, - org.apache.commons.logging, - org.eclipse.core.commands, - org.eclipse.core.resources, - io.cloudbeaver.server, - org.jkiss.dbeaver.model.sql +Require-Bundle: io.cloudbeaver.server Bundle-Localization: OSGI-INF/l10n/bundle Automatic-Module-Name: io.cloudbeaver.service.metadata diff --git a/server/bundles/io.cloudbeaver.service.metadata/src/io/cloudbeaver/service/metadata/WebServiceMetadata.java b/server/bundles/io.cloudbeaver.service.metadata/src/io/cloudbeaver/service/metadata/WebServiceMetadata.java index 2aad4bc572..0596965058 100644 --- a/server/bundles/io.cloudbeaver.service.metadata/src/io/cloudbeaver/service/metadata/WebServiceMetadata.java +++ b/server/bundles/io.cloudbeaver.service.metadata/src/io/cloudbeaver/service/metadata/WebServiceMetadata.java @@ -18,10 +18,9 @@ package io.cloudbeaver.service.metadata; import graphql.schema.idl.TypeDefinitionRegistry; import io.cloudbeaver.DBWebException; -import io.cloudbeaver.WebServiceUtils; import io.cloudbeaver.api.DBWModel; -import io.cloudbeaver.api.DBWServiceGraphQL; import io.cloudbeaver.api.DBWUtils; +import io.cloudbeaver.api.WebServiceBase; import io.cloudbeaver.server.model.WebNavigatorNodeInfo; import io.cloudbeaver.server.model.session.WebSession; import org.jkiss.dbeaver.model.DBPScriptObject; @@ -35,13 +34,13 @@ import java.util.Map; /** * Web service implementation */ -public class WebServiceMetadata implements DBWServiceGraphQL { +public class WebServiceMetadata extends WebServiceBase { - private static final String METADATA_SCHEMA_FILE_NAME = "schema/service.metadata.graphqls"; + private static final String SCHEMA_FILE_NAME = "schema/service.metadata.graphqls"; @Override public TypeDefinitionRegistry getTypeDefinition() throws DBWebException { - return WebServiceUtils.loadSchemaDefinition(getClass(), METADATA_SCHEMA_FILE_NAME); + return loadSchemaDefinition(getClass(), SCHEMA_FILE_NAME); } @Override diff --git a/server/bundles/pom.xml b/server/bundles/pom.xml index ad3b1c25de..90fe380014 100644 --- a/server/bundles/pom.xml +++ b/server/bundles/pom.xml @@ -14,6 +14,8 @@ io.cloudbeaver.server + io.cloudbeaver.service.admin + io.cloudbeaver.service.auth io.cloudbeaver.service.metadata io.cloudbeaver.service.data.transfer diff --git a/server/features/io.cloudbeaver.server.feature/feature.xml b/server/features/io.cloudbeaver.server.feature/feature.xml index 939b9e76c3..d9ae9392e9 100644 --- a/server/features/io.cloudbeaver.server.feature/feature.xml +++ b/server/features/io.cloudbeaver.server.feature/feature.xml @@ -32,6 +32,8 @@ + + diff --git a/server/product/web-server/CloudbeaverServer.product.launch b/server/product/web-server/CloudbeaverServer.product.launch index 4e764d7bdd..e90dba9c53 100644 --- a/server/product/web-server/CloudbeaverServer.product.launch +++ b/server/product/web-server/CloudbeaverServer.product.launch @@ -31,7 +31,7 @@ - +