diff --git a/server/bundles/io.cloudbeaver.server/plugin.xml b/server/bundles/io.cloudbeaver.server/plugin.xml
index 98dee138f2..26bded60e7 100644
--- a/server/bundles/io.cloudbeaver.server/plugin.xml
+++ b/server/bundles/io.cloudbeaver.server/plugin.xml
@@ -35,8 +35,36 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/session/WebSession.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/session/WebSession.java
index a1fe3203a8..dce61d86ab 100644
--- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/session/WebSession.java
+++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/session/WebSession.java
@@ -18,6 +18,7 @@ package io.cloudbeaver.model.session;
import io.cloudbeaver.DBWebException;
import io.cloudbeaver.WebServiceUtils;
+import io.cloudbeaver.model.user.WebUser;
import io.cloudbeaver.server.CloudbeaverConstants;
import io.cloudbeaver.server.CloudbeaverPlatform;
import io.cloudbeaver.model.*;
@@ -68,6 +69,7 @@ public class WebSession {
private long createTime;
private long lastAccessTime;
+ private WebUser user;
private String locale;
private final List connections = new ArrayList<>();
@@ -126,6 +128,14 @@ public class WebSession {
return lastAccessTime;
}
+ public WebUser getUser() {
+ return user;
+ }
+
+ public void setUser(WebUser user) {
+ this.user = user;
+ }
+
@NotNull
public String getLocale() {
return locale;
diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebAuthProvider.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebAuthProvider.java
new file mode 100644
index 0000000000..7c5d7ef97e
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebAuthProvider.java
@@ -0,0 +1,56 @@
+/*
+ * 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.model.user;
+
+import io.cloudbeaver.server.registry.WebAuthProviderDescriptor;
+import io.cloudbeaver.server.registry.WebPermissionDescriptor;
+import org.jkiss.dbeaver.Log;
+
+/**
+ * Web user.
+ */
+public class WebAuthProvider {
+
+ private static final Log log = Log.getLog(WebAuthProvider.class);
+
+ private final WebAuthProviderDescriptor descriptor;
+
+ public WebAuthProvider(WebAuthProviderDescriptor descriptor) {
+ this.descriptor = descriptor;
+ }
+
+ public String getId() {
+ return descriptor.getId();
+ }
+
+ public String getLabel() {
+ return descriptor.getLabel();
+ }
+
+ public String getIcon() {
+ return descriptor.getIcon();
+ }
+
+ public String getDescription() {
+ return descriptor.getDescription();
+ }
+
+ @Override
+ public String toString() {
+ return getId();
+ }
+}
diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebPermission.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebPermission.java
new file mode 100644
index 0000000000..70ad1113a3
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebPermission.java
@@ -0,0 +1,59 @@
+/*
+ * 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.model.user;
+
+import io.cloudbeaver.server.registry.WebPermissionDescriptor;
+import org.jkiss.dbeaver.Log;
+
+/**
+ * Web user.
+ */
+public class WebPermission {
+
+ private static final Log log = Log.getLog(WebPermission.class);
+
+ private final WebPermissionDescriptor descriptor;
+
+ public WebPermission(WebPermissionDescriptor descriptor) {
+ this.descriptor = descriptor;
+ }
+
+ public String getId() {
+ return descriptor.getId();
+ }
+
+ public String getLabel() {
+ return descriptor.getLabel();
+ }
+
+ public String getDescription() {
+ return descriptor.getDescription();
+ }
+
+ public String getProvider() {
+ return descriptor.getService().getLabel();
+ }
+
+ public String getCategory() {
+ return descriptor.getCategory();
+ }
+
+ @Override
+ public String toString() {
+ return getId();
+ }
+}
diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebRole.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebRole.java
new file mode 100644
index 0000000000..8c2dd2c611
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebRole.java
@@ -0,0 +1,63 @@
+/*
+ * 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.model.user;
+
+import org.jkiss.dbeaver.Log;
+
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+/**
+ * Web role.
+ */
+public class WebRole {
+
+ private static final Log log = Log.getLog(WebRole.class);
+
+ private String id;
+ private String label;
+ private String icon;
+ private String description;
+
+ private Set permissions = new LinkedHashSet<>();
+
+ public String getId() {
+ return id;
+ }
+
+ public String getLabel() {
+ return label;
+ }
+
+ public String getIcon() {
+ return icon;
+ }
+
+ public String getDescription() {
+ return description;
+ }
+
+ public Set getPermissions() {
+ return Collections.unmodifiableSet(permissions);
+ }
+
+ @Override
+ public String toString() {
+ return id;
+ }
+}
diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebUser.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebUser.java
new file mode 100644
index 0000000000..12eb312c86
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebUser.java
@@ -0,0 +1,65 @@
+/*
+ * 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.model.user;
+
+import org.jkiss.dbeaver.Log;
+
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * Web user.
+ */
+public class WebUser {
+
+ private static final Log log = Log.getLog(WebUser.class);
+
+ private String userName;
+
+ private Map metaParameters = new LinkedHashMap<>();
+ private Map configurationParameters = new LinkedHashMap<>();
+
+ private Set roles = new LinkedHashSet<>();
+
+ private String activeAuthModel;
+ private Map> authCredentials = new HashMap<>();
+
+ public String[] getGrantedRoles() {
+ return roles.stream().map(WebRole::getId).toArray(String[]::new);
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public Map getMetaParameters() {
+ return Collections.unmodifiableMap(metaParameters);
+ }
+
+ public Map getConfigurationParameters() {
+ return Collections.unmodifiableMap(configurationParameters);
+ }
+
+ public Set getRoles() {
+ return Collections.unmodifiableSet(roles);
+ }
+
+ @Override
+ public String toString() {
+ return userName;
+ }
+}
diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebUserCredentials.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebUserCredentials.java
new file mode 100644
index 0000000000..1978dc04da
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/user/WebUserCredentials.java
@@ -0,0 +1,24 @@
+/*
+ * 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.model.user;
+
+/**
+ * Web user.
+ */
+public class WebUserCredentials {
+
+}
diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/registry/WebAuthProviderDescriptor.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/registry/WebAuthProviderDescriptor.java
new file mode 100644
index 0000000000..d891ad8850
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/registry/WebAuthProviderDescriptor.java
@@ -0,0 +1,47 @@
+/*
+ * 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.server.registry;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+
+/**
+ * Auth service descriptor
+ */
+public class WebAuthProviderDescriptor {
+
+ private final IConfigurationElement cfg;
+
+ public WebAuthProviderDescriptor(IConfigurationElement cfg) {
+ this.cfg = cfg;;
+ }
+
+ public String getId() {
+ return cfg.getAttribute("id");
+ }
+
+ public String getLabel() {
+ return cfg.getAttribute("label");
+ }
+
+ public String getDescription() {
+ return cfg.getAttribute("description");
+ }
+
+ public String getIcon() {
+ return cfg.getAttribute("icon");
+ }
+}
diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/registry/WebPermissionDescriptor.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/registry/WebPermissionDescriptor.java
new file mode 100644
index 0000000000..062c74feb7
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/registry/WebPermissionDescriptor.java
@@ -0,0 +1,53 @@
+/*
+ * 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.server.registry;
+
+import org.eclipse.core.runtime.IConfigurationElement;
+
+/**
+ * Web connection info
+ */
+public class WebPermissionDescriptor {
+
+ private final WebServiceDescriptor service;
+ private final IConfigurationElement cfg;
+
+ public WebPermissionDescriptor(WebServiceDescriptor service, IConfigurationElement cfg) {
+ this.service = service;
+ this.cfg = cfg;;
+ }
+
+ public WebServiceDescriptor getService() {
+ return service;
+ }
+
+ public String getId() {
+ return cfg.getAttribute("id");
+ }
+
+ public String getLabel() {
+ return cfg.getAttribute("label");
+ }
+
+ public String getDescription() {
+ return cfg.getAttribute("description");
+ }
+
+ public String getCategory() {
+ return cfg.getAttribute("category");
+ }
+}
diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/registry/WebServiceDescriptor.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/registry/WebServiceDescriptor.java
index d26be4863d..3c333cac34 100644
--- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/registry/WebServiceDescriptor.java
+++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/registry/WebServiceDescriptor.java
@@ -22,6 +22,9 @@ import org.eclipse.core.runtime.IConfigurationElement;
import org.jkiss.dbeaver.DBException;
import org.jkiss.dbeaver.model.impl.AbstractContextDescriptor;
+import java.util.ArrayList;
+import java.util.List;
+
/**
* WebServiceDescriptor
*/
@@ -35,6 +38,7 @@ public class WebServiceDescriptor extends AbstractContextDescriptor {
private final ObjectType implClass;
private DBWServiceBinding instance;
+ private final List permissions = new ArrayList<>();
public WebServiceDescriptor(IConfigurationElement config)
{
@@ -43,6 +47,10 @@ public class WebServiceDescriptor extends AbstractContextDescriptor {
this.label = config.getAttribute("label");
this.description = config.getAttribute("description");
this.implClass = new ObjectType(config.getAttribute("class"));
+
+ for (IConfigurationElement pc : config.getChildren("permission")) {
+ permissions.add(new WebPermissionDescriptor(this, pc));
+ }
}
public String getId() {
@@ -57,6 +65,10 @@ public class WebServiceDescriptor extends AbstractContextDescriptor {
return description;
}
+ public List getPermissions() {
+ return permissions;
+ }
+
public DBWServiceBinding getInstance()
throws DBException
{
diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/registry/WebServiceRegistry.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/registry/WebServiceRegistry.java
index d8c15d4a3c..cd1de3f2e3 100644
--- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/registry/WebServiceRegistry.java
+++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/registry/WebServiceRegistry.java
@@ -23,13 +23,16 @@ import org.eclipse.core.runtime.Platform;
import org.jkiss.dbeaver.Log;
import java.util.ArrayList;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
public class WebServiceRegistry {
private static final Log log = Log.getLog(WebServiceRegistry.class);
private static final String TAG_SERVICE = "service"; //$NON-NLS-1$
+ private static final String TAG_AUTH_MODEL = "authProvider"; //$NON-NLS-1$
private static WebServiceRegistry instance = null;
@@ -44,6 +47,8 @@ public class WebServiceRegistry {
private final List webServices = new ArrayList<>();
private DBWServiceBinding[] webServiceInstances;
+ private final Map authProviders = new LinkedHashMap<>();
+
private WebServiceRegistry() {
}
@@ -55,6 +60,9 @@ public class WebServiceRegistry {
if (TAG_SERVICE.equals(ext.getName())) {
this.webServices.add(
new WebServiceDescriptor(ext));
+ } else if (TAG_AUTH_MODEL.equals(ext.getName())) {
+ WebAuthProviderDescriptor providerDescriptor = new WebAuthProviderDescriptor(ext);
+ this.authProviders.put(providerDescriptor.getId(), providerDescriptor);
}
}
}
@@ -94,4 +102,13 @@ public class WebServiceRegistry {
public DBWServiceBinding[] getWebServiceInstances() {
return webServiceInstances;
}
+
+ public List getAuthProviders() {
+ return new ArrayList<>(authProviders.values());
+ }
+
+ public WebAuthProviderDescriptor getAuthProvider(String id) {
+ return authProviders.get(id);
+ }
+
}
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 6d3028957a..baa705fcb9 100644
--- a/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls
+++ b/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls
@@ -2,6 +2,8 @@
type AdminUserInfo {
userName: ID!
+ metaParameters: Object!
+ configurationParameters: Object!
grantedRoles: [ID]!
}
@@ -13,9 +15,10 @@ type AdminRoleInfo {
type AdminPermissionInfo {
id: ID!
-
label: [String]
description: [String]
+
+ provider: String!
category: String
}
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 fef0a1ee47..329cfd1da5 100644
--- a/server/bundles/io.cloudbeaver.service.auth/schema/service.auth.graphqls
+++ b/server/bundles/io.cloudbeaver.service.auth/schema/service.auth.graphqls
@@ -8,7 +8,7 @@ type AuthCredentialInfo {
order: Int
}
-type AuthModelInfo {
+type AuthProviderInfo {
id: ID!
label: String!
icon: ID
@@ -30,12 +30,12 @@ type UserAuthInfo {
extend type Query {
- authLogin(model: ID!, credentials: Object!): UserAuthInfo
+ authLogin(provider: ID!, credentials: Object!): UserAuthInfo
authLogout: Boolean
sessionUser: UserAuthInfo
- authModels: [AuthModelInfo]!
+ authModels: [AuthProviderInfo]!
}