From db05ee1cb8a853379c6853cbe8e79a7f835a8285 Mon Sep 17 00:00:00 2001 From: Naumov Alexey Date: Fri, 27 May 2022 01:14:14 +0200 Subject: [PATCH 1/3] fix(plugin-resource-manager-administration): CB-2066 disable rm via amin part --- .../core-root/src/ServerConfigResource.ts | 8 +++ .../src/queries/session/serverConfig.gql | 2 + webapp/packages/core-sdk/src/sdk.ts | 5 +- .../.gitignore | 17 ++++++ .../package.json | 45 ++++++++++++++++ .../src/LocaleService.ts | 36 +++++++++++++ .../src/PluginBootstrap.ts | 54 +++++++++++++++++++ .../src/ResourceManagerSettings.tsx | 35 ++++++++++++ .../src/index.ts | 3 ++ .../src/locales/en.ts | 4 ++ .../src/locales/it.ts | 4 ++ .../src/locales/ru.ts | 4 ++ .../src/locales/zh.ts | 4 ++ .../src/manifest.ts | 20 +++++++ .../tsconfig.json | 20 +++++++ 15 files changed, 260 insertions(+), 1 deletion(-) create mode 100644 webapp/packages/plugin-resource-manager-administration/.gitignore create mode 100644 webapp/packages/plugin-resource-manager-administration/package.json create mode 100644 webapp/packages/plugin-resource-manager-administration/src/LocaleService.ts create mode 100644 webapp/packages/plugin-resource-manager-administration/src/PluginBootstrap.ts create mode 100644 webapp/packages/plugin-resource-manager-administration/src/ResourceManagerSettings.tsx create mode 100644 webapp/packages/plugin-resource-manager-administration/src/index.ts create mode 100644 webapp/packages/plugin-resource-manager-administration/src/locales/en.ts create mode 100644 webapp/packages/plugin-resource-manager-administration/src/locales/it.ts create mode 100644 webapp/packages/plugin-resource-manager-administration/src/locales/ru.ts create mode 100644 webapp/packages/plugin-resource-manager-administration/src/locales/zh.ts create mode 100644 webapp/packages/plugin-resource-manager-administration/src/manifest.ts create mode 100644 webapp/packages/plugin-resource-manager-administration/tsconfig.json diff --git a/webapp/packages/core-root/src/ServerConfigResource.ts b/webapp/packages/core-root/src/ServerConfigResource.ts index 73fc6823dc..57b0bef6a9 100644 --- a/webapp/packages/core-root/src/ServerConfigResource.ts +++ b/webapp/packages/core-root/src/ServerConfigResource.ts @@ -94,6 +94,10 @@ export class ServerConfigResource extends CachedDataResource; redirectOnFederatedAuth?: Maybe; + resourceManagerEnabled?: Maybe; resourceQuotas: Scalars['Object']; rootURI: Scalars['String']; serverURL: Scalars['String']; @@ -1365,6 +1366,7 @@ export interface ServerConfigInput { enabledAuthProviders?: InputMaybe>; enabledFeatures?: InputMaybe>; publicCredentialsSaveEnabled?: InputMaybe; + resourceManagerEnabled?: InputMaybe; serverName?: InputMaybe; serverURL?: InputMaybe; sessionExpireTime?: InputMaybe; @@ -2292,7 +2294,7 @@ export type ReadSessionLogQuery = { log: Array<{ time?: any; type: string; messa export type ServerConfigQueryVariables = Exact<{ [key: string]: never }>; -export type ServerConfigQuery = { serverConfig: { name: string; version: string; workspaceId: string; serverURL: string; rootURI: string; hostName: string; productConfiguration: any; supportsCustomConnections?: boolean; supportsConnectionBrowser?: boolean; supportsWorkspaces?: boolean; sessionExpireTime?: number; anonymousAccessEnabled?: boolean; adminCredentialsSaveEnabled?: boolean; publicCredentialsSaveEnabled?: boolean; licenseRequired: boolean; licenseValid: boolean; configurationMode?: boolean; developmentMode?: boolean; redirectOnFederatedAuth?: boolean; enabledFeatures: Array; enabledAuthProviders: Array; resourceQuotas: any; disabledDrivers: Array; supportedLanguages: Array<{ isoCode: string; displayName?: string; nativeName?: string }>; defaultNavigatorSettings: { showSystemObjects: boolean; showUtilityObjects: boolean; showOnlyEntities: boolean; mergeEntities: boolean; hideFolders: boolean; hideSchemas: boolean; hideVirtualModel: boolean }; productInfo: { id: string; version: string; latestVersionInfo?: string; name: string; description?: string; buildTime: string; releaseTime: string; licenseInfo?: string } } }; +export type ServerConfigQuery = { serverConfig: { name: string; version: string; workspaceId: string; serverURL: string; rootURI: string; hostName: string; productConfiguration: any; supportsCustomConnections?: boolean; supportsConnectionBrowser?: boolean; supportsWorkspaces?: boolean; sessionExpireTime?: number; anonymousAccessEnabled?: boolean; adminCredentialsSaveEnabled?: boolean; publicCredentialsSaveEnabled?: boolean; resourceManagerEnabled?: boolean; licenseRequired: boolean; licenseValid: boolean; configurationMode?: boolean; developmentMode?: boolean; redirectOnFederatedAuth?: boolean; enabledFeatures: Array; enabledAuthProviders: Array; resourceQuotas: any; disabledDrivers: Array; supportedLanguages: Array<{ isoCode: string; displayName?: string; nativeName?: string }>; defaultNavigatorSettings: { showSystemObjects: boolean; showUtilityObjects: boolean; showOnlyEntities: boolean; mergeEntities: boolean; hideFolders: boolean; hideSchemas: boolean; hideVirtualModel: boolean }; productInfo: { id: string; version: string; latestVersionInfo?: string; name: string; description?: string; buildTime: string; releaseTime: string; licenseInfo?: string } } }; export type SessionPermissionsQueryVariables = Exact<{ [key: string]: never }>; @@ -3627,6 +3629,7 @@ export const ServerConfigDocument = ` anonymousAccessEnabled adminCredentialsSaveEnabled publicCredentialsSaveEnabled + resourceManagerEnabled licenseRequired licenseValid configurationMode diff --git a/webapp/packages/plugin-resource-manager-administration/.gitignore b/webapp/packages/plugin-resource-manager-administration/.gitignore new file mode 100644 index 0000000000..fd03da61a3 --- /dev/null +++ b/webapp/packages/plugin-resource-manager-administration/.gitignore @@ -0,0 +1,17 @@ +# dependencies +/node_modules + +# testing +/coverage + +# production +/lib + +# misc +.DS_Store +.env* + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* \ No newline at end of file diff --git a/webapp/packages/plugin-resource-manager-administration/package.json b/webapp/packages/plugin-resource-manager-administration/package.json new file mode 100644 index 0000000000..4a64eca9f9 --- /dev/null +++ b/webapp/packages/plugin-resource-manager-administration/package.json @@ -0,0 +1,45 @@ +{ + "name": "@cloudbeaver/plugin-resource-manager-administration", + "sideEffects": false, + "version": "0.1.0", + "description": "", + "license": "Apache-2.0", + "main": "lib/index.js", + "module": "lib/index.js", + "types": "src/index.ts", + "scripts": { + "prebuild": "rimraf lib/*", + "build": "webpack --config ../../configs/webpack.plugin.config.js", + "postbuild": "tsc", + "lint": "eslint ./src/ --ext .ts,.tsx", + "lint-fix": "eslint ./src/ --ext .ts,.tsx --fix" + }, + "peerDependencies": { + "@cloudbeaver/core-administration": "~0.1.0", + "@cloudbeaver/core-app": "~0.1.0", + "@cloudbeaver/core-authentication": "~0.1.0", + "@cloudbeaver/core-blocks": "~0.1.0", + "@cloudbeaver/core-connections": "~0.1.0", + "@cloudbeaver/core-di": "~0.1.0", + "@cloudbeaver/core-dialogs": "~0.1.0", + "@cloudbeaver/core-events": "~0.1.0", + "@cloudbeaver/core-executor": "~0.1.0", + "@cloudbeaver/core-extensions": "~0.1.0", + "@cloudbeaver/core-localization": "~0.1.0", + "@cloudbeaver/core-notifications": "~0.1.0", + "@cloudbeaver/core-plugin": "~0.1.0", + "@cloudbeaver/core-product": "~0.1.0", + "@cloudbeaver/core-root": "~0.1.0", + "@cloudbeaver/core-routing": "~0.1.0", + "@cloudbeaver/core-sdk": "~0.1.0", + "@cloudbeaver/core-settings": "~0.1.0", + "@cloudbeaver/core-theming": "~0.1.0", + "@cloudbeaver/core-ui": "~0.1.0", + "@cloudbeaver/core-utils": "~0.1.0", + "@cloudbeaver/core-view": "~0.1.0", + "react": "~17.x.x", + "mobx": "~6.x.x", + "mobx-react-lite": "~3.x.x", + "reshadow": "~0.x.x" + } +} \ No newline at end of file diff --git a/webapp/packages/plugin-resource-manager-administration/src/LocaleService.ts b/webapp/packages/plugin-resource-manager-administration/src/LocaleService.ts new file mode 100644 index 0000000000..90c761184a --- /dev/null +++ b/webapp/packages/plugin-resource-manager-administration/src/LocaleService.ts @@ -0,0 +1,36 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2020-2022 DBeaver Corp and others + * + * Licensed under the Apache License, Version 2.0. + * you may not use this file except in compliance with the License. + */ + +import { Bootstrap, injectable } from '@cloudbeaver/core-di'; +import { LocalizationService } from '@cloudbeaver/core-localization'; + +@injectable() +export class LocaleService extends Bootstrap { + constructor(private readonly localizationService: LocalizationService) { + super(); + } + + register(): void | Promise { + this.localizationService.addProvider(this.provider.bind(this)); + } + + load(): void | Promise { } + + private async provider(locale: string) { + switch (locale) { + case 'ru': + return (await import('./locales/ru')).default; + case 'it': + return (await import('./locales/it')).default; + case 'zh': + return (await import('./locales/zh')).default; + default: + return (await import('./locales/en')).default; + } + } +} \ No newline at end of file diff --git a/webapp/packages/plugin-resource-manager-administration/src/PluginBootstrap.ts b/webapp/packages/plugin-resource-manager-administration/src/PluginBootstrap.ts new file mode 100644 index 0000000000..c759eea3e2 --- /dev/null +++ b/webapp/packages/plugin-resource-manager-administration/src/PluginBootstrap.ts @@ -0,0 +1,54 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2020-2022 DBeaver Corp and others + * + * Licensed under the Apache License, Version 2.0. + * you may not use this file except in compliance with the License. + */ + +import { Bootstrap, injectable } from '@cloudbeaver/core-di'; +import { NotificationService } from '@cloudbeaver/core-events'; +import { ExecutorInterrupter, IExecutionContextProvider } from '@cloudbeaver/core-executor'; +import { ServerConfigResource } from '@cloudbeaver/core-root'; +import { ILoadConfigData, ServerConfigurationService } from '@cloudbeaver/plugin-administration'; + +import { ResourceManagerSettings } from './ResourceManagerSettings'; + +@injectable() +export class PluginBootstrap extends Bootstrap { + constructor( + private readonly serverConfigurationService: ServerConfigurationService, + private readonly serverConfigResource: ServerConfigResource, + private readonly notificationService: NotificationService + ) { + super(); + + this.loadConfigHandler = this.loadConfigHandler.bind(this); + } + + register(): void | Promise { + this.serverConfigurationService.configurationContainer.add(ResourceManagerSettings, 1); + this.serverConfigurationService.loadConfigTask.addHandler(this.loadConfigHandler); + } + + async load(): Promise { } + + private async loadConfigHandler(data: ILoadConfigData, contexts: IExecutionContextProvider) { + if (!data.reset) { + return; + } + + try { + const config = await this.serverConfigResource.load(); + + if (!config) { + return; + } + + data.state.serverConfig.resourceManagerEnabled = config.resourceManagerEnabled; + } catch (exception) { + ExecutorInterrupter.interrupt(contexts); + this.notificationService.logException(exception as any, 'Can\'t load server configuration'); + } + } +} \ No newline at end of file diff --git a/webapp/packages/plugin-resource-manager-administration/src/ResourceManagerSettings.tsx b/webapp/packages/plugin-resource-manager-administration/src/ResourceManagerSettings.tsx new file mode 100644 index 0000000000..749f4fdf2f --- /dev/null +++ b/webapp/packages/plugin-resource-manager-administration/src/ResourceManagerSettings.tsx @@ -0,0 +1,35 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2020-2022 DBeaver Corp and others + * + * Licensed under the Apache License, Version 2.0. + * you may not use this file except in compliance with the License. + */ + +import { observer } from 'mobx-react-lite'; +import styled from 'reshadow'; + +import { BASE_CONTAINERS_STYLES, Group, GroupTitle, PlaceholderComponent, Switch } from '@cloudbeaver/core-blocks'; +import { useTranslate } from '@cloudbeaver/core-localization'; +import type { IConfigurationPlaceholderProps } from '@cloudbeaver/plugin-administration'; + +export const ResourceManagerSettings: PlaceholderComponent = observer( + function ResourceManagerSettings({ state }) { + const translate = useTranslate(); + + return styled(BASE_CONTAINERS_STYLES)( + + {translate('plugin_resource_manager_title')} + + {translate('plugin_resource_manager_administration_settings_enable')} + + + ); + }); \ No newline at end of file diff --git a/webapp/packages/plugin-resource-manager-administration/src/index.ts b/webapp/packages/plugin-resource-manager-administration/src/index.ts new file mode 100644 index 0000000000..7a00070e27 --- /dev/null +++ b/webapp/packages/plugin-resource-manager-administration/src/index.ts @@ -0,0 +1,3 @@ +import { resourceManagerAdministrationPlugin } from './manifest'; + +export default resourceManagerAdministrationPlugin; \ No newline at end of file diff --git a/webapp/packages/plugin-resource-manager-administration/src/locales/en.ts b/webapp/packages/plugin-resource-manager-administration/src/locales/en.ts new file mode 100644 index 0000000000..800db43248 --- /dev/null +++ b/webapp/packages/plugin-resource-manager-administration/src/locales/en.ts @@ -0,0 +1,4 @@ +export default [ + ['plugin_resource_manager_administration_settings_enable', 'Enable Resource manager'], + ['plugin_resource_manager_administration_settings_enable_description', 'Enable Resource manager functionality'], +]; \ No newline at end of file diff --git a/webapp/packages/plugin-resource-manager-administration/src/locales/it.ts b/webapp/packages/plugin-resource-manager-administration/src/locales/it.ts new file mode 100644 index 0000000000..800db43248 --- /dev/null +++ b/webapp/packages/plugin-resource-manager-administration/src/locales/it.ts @@ -0,0 +1,4 @@ +export default [ + ['plugin_resource_manager_administration_settings_enable', 'Enable Resource manager'], + ['plugin_resource_manager_administration_settings_enable_description', 'Enable Resource manager functionality'], +]; \ No newline at end of file diff --git a/webapp/packages/plugin-resource-manager-administration/src/locales/ru.ts b/webapp/packages/plugin-resource-manager-administration/src/locales/ru.ts new file mode 100644 index 0000000000..2a93554670 --- /dev/null +++ b/webapp/packages/plugin-resource-manager-administration/src/locales/ru.ts @@ -0,0 +1,4 @@ +export default [ + ['plugin_resource_manager_administration_settings_enable', 'Включить Менеджер ресурсов'], + ['plugin_resource_manager_administration_settings_enable_description', 'Включает функционал Менеджера ресурсов'], +]; \ No newline at end of file diff --git a/webapp/packages/plugin-resource-manager-administration/src/locales/zh.ts b/webapp/packages/plugin-resource-manager-administration/src/locales/zh.ts new file mode 100644 index 0000000000..800db43248 --- /dev/null +++ b/webapp/packages/plugin-resource-manager-administration/src/locales/zh.ts @@ -0,0 +1,4 @@ +export default [ + ['plugin_resource_manager_administration_settings_enable', 'Enable Resource manager'], + ['plugin_resource_manager_administration_settings_enable_description', 'Enable Resource manager functionality'], +]; \ No newline at end of file diff --git a/webapp/packages/plugin-resource-manager-administration/src/manifest.ts b/webapp/packages/plugin-resource-manager-administration/src/manifest.ts new file mode 100644 index 0000000000..9729a95623 --- /dev/null +++ b/webapp/packages/plugin-resource-manager-administration/src/manifest.ts @@ -0,0 +1,20 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2020-2022 DBeaver Corp and others + * + * Licensed under the Apache License, Version 2.0. + * you may not use this file except in compliance with the License. + */ + +import type { PluginManifest } from '@cloudbeaver/core-di'; + +import { LocaleService } from './LocaleService'; +import { PluginBootstrap } from './PluginBootstrap'; + +export const resourceManagerAdministrationPlugin: PluginManifest = { + info: { name: 'Resource manager administration plugin' }, + providers: [ + PluginBootstrap, + LocaleService, + ], +}; \ No newline at end of file diff --git a/webapp/packages/plugin-resource-manager-administration/tsconfig.json b/webapp/packages/plugin-resource-manager-administration/tsconfig.json new file mode 100644 index 0000000000..bca25a8e0a --- /dev/null +++ b/webapp/packages/plugin-resource-manager-administration/tsconfig.json @@ -0,0 +1,20 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "lib", + "composite": true + }, + "include": [ + "src" + ], + "exclude": [ + "**/node_modules", + "**/.*/" + ], + "references": [ + { + "path": "../*" + } + ] +} \ No newline at end of file From 8e2ec49f88bf24699e0242eb14fc5695ff7bcabb Mon Sep 17 00:00:00 2001 From: Naumov Alexey Date: Fri, 27 May 2022 12:49:00 +0200 Subject: [PATCH 2/3] fix(plugin-resource-manager-administration): CB-2066 add rm enable option to the existing group --- .../ServerConfiguration/ServerConfigurationPage.tsx | 6 +++++- .../ServerConfiguration/ServerConfigurationService.ts | 2 +- .../src/PluginBootstrap.ts | 2 +- .../src/ResourceManagerSettings.tsx | 6 +++--- .../plugin-resource-manager/src/ResourceManagerService.ts | 7 +++---- 5 files changed, 13 insertions(+), 10 deletions(-) diff --git a/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/ServerConfigurationPage.tsx b/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/ServerConfigurationPage.tsx index 33914c9127..5fce6cef5a 100644 --- a/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/ServerConfigurationPage.tsx +++ b/webapp/packages/plugin-administration/src/ConfigurationWizard/ServerConfiguration/ServerConfigurationPage.tsx @@ -126,7 +126,11 @@ export const ServerConfigurationPage: AdministrationItemContentComponent = obser - + ; readonly validationTask: IExecutor; readonly configurationContainer: PlaceholderContainer; - readonly pluginsContainer: PlaceholderContainer; + readonly pluginsContainer: PlaceholderContainer; private done: boolean; private stateLinked: boolean; diff --git a/webapp/packages/plugin-resource-manager-administration/src/PluginBootstrap.ts b/webapp/packages/plugin-resource-manager-administration/src/PluginBootstrap.ts index c759eea3e2..52449aeaf2 100644 --- a/webapp/packages/plugin-resource-manager-administration/src/PluginBootstrap.ts +++ b/webapp/packages/plugin-resource-manager-administration/src/PluginBootstrap.ts @@ -27,7 +27,7 @@ export class PluginBootstrap extends Bootstrap { } register(): void | Promise { - this.serverConfigurationService.configurationContainer.add(ResourceManagerSettings, 1); + this.serverConfigurationService.pluginsContainer.add(ResourceManagerSettings, 0); this.serverConfigurationService.loadConfigTask.addHandler(this.loadConfigHandler); } diff --git a/webapp/packages/plugin-resource-manager-administration/src/ResourceManagerSettings.tsx b/webapp/packages/plugin-resource-manager-administration/src/ResourceManagerSettings.tsx index 749f4fdf2f..8efa05619b 100644 --- a/webapp/packages/plugin-resource-manager-administration/src/ResourceManagerSettings.tsx +++ b/webapp/packages/plugin-resource-manager-administration/src/ResourceManagerSettings.tsx @@ -9,7 +9,7 @@ import { observer } from 'mobx-react-lite'; import styled from 'reshadow'; -import { BASE_CONTAINERS_STYLES, Group, GroupTitle, PlaceholderComponent, Switch } from '@cloudbeaver/core-blocks'; +import { BASE_CONTAINERS_STYLES, GroupTitle, PlaceholderComponent, Switch } from '@cloudbeaver/core-blocks'; import { useTranslate } from '@cloudbeaver/core-localization'; import type { IConfigurationPlaceholderProps } from '@cloudbeaver/plugin-administration'; @@ -18,7 +18,7 @@ export const ResourceManagerSettings: PlaceholderComponent + <> {translate('plugin_resource_manager_title')} {translate('plugin_resource_manager_administration_settings_enable')} - + ); }); \ No newline at end of file diff --git a/webapp/packages/plugin-resource-manager/src/ResourceManagerService.ts b/webapp/packages/plugin-resource-manager/src/ResourceManagerService.ts index 7870cd264a..69bdf2a5f2 100644 --- a/webapp/packages/plugin-resource-manager/src/ResourceManagerService.ts +++ b/webapp/packages/plugin-resource-manager/src/ResourceManagerService.ts @@ -10,20 +10,19 @@ import { computed, makeObservable, observable } from 'mobx'; import { AuthInfoService } from '@cloudbeaver/core-authentication'; import { injectable } from '@cloudbeaver/core-di'; - -import { ResourceManagerSettingsService } from './ResourceManagerSettingsService'; +import { ServerConfigResource } from '@cloudbeaver/core-root'; @injectable() export class ResourceManagerService { get enabled() { - return !this.resourceManagerSettingsService.settings.getValue('disabled') && !!this.authInfoService.userInfo; + return this.serverConfigResource.resourceManagerEnabled && !!this.authInfoService.userInfo; } panelEnabled: boolean; constructor( - private readonly resourceManagerSettingsService: ResourceManagerSettingsService, private readonly authInfoService: AuthInfoService, + private readonly serverConfigResource: ServerConfigResource ) { this.togglePanel = this.togglePanel.bind(this); From 722c5539067246a5576400bb0c95fb3831a02715 Mon Sep 17 00:00:00 2001 From: Naumov Alexey Date: Fri, 27 May 2022 13:08:47 +0200 Subject: [PATCH 3/3] fix(plugin-resource-manager-administration): CB-2066 add rm-administration plugin --- webapp/packages/product-default/src/index.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/webapp/packages/product-default/src/index.ts b/webapp/packages/product-default/src/index.ts index b365bc4749..bee503523c 100644 --- a/webapp/packages/product-default/src/index.ts +++ b/webapp/packages/product-default/src/index.ts @@ -19,6 +19,7 @@ import localization from '@cloudbeaver/plugin-localization'; import objectViewer from '@cloudbeaver/plugin-object-viewer'; import productPlugin from '@cloudbeaver/plugin-product'; import resourceManager from '@cloudbeaver/plugin-resource-manager'; +import resourceManagerAdministration from '@cloudbeaver/plugin-resource-manager-administration'; import settingsMenu from '@cloudbeaver/plugin-settings-menu'; import settingsMenuAdministration from '@cloudbeaver/plugin-settings-menu-administration'; import sqlEditor from '@cloudbeaver/plugin-sql-editor'; @@ -60,6 +61,7 @@ const PLUGINS: PluginManifest[] = [ settingsMenuAdministration, help, resourceManager, + resourceManagerAdministration, sqlEditorResource, ];