mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
CB-262 Server configuration API
This commit is contained in:
@@ -79,12 +79,12 @@ type ServerConfig {
|
||||
|
||||
anonymousAccessEnabled: Boolean
|
||||
authenticationEnabled: Boolean
|
||||
supportsPredefinedConnections: Boolean @deprecated # Supported always
|
||||
supportsProvidedConnections: Boolean @deprecated # Supported always
|
||||
supportsCustomConnections: Boolean
|
||||
supportsConnectionBrowser: Boolean
|
||||
supportsWorkspaces: Boolean
|
||||
|
||||
configurationMode: Boolean
|
||||
|
||||
supportedLanguages: [ ServerLanguage! ]!
|
||||
services: [ WebServiceConfig ]
|
||||
productConfiguration: Object!
|
||||
@@ -325,9 +325,6 @@ extend type Mutation {
|
||||
# Changes navigator settings for connection
|
||||
setConnectionNavigatorSettings( id: ID!, settings: NavigatorSettingsInput!): Boolean!
|
||||
|
||||
# Changes default navigator settings
|
||||
setDefaultNavigatorSettings( settings: NavigatorSettingsInput!): Boolean!
|
||||
|
||||
#### Generic async functions
|
||||
|
||||
asyncTaskCancel(id: String!): Boolean
|
||||
|
||||
@@ -27,6 +27,7 @@ import org.jkiss.dbeaver.model.app.DBPDataSourceRegistry;
|
||||
import org.jkiss.dbeaver.model.auth.DBAAuthCredentials;
|
||||
import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration;
|
||||
import org.jkiss.dbeaver.model.connection.DBPDriver;
|
||||
import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings;
|
||||
import org.jkiss.dbeaver.registry.DataSourceDescriptor;
|
||||
import org.jkiss.dbeaver.registry.DataSourceNavigatorSettings;
|
||||
import org.jkiss.dbeaver.registry.DataSourceProviderDescriptor;
|
||||
@@ -166,4 +167,9 @@ public class WebServiceUtils {
|
||||
initAuthProperties(dataSource, config.getCredentials());
|
||||
dataSource.setSavePassword(config.isSaveCredentials());
|
||||
}
|
||||
|
||||
public static DBNBrowseSettings parseNavigatorSettings(Map<String, Object> settingsMap) {
|
||||
return gson.fromJson(
|
||||
gson.toJsonTree(settingsMap), DataSourceNavigatorSettings.class);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -61,11 +61,6 @@ public class WebServerConfig {
|
||||
return application.getAppConfiguration().isAuthenticationEnabled();
|
||||
}
|
||||
|
||||
@Property
|
||||
public boolean isSupportsPredefinedConnections() {
|
||||
return application.getAppConfiguration().isSupportsPredefinedConnections();
|
||||
}
|
||||
|
||||
@Property
|
||||
public boolean isSupportsCustomConnections() {
|
||||
return application.getAppConfiguration().isSupportsCustomConnections();
|
||||
@@ -81,6 +76,11 @@ public class WebServerConfig {
|
||||
return application.getAppConfiguration().isSupportsUserWorkspaces();
|
||||
}
|
||||
|
||||
@Property
|
||||
public boolean isConfigurationMode() {
|
||||
return application.isConfigurationMode();
|
||||
}
|
||||
|
||||
@Property
|
||||
public WebServerLanguage[] getSupportedLanguages() {
|
||||
List<PlatformLanguageDescriptor> langs = PlatformLanguageRegistry.getInstance().getLanguages();
|
||||
|
||||
@@ -30,7 +30,6 @@ public class CBAppConfig {
|
||||
private boolean authenticationEnabled = true;
|
||||
private String anonymousUserRole = CBConstants.DEFAUL_APP_ANONYMOUS_ROLE_NAME;
|
||||
private String defaultUserRole = CBConstants.DEFAUL_APP_ANONYMOUS_ROLE_NAME;
|
||||
private boolean supportsPredefinedConnections = true;
|
||||
private boolean supportsCustomConnections = true;
|
||||
private boolean supportsConnectionBrowser = false;
|
||||
private boolean supportsUserWorkspaces = false;
|
||||
@@ -55,10 +54,6 @@ public class CBAppConfig {
|
||||
return defaultUserRole;
|
||||
}
|
||||
|
||||
public boolean isSupportsPredefinedConnections() {
|
||||
return supportsPredefinedConnections;
|
||||
}
|
||||
|
||||
public boolean isSupportsCustomConnections() {
|
||||
return supportsCustomConnections;
|
||||
}
|
||||
|
||||
@@ -80,6 +80,7 @@ public class CBApplication extends BaseApplicationImpl {
|
||||
private long maxSessionIdleTime = CBConstants.MAX_SESSION_IDLE_TIME;
|
||||
|
||||
private boolean develMode = false;
|
||||
private boolean configurationMode = false;
|
||||
|
||||
public CBApplication() {
|
||||
}
|
||||
@@ -349,6 +350,14 @@ public class CBApplication extends BaseApplicationImpl {
|
||||
return develMode;
|
||||
}
|
||||
|
||||
public boolean isConfigurationMode() {
|
||||
return configurationMode;
|
||||
}
|
||||
|
||||
public void setConfigurationMode(boolean configurationMode) {
|
||||
this.configurationMode = configurationMode;
|
||||
}
|
||||
|
||||
public DBNBrowseSettings getDefaultNavigatorSettings() {
|
||||
return defaultNavigatorSettings;
|
||||
}
|
||||
@@ -356,4 +365,5 @@ public class CBApplication extends BaseApplicationImpl {
|
||||
public void setDefaultNavigatorSettings(DBNBrowseSettings defaultNavigatorSettings) {
|
||||
this.defaultNavigatorSettings = defaultNavigatorSettings;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+1
-6
@@ -104,17 +104,12 @@ public interface DBWServiceCore extends DBWService {
|
||||
///////////////////////////////////////////
|
||||
// Navigator settings
|
||||
|
||||
@WebAction
|
||||
boolean setConnectionNavigatorSettings(WebSession webSession, String id, DBNBrowseSettings settings) throws DBWebException;
|
||||
|
||||
boolean setDefaultNavigatorSettings(WebSession webSession, DBNBrowseSettings settings);
|
||||
|
||||
///////////////////////////////////////////
|
||||
// Async tasks
|
||||
|
||||
@Deprecated
|
||||
@WebAction
|
||||
WebAsyncTaskInfo getAsyncTaskStatus(WebSession webSession, String taskId) throws DBWebException;
|
||||
|
||||
@WebAction
|
||||
WebAsyncTaskInfo getAsyncTaskInfo(WebSession webSession, String taskId, Boolean removeOnFinish) throws DBWebException;
|
||||
|
||||
|
||||
+2
-16
@@ -16,12 +16,11 @@
|
||||
*/
|
||||
package io.cloudbeaver.service.core;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.google.gson.GsonBuilder;
|
||||
import graphql.TypeResolutionEnvironment;
|
||||
import graphql.schema.DataFetchingEnvironment;
|
||||
import graphql.schema.idl.TypeRuntimeWiring;
|
||||
import io.cloudbeaver.DBWebException;
|
||||
import io.cloudbeaver.WebServiceUtils;
|
||||
import io.cloudbeaver.model.WebConnectionConfig;
|
||||
import io.cloudbeaver.model.session.WebSessionManager;
|
||||
import io.cloudbeaver.server.CBPlatform;
|
||||
@@ -29,18 +28,12 @@ import io.cloudbeaver.server.graphql.GraphQLEndpoint;
|
||||
import io.cloudbeaver.service.DBWBindingContext;
|
||||
import io.cloudbeaver.service.WebServiceBindingBase;
|
||||
import io.cloudbeaver.service.core.impl.WebServiceCore;
|
||||
import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings;
|
||||
import org.jkiss.dbeaver.registry.DataSourceNavigatorSettings;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Web service implementation
|
||||
*/
|
||||
public class WebServiceBindingCore extends WebServiceBindingBase<DBWServiceCore> {
|
||||
|
||||
private final Gson gson = new GsonBuilder().create();
|
||||
|
||||
public WebServiceBindingCore() {
|
||||
super(DBWServiceCore.class, new WebServiceCore(), "schema/service.core.graphqls");
|
||||
}
|
||||
@@ -83,10 +76,8 @@ public class WebServiceBindingCore extends WebServiceBindingBase<DBWServiceCore>
|
||||
.dataFetcher("closeConnection", env -> getService(env).closeConnection(getWebSession(env), env.getArgument("id")))
|
||||
.dataFetcher("deleteConnection", env -> getService(env).deleteConnection(getWebSession(env), env.getArgument("id")))
|
||||
|
||||
.dataFetcher("setConnectionNavigatorSettings", env -> getService(env).setConnectionNavigatorSettings(getWebSession(env), env.getArgument("id"), parseNavigatorSettings(env.getArgument("settings"))))
|
||||
.dataFetcher("setDefaultNavigatorSettings", env -> getService(env).setDefaultNavigatorSettings(getWebSession(env), parseNavigatorSettings(env.getArgument("settings"))))
|
||||
.dataFetcher("setConnectionNavigatorSettings", env -> getService(env).setConnectionNavigatorSettings(getWebSession(env), env.getArgument("id"), WebServiceUtils.parseNavigatorSettings(env.getArgument("settings"))))
|
||||
|
||||
.dataFetcher("asyncTaskStatus", env -> getService(env).getAsyncTaskStatus(getWebSession(env), env.getArgument("id")))
|
||||
.dataFetcher("asyncTaskInfo", env -> getService(env).getAsyncTaskInfo(
|
||||
getWebSession(env),
|
||||
env.getArgument("id"),
|
||||
@@ -98,11 +89,6 @@ public class WebServiceBindingCore extends WebServiceBindingBase<DBWServiceCore>
|
||||
);
|
||||
}
|
||||
|
||||
private DBNBrowseSettings parseNavigatorSettings(Map<String, Object> settingsMap) {
|
||||
return gson.fromJson(
|
||||
gson.toJsonTree(settingsMap), DataSourceNavigatorSettings.class);
|
||||
}
|
||||
|
||||
private WebConnectionConfig getConnectionConfig(DataFetchingEnvironment env) {
|
||||
return new WebConnectionConfig(env.getArgument("config"));
|
||||
}
|
||||
|
||||
-12
@@ -327,18 +327,6 @@ public class WebServiceCore implements DBWServiceCore {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setDefaultNavigatorSettings(WebSession webSession, DBNBrowseSettings settings) {
|
||||
CBApplication.getInstance().setDefaultNavigatorSettings(settings);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public WebAsyncTaskInfo getAsyncTaskStatus(WebSession webSession, String taskId) throws DBWebException {
|
||||
return webSession.asyncTaskStatus(taskId, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public WebAsyncTaskInfo getAsyncTaskInfo(WebSession webSession, String taskId, Boolean removeOnFinish) throws DBWebException {
|
||||
return webSession.asyncTaskStatus(taskId, CommonUtils.toBoolean(removeOnFinish));
|
||||
|
||||
@@ -44,6 +44,8 @@ type AdminPermissionInfo {
|
||||
|
||||
extend type Query {
|
||||
|
||||
#### Users and roles
|
||||
|
||||
listUsers(userId: ID): [AdminUserInfo]!
|
||||
listRoles(roleId: ID): [AdminRoleInfo]!
|
||||
listPermissions: [AdminPermissionInfo]!
|
||||
@@ -80,4 +82,18 @@ extend type Query {
|
||||
getSubjectConnectionAccess(subjectId: ID): [AdminConnectionGrantInfo!]!
|
||||
setSubjectConnectionAccess(subjectId: ID!, connections: [ID!]!): Boolean
|
||||
|
||||
#### Global configuration
|
||||
|
||||
configureServer(configuration: ServerConfigInput!): Boolean!
|
||||
|
||||
# Changes default navigator settings
|
||||
setDefaultNavigatorSettings( settings: NavigatorSettingsInput!): Boolean!
|
||||
|
||||
}
|
||||
|
||||
input ServerConfigInput {
|
||||
serverName: String
|
||||
|
||||
adminName: String
|
||||
adminPassword: String
|
||||
}
|
||||
|
||||
+7
@@ -25,6 +25,7 @@ import io.cloudbeaver.model.WebConnectionInfo;
|
||||
import io.cloudbeaver.model.session.WebSession;
|
||||
import org.jkiss.code.NotNull;
|
||||
import org.jkiss.code.Nullable;
|
||||
import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -87,6 +88,12 @@ public interface DBWServiceAdmin extends DBWService {
|
||||
@WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN)
|
||||
boolean deleteConnectionConfiguration(@NotNull WebSession webSession, @NotNull String id) throws DBWebException;
|
||||
|
||||
@WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN)
|
||||
boolean setDefaultNavigatorSettings(WebSession webSession, DBNBrowseSettings settings);
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Permissions
|
||||
|
||||
@WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN)
|
||||
DBWConnectionGrant[] getConnectionSubjectAccess(WebSession webSession, String connectionId) throws DBWebException;
|
||||
@WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN)
|
||||
|
||||
+44
-38
@@ -17,6 +17,7 @@
|
||||
package io.cloudbeaver.service.admin;
|
||||
|
||||
import io.cloudbeaver.DBWebException;
|
||||
import io.cloudbeaver.WebServiceUtils;
|
||||
import io.cloudbeaver.model.WebConnectionConfig;
|
||||
import io.cloudbeaver.service.DBWBindingContext;
|
||||
import io.cloudbeaver.service.WebServiceBindingBase;
|
||||
@@ -35,49 +36,54 @@ public class WebServiceBindingAdmin extends WebServiceBindingBase<DBWServiceAdmi
|
||||
|
||||
@Override
|
||||
public void bindWiring(DBWBindingContext model) throws DBWebException {
|
||||
model.getQueryType().dataFetcher("listUsers",
|
||||
env -> getService(env).listUsers(getWebSession(env), env.getArgument("userId")));
|
||||
model.getQueryType().dataFetcher("listRoles",
|
||||
env -> getService(env).listRoles(getWebSession(env), env.getArgument("roleId")));
|
||||
model.getQueryType().dataFetcher("listPermissions",
|
||||
env -> getService(env).listPermissions(getWebSession(env)));
|
||||
model.getQueryType().dataFetcher("createUser",
|
||||
env -> getService(env).createUser(getWebSession(env), env.getArgument("userId")));
|
||||
model.getQueryType().dataFetcher("deleteUser",
|
||||
env -> getService(env).deleteUser(getWebSession(env), env.getArgument("userId")));
|
||||
model.getQueryType().dataFetcher("createRole",
|
||||
env -> getService(env).createRole(getWebSession(env), env.getArgument("roleId")));
|
||||
model.getQueryType().dataFetcher("deleteRole",
|
||||
env -> getService(env).deleteRole(getWebSession(env), env.getArgument("roleId")));
|
||||
model.getQueryType()
|
||||
.dataFetcher("listUsers",
|
||||
env -> getService(env).listUsers(getWebSession(env), env.getArgument("userId")))
|
||||
.dataFetcher("listRoles",
|
||||
env -> getService(env).listRoles(getWebSession(env), env.getArgument("roleId")))
|
||||
.dataFetcher("listPermissions",
|
||||
env -> getService(env).listPermissions(getWebSession(env)))
|
||||
.dataFetcher("createUser",
|
||||
env -> getService(env).createUser(getWebSession(env), env.getArgument("userId")))
|
||||
.dataFetcher("deleteUser",
|
||||
env -> getService(env).deleteUser(getWebSession(env), env.getArgument("userId")))
|
||||
.dataFetcher("createRole",
|
||||
env -> getService(env).createRole(getWebSession(env), env.getArgument("roleId")))
|
||||
.dataFetcher("deleteRole",
|
||||
env -> getService(env).deleteRole(getWebSession(env), env.getArgument("roleId")))
|
||||
|
||||
model.getQueryType().dataFetcher("grantUserRole",
|
||||
env -> getService(env).grantUserRole(getWebSession(env), env.getArgument("userId"), env.getArgument("roleId")));
|
||||
model.getQueryType().dataFetcher("revokeUserRole",
|
||||
env -> getService(env).revokeUserRole(getWebSession(env), env.getArgument("userId"), env.getArgument("roleId")));
|
||||
model.getQueryType().dataFetcher("setSubjectPermissions",
|
||||
env -> getService(env).setSubjectPermissions(getWebSession(env), env.getArgument("roleId"), env.getArgument("permissions")));
|
||||
model.getQueryType().dataFetcher("setUserCredentials",
|
||||
env -> getService(env).setUserCredentials(getWebSession(env), env.getArgument("userId"), env.getArgument("providerId"), env.getArgument("credentials")));
|
||||
.dataFetcher("grantUserRole",
|
||||
env -> getService(env).grantUserRole(getWebSession(env), env.getArgument("userId"), env.getArgument("roleId")))
|
||||
.dataFetcher("revokeUserRole",
|
||||
env -> getService(env).revokeUserRole(getWebSession(env), env.getArgument("userId"), env.getArgument("roleId")))
|
||||
.dataFetcher("setSubjectPermissions",
|
||||
env -> getService(env).setSubjectPermissions(getWebSession(env), env.getArgument("roleId"), env.getArgument("permissions")))
|
||||
.dataFetcher("setUserCredentials",
|
||||
env -> getService(env).setUserCredentials(getWebSession(env), env.getArgument("userId"), env.getArgument("providerId"), env.getArgument("credentials")))
|
||||
|
||||
model.getQueryType().dataFetcher("allConnections", env -> getService(env).getAllConnections(getWebSession(env)));
|
||||
model.getQueryType().dataFetcher("searchConnections", env -> getService(env).searchConnections(getWebSession(env), env.getArgument("hostNames")));
|
||||
.dataFetcher("allConnections", env -> getService(env).getAllConnections(getWebSession(env)))
|
||||
.dataFetcher("searchConnections", env -> getService(env).searchConnections(getWebSession(env), env.getArgument("hostNames")))
|
||||
|
||||
model.getQueryType().dataFetcher("createConnectionConfiguration",
|
||||
env -> getService(env).createConnectionConfiguration(getWebSession(env), new WebConnectionConfig(env.getArgument("config"))));
|
||||
model.getQueryType().dataFetcher("updateConnectionConfiguration",
|
||||
env -> getService(env).updateConnectionConfiguration(getWebSession(env), env.getArgument("id"), new WebConnectionConfig(env.getArgument("config"))));
|
||||
model.getQueryType().dataFetcher("deleteConnectionConfiguration",
|
||||
env -> getService(env).deleteConnectionConfiguration(getWebSession(env), env.getArgument("id")));
|
||||
.dataFetcher("createConnectionConfiguration",
|
||||
env -> getService(env).createConnectionConfiguration(getWebSession(env), new WebConnectionConfig(env.getArgument("config"))))
|
||||
.dataFetcher("updateConnectionConfiguration",
|
||||
env -> getService(env).updateConnectionConfiguration(getWebSession(env), env.getArgument("id"), new WebConnectionConfig(env.getArgument("config"))))
|
||||
.dataFetcher("deleteConnectionConfiguration",
|
||||
env -> getService(env).deleteConnectionConfiguration(getWebSession(env), env.getArgument("id")))
|
||||
|
||||
model.getQueryType().dataFetcher("getConnectionSubjectAccess",
|
||||
env -> getService(env).getConnectionSubjectAccess(getWebSession(env), env.getArgument("connectionId")));
|
||||
model.getQueryType().dataFetcher("setConnectionSubjectAccess",
|
||||
env -> getService(env).setConnectionSubjectAccess(getWebSession(env), env.getArgument("connectionId"), env.getArgument("subjects")));
|
||||
.dataFetcher("getConnectionSubjectAccess",
|
||||
env -> getService(env).getConnectionSubjectAccess(getWebSession(env), env.getArgument("connectionId")))
|
||||
.dataFetcher("setConnectionSubjectAccess",
|
||||
env -> getService(env).setConnectionSubjectAccess(getWebSession(env), env.getArgument("connectionId"), env.getArgument("subjects")))
|
||||
|
||||
model.getQueryType().dataFetcher("getSubjectConnectionAccess",
|
||||
env -> getService(env).getSubjectConnectionAccess(getWebSession(env), env.getArgument("subjectId")));
|
||||
model.getQueryType().dataFetcher("setSubjectConnectionAccess",
|
||||
env -> getService(env).setSubjectConnectionAccess(getWebSession(env), env.getArgument("subjectId"), env.getArgument("connections")));
|
||||
.dataFetcher("getSubjectConnectionAccess",
|
||||
env -> getService(env).getSubjectConnectionAccess(getWebSession(env), env.getArgument("subjectId")))
|
||||
.dataFetcher("setSubjectConnectionAccess",
|
||||
env -> getService(env).setSubjectConnectionAccess(getWebSession(env), env.getArgument("subjectId"), env.getArgument("connections")))
|
||||
|
||||
.dataFetcher("setDefaultNavigatorSettings",
|
||||
env -> getService(env).setDefaultNavigatorSettings(getWebSession(env), WebServiceUtils.parseNavigatorSettings(env.getArgument("settings"))))
|
||||
;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+7
@@ -37,6 +37,7 @@ import org.jkiss.dbeaver.Log;
|
||||
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
|
||||
import org.jkiss.dbeaver.model.app.DBPDataSourceRegistry;
|
||||
import org.jkiss.dbeaver.model.exec.DBCException;
|
||||
import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings;
|
||||
import org.jkiss.utils.CommonUtils;
|
||||
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
@@ -294,6 +295,12 @@ public class WebServiceAdmin implements DBWServiceAdmin {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean setDefaultNavigatorSettings(WebSession webSession, DBNBrowseSettings settings) {
|
||||
CBApplication.getInstance().setDefaultNavigatorSettings(settings);
|
||||
return true;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Access management
|
||||
|
||||
|
||||
Reference in New Issue
Block a user