mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
CB-551 Connection settings save fix
This commit is contained in:
@@ -113,16 +113,12 @@ public class DBWebException extends DBException implements GraphQLError {
|
||||
}
|
||||
if (divPos != -1) {
|
||||
stString = stString.substring(0, divPos);
|
||||
// divPos = stString.lastIndexOf(")");
|
||||
// if (divPos != -1) {
|
||||
// stString = stString.substring(0, divPos + 1);
|
||||
// }
|
||||
}
|
||||
divPos = stString.indexOf(':');
|
||||
if (divPos != -1) {
|
||||
String exceptionClass = stString.substring(0, divPos);
|
||||
extensions.put("exceptionClass", exceptionClass);
|
||||
stString = stString.substring(divPos + 1).trim();
|
||||
//stString = stString.substring(divPos + 1).trim();
|
||||
}
|
||||
extensions.put("stackTrace", stString);
|
||||
int errorCode = getErrorCode();
|
||||
|
||||
@@ -89,7 +89,7 @@ public class WebServiceUtils {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static DBPDataSourceRegistry getDataSourceRegistry() throws DBWebException {
|
||||
public static DBPDataSourceRegistry getGlobalDataSourceRegistry() throws DBWebException {
|
||||
DBPDataSourceRegistry registry = DBWorkbench.getPlatform().getWorkspace().getDefaultDataSourceRegistry();
|
||||
if (registry == null) {
|
||||
throw new DBWebException("No activate data source registry");
|
||||
@@ -163,9 +163,15 @@ public class WebServiceUtils {
|
||||
}
|
||||
dsConfig.setProperties(newProps);
|
||||
}
|
||||
dsConfig.setUserName(config.getUserName());
|
||||
dsConfig.setUserPassword(config.getUserPassword());
|
||||
dsConfig.setAuthModelId(config.getAuthModelId());
|
||||
if (config.getUserName() != null) {
|
||||
dsConfig.setUserName(config.getUserName());
|
||||
}
|
||||
if (config.getUserPassword() != null) {
|
||||
dsConfig.setUserPassword(config.getUserPassword());
|
||||
}
|
||||
if (config.getAuthModelId() != null) {
|
||||
dsConfig.setAuthModelId(config.getAuthModelId());
|
||||
}
|
||||
}
|
||||
|
||||
public static void saveAuthProperties(DBPDataSourceContainer dataSourceContainer, DBPConnectionConfiguration configuration, Map<String, Object> authProperties, boolean saveCredentials) {
|
||||
@@ -244,7 +250,7 @@ public class WebServiceUtils {
|
||||
dataSource = webSession.getSingletonProject().getDataSourceRegistry().getDataSource(connectionId);
|
||||
if (dataSource == null) {
|
||||
// If called for new connection in admin mode then this connection may absent in session registry yet
|
||||
dataSource = getDataSourceRegistry().getDataSource(connectionId);
|
||||
dataSource = getGlobalDataSourceRegistry().getDataSource(connectionId);
|
||||
}
|
||||
}
|
||||
return dataSource;
|
||||
|
||||
+2
-2
@@ -74,12 +74,12 @@ public class WebConnectionConfig {
|
||||
name = JSONUtils.getString(params, "name");
|
||||
description = JSONUtils.getString(params, "description");
|
||||
|
||||
properties = JSONUtils.getObject(params, "properties");
|
||||
properties = JSONUtils.getObjectOrNull(params, "properties");
|
||||
userName = JSONUtils.getString(params, "userName");
|
||||
userPassword = JSONUtils.getString(params, "userPassword");
|
||||
|
||||
authModelId = JSONUtils.getString(params, "authModelId");
|
||||
credentials = JSONUtils.getObject(params, "credentials");
|
||||
credentials = JSONUtils.getObjectOrNull(params, "credentials");
|
||||
saveCredentials = JSONUtils.getBoolean(params, "saveCredentials");
|
||||
}
|
||||
|
||||
|
||||
@@ -531,7 +531,7 @@ public class CBApplication extends BaseApplicationImpl {
|
||||
try {
|
||||
String anonymousRoleId = appConfig.getAnonymousUserRole();
|
||||
DBWSecurityController securityController = getSecurityController();
|
||||
for (DBPDataSourceContainer ds : WebServiceUtils.getDataSourceRegistry().getDataSources()) {
|
||||
for (DBPDataSourceContainer ds : WebServiceUtils.getGlobalDataSourceRegistry().getDataSources()) {
|
||||
DBWConnectionGrant[] grants = securityController.getConnectionSubjectAccess(ds.getId());
|
||||
if (ArrayUtils.isEmpty(grants)) {
|
||||
securityController.setConnectionSubjectAccess(
|
||||
|
||||
+5
-5
@@ -84,7 +84,7 @@ public class WebServiceCore implements DBWServiceCore {
|
||||
public List<WebDataSourceConfig> getTemplateDataSources() throws DBWebException {
|
||||
|
||||
List<WebDataSourceConfig> result = new ArrayList<>();
|
||||
DBPDataSourceRegistry dsRegistry = WebServiceUtils.getDataSourceRegistry();
|
||||
DBPDataSourceRegistry dsRegistry = WebServiceUtils.getGlobalDataSourceRegistry();
|
||||
|
||||
for (DBPDataSourceContainer ds : dsRegistry.getDataSources()) {
|
||||
if (ds.isTemplate()) {
|
||||
@@ -102,7 +102,7 @@ public class WebServiceCore implements DBWServiceCore {
|
||||
@Override
|
||||
public List<WebConnectionInfo> getTemplateConnections(WebSession webSession) throws DBWebException {
|
||||
List<WebConnectionInfo> result = new ArrayList<>();
|
||||
for (DBPDataSourceContainer ds : WebServiceUtils.getDataSourceRegistry().getDataSources()) {
|
||||
for (DBPDataSourceContainer ds : WebServiceUtils.getGlobalDataSourceRegistry().getDataSources()) {
|
||||
if (ds.isTemplate() &&
|
||||
CBPlatform.getInstance().getApplicableDrivers().contains(ds.getDriver()))
|
||||
{
|
||||
@@ -180,7 +180,7 @@ public class WebServiceCore implements DBWServiceCore {
|
||||
if (CommonUtils.isEmpty(templateId)) {
|
||||
throw new DBWebException("Only preconfigured data sources are supported yet");
|
||||
}
|
||||
DBPDataSourceRegistry templateRegistry = WebServiceUtils.getDataSourceRegistry();
|
||||
DBPDataSourceRegistry templateRegistry = WebServiceUtils.getGlobalDataSourceRegistry();
|
||||
DBPDataSourceContainer dataSourceTemplate = templateRegistry.getDataSource(templateId);
|
||||
if (dataSourceTemplate == null) {
|
||||
throw new DBWebException("Datasource '" + templateId + "' not found");
|
||||
@@ -270,7 +270,7 @@ public class WebServiceCore implements DBWServiceCore {
|
||||
|
||||
@Override
|
||||
public WebConnectionInfo createConnectionFromTemplate(WebSession webSession, String templateId) throws DBWebException {
|
||||
DBPDataSourceRegistry templateRegistry = WebServiceUtils.getDataSourceRegistry();
|
||||
DBPDataSourceRegistry templateRegistry = WebServiceUtils.getGlobalDataSourceRegistry();
|
||||
DBPDataSourceContainer dataSourceTemplate = templateRegistry.getDataSource(templateId);
|
||||
if (dataSourceTemplate == null) {
|
||||
throw new DBWebException("Template data source '" + templateId + "' not found");
|
||||
@@ -324,7 +324,7 @@ public class WebServiceCore implements DBWServiceCore {
|
||||
if (dataSource != null) {
|
||||
testDataSource = dataSource.createCopy(dataSource.getRegistry());
|
||||
WebServiceUtils.setConnectionConfiguration(testDataSource.getDriver(), testDataSource.getConnectionConfiguration(), connectionConfig);
|
||||
WebServiceUtils.saveAuthProperties(testDataSource, testDataSource.getConnectionConfiguration(), connectionConfig.getCredentials(), connectionConfig.isSaveCredentials());
|
||||
WebServiceUtils.saveAuthProperties(testDataSource, testDataSource.getConnectionConfiguration(), connectionConfig.getCredentials(), true);
|
||||
} else {
|
||||
testDataSource = WebServiceUtils.createConnectionFromConfig(connectionConfig, sessionRegistry);
|
||||
}
|
||||
|
||||
+16
-9
@@ -249,7 +249,7 @@ public class WebServiceAdmin implements DBWServiceAdmin {
|
||||
public List<WebConnectionInfo> getAllConnections(@NotNull WebSession webSession) throws DBWebException {
|
||||
// Get all connections from global configuration
|
||||
List<WebConnectionInfo> result = new ArrayList<>();
|
||||
for (DBPDataSourceContainer ds : WebServiceUtils.getDataSourceRegistry().getDataSources()) {
|
||||
for (DBPDataSourceContainer ds : WebServiceUtils.getGlobalDataSourceRegistry().getDataSources()) {
|
||||
if (CBPlatform.getInstance().getApplicableDrivers().contains(ds.getDriver())) {
|
||||
result.add(new WebConnectionInfo(webSession, ds));
|
||||
}
|
||||
@@ -267,7 +267,7 @@ public class WebServiceAdmin implements DBWServiceAdmin {
|
||||
|
||||
@Override
|
||||
public WebConnectionInfo createConnectionConfiguration(@NotNull WebSession webSession, @NotNull WebConnectionConfig config) throws DBWebException {
|
||||
DBPDataSourceRegistry registry = WebServiceUtils.getDataSourceRegistry();
|
||||
DBPDataSourceRegistry registry = WebServiceUtils.getGlobalDataSourceRegistry();
|
||||
DBPDataSourceContainer dataSource = WebServiceUtils.createConnectionFromConfig(config, registry);
|
||||
registry.addDataSource(dataSource);
|
||||
registry.flushConfig();
|
||||
@@ -279,7 +279,7 @@ public class WebServiceAdmin implements DBWServiceAdmin {
|
||||
public WebConnectionInfo copyConnectionConfiguration(@NotNull WebSession webSession, @NotNull String nodePath) throws DBWebException {
|
||||
try {
|
||||
DBNModel globalNavigatorModel = webSession.getNavigatorModel();
|
||||
DBPDataSourceRegistry globalDataSourceRegistry = WebServiceUtils.getDataSourceRegistry();
|
||||
DBPDataSourceRegistry globalDataSourceRegistry = WebServiceUtils.getGlobalDataSourceRegistry();
|
||||
|
||||
DBNNode srcNode = globalNavigatorModel.getNodeByPath(webSession.getProgressMonitor(), nodePath);
|
||||
if (srcNode == null) {
|
||||
@@ -303,23 +303,30 @@ public class WebServiceAdmin implements DBWServiceAdmin {
|
||||
|
||||
@Override
|
||||
public WebConnectionInfo updateConnectionConfiguration(@NotNull WebSession webSession, @NotNull String id, @NotNull WebConnectionConfig config) throws DBWebException {
|
||||
DBPDataSourceContainer dataSource = WebServiceUtils.getDataSourceRegistry().getDataSource(id);
|
||||
DBPDataSourceContainer dataSource = WebServiceUtils.getGlobalDataSourceRegistry().getDataSource(id);
|
||||
if (dataSource == null) {
|
||||
throw new DBWebException("Connection '" + id + "' not found");
|
||||
}
|
||||
WebServiceUtils.updateConnectionFromConfig(dataSource, config);
|
||||
dataSource.persistConfiguration();
|
||||
// Update local datasource as well. We use it for connection tests
|
||||
// It may be null if this connection was just created
|
||||
DBPDataSourceContainer localDS = webSession.getSingletonProject().getDataSourceRegistry().getDataSource(id);
|
||||
if (localDS != null) {
|
||||
WebServiceUtils.updateConnectionFromConfig(localDS, config);
|
||||
// We don't need to save it in local registry (because in fact it is stored in the global registry)
|
||||
}
|
||||
return new WebConnectionInfo(webSession, dataSource);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean deleteConnectionConfiguration(@NotNull WebSession webSession, @NotNull String id) throws DBWebException {
|
||||
DBPDataSourceContainer dataSource = WebServiceUtils.getDataSourceRegistry().getDataSource(id);
|
||||
DBPDataSourceContainer dataSource = WebServiceUtils.getGlobalDataSourceRegistry().getDataSource(id);
|
||||
if (dataSource == null) {
|
||||
throw new DBWebException("Connection '" + id + "' not found");
|
||||
}
|
||||
WebServiceUtils.getDataSourceRegistry().removeDataSource(dataSource);
|
||||
WebServiceUtils.getDataSourceRegistry().flushConfig();
|
||||
WebServiceUtils.getGlobalDataSourceRegistry().removeDataSource(dataSource);
|
||||
WebServiceUtils.getGlobalDataSourceRegistry().flushConfig();
|
||||
|
||||
try {
|
||||
CBApplication.getInstance().getSecurityController().setConnectionSubjectAccess(id, null, null);
|
||||
@@ -389,7 +396,7 @@ public class WebServiceAdmin implements DBWServiceAdmin {
|
||||
|
||||
@Override
|
||||
public boolean setConnectionSubjectAccess(@NotNull WebSession webSession, @NotNull String connectionId, @NotNull List<String> subjects) throws DBWebException {
|
||||
DBPDataSourceContainer dataSource = WebServiceUtils.getDataSourceRegistry().getDataSource(connectionId);
|
||||
DBPDataSourceContainer dataSource = WebServiceUtils.getGlobalDataSourceRegistry().getDataSource(connectionId);
|
||||
if (dataSource == null) {
|
||||
throw new DBWebException("Connection '" + connectionId + "' not found");
|
||||
}
|
||||
@@ -417,7 +424,7 @@ public class WebServiceAdmin implements DBWServiceAdmin {
|
||||
@Override
|
||||
public boolean setSubjectConnectionAccess(@NotNull WebSession webSession, @NotNull String subjectId, @NotNull List<String> connections) throws DBWebException {
|
||||
for (String connectionId : connections) {
|
||||
if (WebServiceUtils.getDataSourceRegistry().getDataSource(connectionId) == null) {
|
||||
if (WebServiceUtils.getGlobalDataSourceRegistry().getDataSource(connectionId) == null) {
|
||||
throw new DBWebException("Connection '" + connectionId + "' not found");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user