From 5edbf686d42d2b7395e4ec6bf69115ccd154aab9 Mon Sep 17 00:00:00 2001 From: serge-rider Date: Sat, 30 Oct 2021 22:07:59 +0300 Subject: [PATCH] CB-1356 Default user metas --- .../schema/service.admin.graphqls | 2 +- .../service/admin/DBWServiceAdmin.java | 2 +- .../service/admin/impl/WebServiceAdmin.java | 2 +- .../io.cloudbeaver.service.auth/plugin.xml | 12 ++++ .../schema/io.cloudbeaver.userProfile.exsd | 33 ++++++++++ .../registry/WebUserProfileRegistry.java | 65 +++++++++++++++++++ .../service/auth/DBWServiceAuth.java | 4 ++ .../service/auth/WebServiceBindingAuth.java | 2 + .../service/auth/impl/WebServiceAuthImpl.java | 9 +++ 9 files changed, 128 insertions(+), 3 deletions(-) create mode 100644 server/bundles/io.cloudbeaver.service.auth/schema/io.cloudbeaver.userProfile.exsd create mode 100644 server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/registry/WebUserProfileRegistry.java 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 7393ef7524..b3a3112a62 100644 --- a/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls +++ b/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls @@ -158,7 +158,7 @@ extend type Query { #### User profile - saveUserMetaParameter(id: ID!, displayName: String!, description: String, required: Boolean!): Boolean! + saveUserMetaParameter(id: ID!, displayName: String!, description: String, required: Boolean!): ObjectPropertyInfo! deleteUserMetaParameter(id: ID!): Boolean! diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/DBWServiceAdmin.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/DBWServiceAdmin.java index 35a69c7d7b..4e1716cb87 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/DBWServiceAdmin.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/DBWServiceAdmin.java @@ -144,7 +144,7 @@ public interface DBWServiceAdmin extends DBWService { // User meta parameters @WebAction(requirePermissions = DBWConstants.PERMISSION_ADMIN) - boolean saveUserMetaParameter(WebSession webSession, String id, String displayName, String description, Boolean required) throws DBWebException; + WebPropertyInfo saveUserMetaParameter(WebSession webSession, String id, String displayName, String description, Boolean required) throws DBWebException; @WebAction(requirePermissions = DBWConstants.PERMISSION_ADMIN) Object deleteUserMetaParameter(WebSession webSession, String id) throws DBWebException; @WebAction(requirePermissions = DBWConstants.PERMISSION_ADMIN) 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 86d298595f..031bd6cf61 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 @@ -595,7 +595,7 @@ public class WebServiceAdmin implements DBWServiceAdmin { } @Override - public boolean saveUserMetaParameter(WebSession webSession, String id, String displayName, String description, Boolean required) throws DBWebException { + public WebPropertyInfo saveUserMetaParameter(WebSession webSession, String id, String displayName, String description, Boolean required) throws DBWebException { throw new DBWebException("Not implemented"); } diff --git a/server/bundles/io.cloudbeaver.service.auth/plugin.xml b/server/bundles/io.cloudbeaver.service.auth/plugin.xml index 0d18645ef0..88c2b42c37 100644 --- a/server/bundles/io.cloudbeaver.service.auth/plugin.xml +++ b/server/bundles/io.cloudbeaver.service.auth/plugin.xml @@ -3,10 +3,22 @@ + + + + + + + + + + + + diff --git a/server/bundles/io.cloudbeaver.service.auth/schema/io.cloudbeaver.userProfile.exsd b/server/bundles/io.cloudbeaver.service.auth/schema/io.cloudbeaver.userProfile.exsd new file mode 100644 index 0000000000..5901571b6a --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.auth/schema/io.cloudbeaver.userProfile.exsd @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + Web service description + + + + + + diff --git a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/registry/WebUserProfileRegistry.java b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/registry/WebUserProfileRegistry.java new file mode 100644 index 0000000000..ea01e1f290 --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/registry/WebUserProfileRegistry.java @@ -0,0 +1,65 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2021 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.registry; + +import org.eclipse.core.runtime.IConfigurationElement; +import org.eclipse.core.runtime.IExtensionRegistry; +import org.eclipse.core.runtime.Platform; +import org.jkiss.dbeaver.Log; +import org.jkiss.dbeaver.model.impl.PropertyDescriptor; +import org.jkiss.dbeaver.model.preferences.DBPPropertyDescriptor; +import org.jkiss.utils.ArrayUtils; + +import java.util.ArrayList; +import java.util.List; + +public class WebUserProfileRegistry { + + private static final Log log = Log.getLog(WebUserProfileRegistry.class); + + public static final String EXTENSION_ID = "io.cloudbeaver.userProfile"; //$NON-NLS-1$ + + private static WebUserProfileRegistry instance = null; + private final List properties = new ArrayList<>(); + + public synchronized static WebUserProfileRegistry getInstance() { + if (instance == null) { + instance = new WebUserProfileRegistry(); + instance.loadExtensions(Platform.getExtensionRegistry()); + } + return instance; + } + + private WebUserProfileRegistry() { + } + + public List getProperties() { + return properties; + } + + private void loadExtensions(IExtensionRegistry registry) { + IConfigurationElement[] extConfigs = registry.getConfigurationElementsFor(EXTENSION_ID); + for (IConfigurationElement ext : extConfigs) { + for (IConfigurationElement cfgElement : ext.getChildren("userProfileProperties")) { + for (IConfigurationElement propGroup : ArrayUtils.safeArray(cfgElement.getChildren(PropertyDescriptor.TAG_PROPERTY_GROUP))) { + properties.addAll(PropertyDescriptor.extractProperties(propGroup)); + } + } + } + } + +} diff --git a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/DBWServiceAuth.java b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/DBWServiceAuth.java index e706675266..4528ad1703 100644 --- a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/DBWServiceAuth.java +++ b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/DBWServiceAuth.java @@ -19,6 +19,7 @@ package io.cloudbeaver.service.auth; import io.cloudbeaver.DBWService; import io.cloudbeaver.DBWebException; import io.cloudbeaver.WebAction; +import io.cloudbeaver.model.WebPropertyInfo; import io.cloudbeaver.model.session.WebAuthInfo; import io.cloudbeaver.model.session.WebSession; import io.cloudbeaver.model.user.WebAuthProviderInfo; @@ -55,4 +56,7 @@ public interface DBWServiceAuth extends DBWService { @WebAction() boolean changeLocalPassword(@NotNull WebSession webSession, @NotNull String oldPassword, @NotNull String newPassword) throws DBWebException; + + @WebAction() + WebPropertyInfo[] listUserProfileProperties(@NotNull WebSession webSession); } diff --git a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/WebServiceBindingAuth.java b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/WebServiceBindingAuth.java index 095bd2bd37..555c83495c 100644 --- a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/WebServiceBindingAuth.java +++ b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/WebServiceBindingAuth.java @@ -56,6 +56,8 @@ public class WebServiceBindingAuth extends WebServiceBindingBase env.getArgument("oldPassword"), env.getArgument("newPassword") )) + .dataFetcher("listUserProfileProperties", + env -> getService(env).listUserProfileProperties(getWebSession(env))) ; } diff --git a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/impl/WebServiceAuthImpl.java b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/impl/WebServiceAuthImpl.java index 11cdc3c5fe..7e74b81ed5 100644 --- a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/impl/WebServiceAuthImpl.java +++ b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/impl/WebServiceAuthImpl.java @@ -23,12 +23,14 @@ import io.cloudbeaver.DBWebException; import io.cloudbeaver.auth.DBWAuthProvider; import io.cloudbeaver.auth.DBWAuthProviderExternal; import io.cloudbeaver.auth.provider.local.LocalAuthProvider; +import io.cloudbeaver.model.WebPropertyInfo; import io.cloudbeaver.model.session.WebAuthInfo; import io.cloudbeaver.model.session.WebSession; import io.cloudbeaver.model.user.WebAuthProviderInfo; import io.cloudbeaver.model.user.WebUser; import io.cloudbeaver.registry.WebAuthProviderDescriptor; import io.cloudbeaver.registry.WebServiceRegistry; +import io.cloudbeaver.registry.WebUserProfileRegistry; import io.cloudbeaver.server.CBAppConfig; import io.cloudbeaver.server.CBApplication; import io.cloudbeaver.server.CBPlatform; @@ -298,4 +300,11 @@ public class WebServiceAuthImpl implements DBWServiceAuth { } } + @Override + public WebPropertyInfo[] listUserProfileProperties(@NotNull WebSession webSession) { + return WebUserProfileRegistry.getInstance().getProperties().stream() + .map(p -> new WebPropertyInfo(webSession, p, null)) + .toArray(WebPropertyInfo[]::new); + } + }