From fa1908573fcfd28afcd30fe0241be743b21bc37d Mon Sep 17 00:00:00 2001 From: serge-rider Date: Tue, 28 Apr 2020 17:54:19 +0300 Subject: [PATCH] #8 Authentication service be --- .../META-INF/MANIFEST.MF | 4 +- .../schema/schema.graphqls | 3 + .../META-INF/MANIFEST.MF | 20 +++++ .../OSGI-INF/l10n/bundle.properties | 2 + .../build.properties | 7 ++ .../io.cloudbeaver.service.auth/plugin.xml | 12 +++ .../io.cloudbeaver.service.auth/pom.xml | 16 ++++ .../schema/service.auth.graphqls | 73 +++++++++++++++++++ .../service/metadata/WebServiceAuth.java | 54 ++++++++++++++ .../META-INF/MANIFEST.MF | 1 - .../META-INF/MANIFEST.MF | 4 - 11 files changed, 189 insertions(+), 7 deletions(-) create mode 100644 server/bundles/io.cloudbeaver.service.auth/META-INF/MANIFEST.MF create mode 100644 server/bundles/io.cloudbeaver.service.auth/OSGI-INF/l10n/bundle.properties create mode 100644 server/bundles/io.cloudbeaver.service.auth/build.properties create mode 100644 server/bundles/io.cloudbeaver.service.auth/plugin.xml create mode 100644 server/bundles/io.cloudbeaver.service.auth/pom.xml create mode 100644 server/bundles/io.cloudbeaver.service.auth/schema/service.auth.graphqls create mode 100644 server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/metadata/WebServiceAuth.java diff --git a/server/bundles/io.cloudbeaver.server/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.server/META-INF/MANIFEST.MF index 31a5e6ebef..026a7cf62c 100644 --- a/server/bundles/io.cloudbeaver.server/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.server/META-INF/MANIFEST.MF @@ -15,9 +15,9 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.core.commands, org.eclipse.core.resources, org.apache.commons.jexl, - org.jkiss.utils, + org.jkiss.utils;visibility:=reexport, org.jkiss.dbeaver.model;visibility:=reexport, - org.jkiss.dbeaver.model.sql, + org.jkiss.dbeaver.model.sql;visibility:=reexport, org.jkiss.dbeaver.registry, org.jkiss.dbeaver.data.gis, javax.servlet;visibility:=reexport, diff --git a/server/bundles/io.cloudbeaver.server/schema/schema.graphqls b/server/bundles/io.cloudbeaver.server/schema/schema.graphqls index 7821bb81f2..eb12eba5c4 100644 --- a/server/bundles/io.cloudbeaver.server/schema/schema.graphqls +++ b/server/bundles/io.cloudbeaver.server/schema/schema.graphqls @@ -412,6 +412,9 @@ type Query { # Returns session state ( initialize if not ) sessionState: SessionInfo + # Session permissions + sessionPermissions: [ID]! + # Get driver info driverList( id: ID ): [ DriverInfo! ] diff --git a/server/bundles/io.cloudbeaver.service.auth/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.service.auth/META-INF/MANIFEST.MF new file mode 100644 index 0000000000..b1e39539c2 --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.auth/META-INF/MANIFEST.MF @@ -0,0 +1,20 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Vendor: %Bundle-Vendor +Bundle-Name: %Bundle-Name +Bundle-SymbolicName: io.cloudbeaver.service.auth;singleton:=true +Bundle-Version: 1.0.0.qualifier +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 +Bundle-Localization: OSGI-INF/l10n/bundle +Automatic-Module-Name: io.cloudbeaver.service.auth diff --git a/server/bundles/io.cloudbeaver.service.auth/OSGI-INF/l10n/bundle.properties b/server/bundles/io.cloudbeaver.service.auth/OSGI-INF/l10n/bundle.properties new file mode 100644 index 0000000000..d87bca20aa --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.auth/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.auth/build.properties b/server/bundles/io.cloudbeaver.service.auth/build.properties new file mode 100644 index 0000000000..91bb65c8b8 --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.auth/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.auth/plugin.xml b/server/bundles/io.cloudbeaver.service.auth/plugin.xml new file mode 100644 index 0000000000..e0b61a223e --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.auth/plugin.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/server/bundles/io.cloudbeaver.service.auth/pom.xml b/server/bundles/io.cloudbeaver.service.auth/pom.xml new file mode 100644 index 0000000000..c836eeeb6b --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.auth/pom.xml @@ -0,0 +1,16 @@ + + + 4.0.0 + + io.cloudbeaver + bundles + 1.0.0-SNAPSHOT + ../ + + io.cloudbeaver.service.metadata + 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 new file mode 100644 index 0000000000..b2915780d7 --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.auth/schema/service.auth.graphqls @@ -0,0 +1,73 @@ + +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! + description: String + protected: Boolean + editable: Boolean + possibleValues: [String]! + order: Int +} + +type AuthModelInfo { + id: ID! + label: String! + icon: ID + description: String + + isDefault: Boolean + + crdentialsInfo: [AuthCredentialInfo]! +} + +type UserAuthInfo { + userName: String! + + loginTime: DateTime + + # Optional login message + message: String +} + +extend type Query { + + login(model: ID!, credentials: Object!): UserAuthInfo + + logout: Boolean + + sessionUser: UserAuthInfo + + authModels: [AuthModelInfo]! + +} 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/metadata/WebServiceAuth.java new file mode 100644 index 0000000000..660a9779db --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/metadata/WebServiceAuth.java @@ -0,0 +1,54 @@ +/* + * 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.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.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; + +/** + * Web service implementation + */ +public class WebServiceAuth implements DBWServiceGraphQL { + + private static final String SCHEMA_FILE_NAME = "schema/service.auth.graphqls"; + + @Override + public TypeDefinitionRegistry getTypeDefinition() throws DBWebException { + return WebServiceUtils.loadSchemaDefinition(getClass(), SCHEMA_FILE_NAME); + } + + @Override + public void bindWiring(DBWModel model) throws DBWebException { + model.getQueryType().dataFetcher("login", env -> { + 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 eae50d5f11..1f7dda6247 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 @@ -15,7 +15,6 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.core.resources, io.cloudbeaver.server, org.jkiss.dbeaver.data.transfer, - org.jkiss.dbeaver.model, org.jkiss.dbeaver.model.sql, org.jkiss.dbeaver.registry Bundle-Localization: OSGI-INF/l10n/bundle 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 7a4ffa3c7f..3640939625 100644 --- a/server/bundles/io.cloudbeaver.service.metadata/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.service.metadata/META-INF/MANIFEST.MF @@ -14,10 +14,6 @@ Require-Bundle: org.eclipse.core.runtime, org.eclipse.core.commands, org.eclipse.core.resources, io.cloudbeaver.server, - com.google.gson, - javax.servlet, - org.jkiss.bundle.graphql.java, - org.jkiss.dbeaver.model, org.jkiss.dbeaver.model.sql Bundle-Localization: OSGI-INF/l10n/bundle Automatic-Module-Name: io.cloudbeaver.service.metadata