mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
Merge branch 'devel' of https://github.com/dbeaver/cloudbeaver into devel
This commit is contained in:
@@ -131,6 +131,6 @@ extend type Mutation {
|
||||
navDeleteNodes( nodePaths: [ID!]! ): Int
|
||||
|
||||
# Moves nodes with specified IDs to the connection folder
|
||||
navMoveNodesToFolder(nodePaths: [ID!]!, folderPath: String): Boolean
|
||||
navMoveNodesToFolder(nodePaths: [ID!]!, folderPath: ID!): Boolean
|
||||
|
||||
}
|
||||
+3
-7
@@ -565,9 +565,7 @@ public class WebServiceCore implements DBWServiceCore {
|
||||
DBPDataSourceRegistry sessionRegistry = session.getSingletonProject().getDataSourceRegistry();
|
||||
DBPDataSourceFolder newFolder = WebServiceUtils.createFolder(parentNode, folderName, sessionRegistry);
|
||||
WebConnectionFolderInfo folderInfo = new WebConnectionFolderInfo(session, newFolder);
|
||||
if (parentPath == null) {
|
||||
WebServiceUtils.updateConfigAndRefreshDatabases(session);
|
||||
}
|
||||
WebServiceUtils.updateConfigAndRefreshDatabases(session);
|
||||
|
||||
return folderInfo;
|
||||
} catch (DBException e) {
|
||||
@@ -583,6 +581,7 @@ public class WebServiceCore implements DBWServiceCore {
|
||||
) throws DBWebException {
|
||||
WebConnectionFolderInfo folderInfo = WebConnectionFolderUtils.getFolderInfo(session, folderPath);
|
||||
folderInfo.getDataSourceFolder().setName(newName);
|
||||
WebServiceUtils.updateConfigAndRefreshDatabases(session);
|
||||
return folderInfo;
|
||||
}
|
||||
|
||||
@@ -591,16 +590,13 @@ public class WebServiceCore implements DBWServiceCore {
|
||||
try {
|
||||
WebConnectionFolderInfo folderInfo = WebConnectionFolderUtils.getFolderInfo(session, folderPath);
|
||||
DBPDataSourceFolder folder = folderInfo.getDataSourceFolder();
|
||||
boolean rootFolder = folder.getParent() != null;
|
||||
if (folder.getDataSourceRegistry().getProject() != session.getSingletonProject()) {
|
||||
throw new DBWebException("Global folder '" + folderInfo.getId() + "' cannot be deleted");
|
||||
}
|
||||
session.addInfoMessage("Delete folder");
|
||||
DBPDataSourceRegistry sessionRegistry = session.getSingletonProject().getDataSourceRegistry();
|
||||
sessionRegistry.removeFolder(folderInfo.getDataSourceFolder(), false);
|
||||
if (rootFolder) {
|
||||
WebServiceUtils.updateConfigAndRefreshDatabases(session);
|
||||
}
|
||||
WebServiceUtils.updateConfigAndRefreshDatabases(session);
|
||||
} catch (DBException e) {
|
||||
throw new DBWebException(e.getMessage(), e);
|
||||
}
|
||||
|
||||
+1
-1
@@ -59,5 +59,5 @@ public interface DBWServiceNavigator extends DBWService {
|
||||
int deleteNodes(@NotNull WebSession session, @NotNull List<String> nodePaths) throws DBWebException;
|
||||
|
||||
@WebAction
|
||||
boolean moveNodesToFolder(@NotNull WebSession session, @NotNull List<String> nodePaths, String folderPath) throws DBWebException;
|
||||
boolean moveNodesToFolder(@NotNull WebSession session, @NotNull List<String> nodePaths, @NotNull String folderPath) throws DBWebException;
|
||||
}
|
||||
|
||||
+2
-1
@@ -139,7 +139,8 @@ public class WebNavigatorNodeInfo {
|
||||
if (node instanceof DBNDatabaseNode) {
|
||||
isShared = !((DBNDatabaseNode) node).getDataSourceContainer().isManageable();
|
||||
} else if (node instanceof DBNLocalFolder) {
|
||||
//isShared = ((DBNLocalFolder) node).getDataSourceRegistry().is
|
||||
String projectName = ((DBNLocalFolder) node).getFolder().getDataSourceRegistry().getProject().getName();
|
||||
isShared = !projectName.equals(session.getUserId());
|
||||
}
|
||||
if (isShared) {
|
||||
features.add("shared");
|
||||
|
||||
+22
-5
@@ -20,17 +20,16 @@ package io.cloudbeaver.service.navigator.impl;
|
||||
import io.cloudbeaver.DBWebException;
|
||||
import io.cloudbeaver.model.WebCommandContext;
|
||||
import io.cloudbeaver.model.WebConnectionInfo;
|
||||
import io.cloudbeaver.model.WebConnectionFolderInfo;
|
||||
import io.cloudbeaver.model.session.WebSession;
|
||||
import io.cloudbeaver.service.navigator.DBWServiceNavigator;
|
||||
import io.cloudbeaver.service.navigator.WebCatalog;
|
||||
import io.cloudbeaver.service.navigator.WebNavigatorNodeInfo;
|
||||
import io.cloudbeaver.service.navigator.WebStructContainers;
|
||||
import io.cloudbeaver.utils.WebConnectionFolderUtils;
|
||||
import org.jkiss.code.NotNull;
|
||||
import org.jkiss.code.Nullable;
|
||||
import org.jkiss.dbeaver.DBException;
|
||||
import org.jkiss.dbeaver.model.DBPDataSource;
|
||||
import org.jkiss.dbeaver.model.DBPDataSourceFolder;
|
||||
import org.jkiss.dbeaver.model.DBPRefreshableObject;
|
||||
import org.jkiss.dbeaver.model.DBUtils;
|
||||
import org.jkiss.dbeaver.model.edit.DBECommandContext;
|
||||
@@ -175,6 +174,9 @@ public class WebServiceNavigator implements DBWServiceNavigator {
|
||||
((DBPRefreshableObject) dataSource).refreshObject(monitor);
|
||||
}
|
||||
((DBNDataSource) node).cleanupNode();
|
||||
} else if (node instanceof DBNLocalFolder) {
|
||||
// Refresh can't be applied to the local folder node
|
||||
return true;
|
||||
} else {
|
||||
node.refreshNode(monitor, this);
|
||||
}
|
||||
@@ -354,17 +356,32 @@ public class WebServiceNavigator implements DBWServiceNavigator {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean moveNodesToFolder(@NotNull WebSession session, @NotNull List<String> nodePaths, String folderNodePath) throws DBWebException {
|
||||
public boolean moveNodesToFolder(
|
||||
@NotNull WebSession session,
|
||||
@NotNull List<String> nodePaths,
|
||||
@NotNull String folderNodePath
|
||||
) throws DBWebException {
|
||||
try {
|
||||
DBRProgressMonitor monitor = session.getProgressMonitor();
|
||||
WebConnectionFolderInfo folderPath = WebConnectionFolderUtils.getFolderInfo(session, folderNodePath);
|
||||
DBNNode folderNode;
|
||||
folderNode = session.getNavigatorModel().getNodeByPath(monitor, folderNodePath);
|
||||
for (String path : nodePaths) {
|
||||
DBNNode node = session.getNavigatorModel().getNodeByPath(monitor, path);
|
||||
if (node == null) {
|
||||
throw new DBWebException("Navigator node '" + path + "' not found");
|
||||
}
|
||||
if (node instanceof DBNDataSource) {
|
||||
((DBNDataSource) node).moveToFolder(null, folderPath.getDataSourceFolder());
|
||||
DBPDataSourceFolder folder;
|
||||
if (folderNode instanceof DBNRoot) {
|
||||
folder = null;
|
||||
} else if (folderNode instanceof DBNLocalFolder) {
|
||||
folder = ((DBNLocalFolder) folderNode).getFolder();
|
||||
} else {
|
||||
throw new DBWebException("Navigator node '" + folderNodePath + "' is not a folder node");
|
||||
}
|
||||
((DBNDataSource) node).moveToFolder(folderNode.getOwnerProject(), folder);
|
||||
session.getSingletonProject().getDataSourceRegistry().updateDataSource(
|
||||
((DBNDataSource) node).getDataSourceContainer());
|
||||
} else {
|
||||
throw new DBWebException("Navigator node '" + path + "' is not a data source node");
|
||||
}
|
||||
|
||||
+12
-9
@@ -1111,7 +1111,7 @@ public class CBEmbeddedSecurityController implements SMAdminController, SMAuthen
|
||||
if (authProviderIds.isEmpty()) {
|
||||
throw new SMException("Authorization providers are not defined");
|
||||
}
|
||||
String userId = null;
|
||||
|
||||
var finishAuthMonitor = new VoidProgressMonitor();
|
||||
AuthAttemptSessionInfo authAttemptSessionInfo = readAuthAttemptSessionInfo(authId);
|
||||
boolean isMainAuthSession = authAttemptSessionInfo.getSmSessionId() == null;
|
||||
@@ -1123,6 +1123,7 @@ public class CBEmbeddedSecurityController implements SMAdminController, SMAuthen
|
||||
token = findTokenBySmSession(authAttemptSessionInfo.getSmSessionId());
|
||||
permissions = getTokenPermissions(token);
|
||||
}
|
||||
String activeUserId = permissions == null ? null : permissions.getUserId();
|
||||
|
||||
for (String authProviderId : authProviderIds) {
|
||||
var userCredentials = (Map<String, Object>) authInfo.getAuthData().get(authProviderId);
|
||||
@@ -1131,8 +1132,8 @@ public class CBEmbeddedSecurityController implements SMAdminController, SMAuthen
|
||||
authAttemptSessionInfo.getSessionParams(),
|
||||
userCredentials,
|
||||
finishAuthMonitor,
|
||||
permissions == null ? null : permissions.getUserId(),
|
||||
isMainAuthSession
|
||||
activeUserId,
|
||||
activeUserId == null
|
||||
);
|
||||
|
||||
if (userIdFromCreds == null) {
|
||||
@@ -1140,7 +1141,9 @@ public class CBEmbeddedSecurityController implements SMAdminController, SMAuthen
|
||||
updateAuthStatus(authId, SMAuthStatus.ERROR, authInfo.getAuthData(), error);
|
||||
return SMAuthInfo.error(authId, error);
|
||||
}
|
||||
userId = userIdFromCreds;
|
||||
if (activeUserId == null) {
|
||||
activeUserId = userIdFromCreds;
|
||||
}
|
||||
}
|
||||
|
||||
if (token == null && permissions == null) {
|
||||
@@ -1150,7 +1153,7 @@ public class CBEmbeddedSecurityController implements SMAdminController, SMAuthen
|
||||
if (authAttemptSessionInfo.getSmSessionId() == null) {
|
||||
smSessionId = createSmSession(
|
||||
authAttemptSessionInfo.getAppSessionId(),
|
||||
userId,
|
||||
activeUserId,
|
||||
authAttemptSessionInfo.getSessionParams(),
|
||||
authAttemptSessionInfo.getSessionType(),
|
||||
dbCon
|
||||
@@ -1158,8 +1161,8 @@ public class CBEmbeddedSecurityController implements SMAdminController, SMAuthen
|
||||
} else {
|
||||
smSessionId = authAttemptSessionInfo.getSmSessionId();
|
||||
}
|
||||
token = generateAuthToken(smSessionId, userId, dbCon);
|
||||
permissions = new SMAuthPermissions(userId, smSessionId, getUserPermissions(userId));
|
||||
token = generateAuthToken(smSessionId, activeUserId, dbCon);
|
||||
permissions = new SMAuthPermissions(activeUserId, smSessionId, getUserPermissions(activeUserId));
|
||||
txn.commit();
|
||||
}
|
||||
} catch (SQLException e) {
|
||||
@@ -1203,7 +1206,7 @@ public class CBEmbeddedSecurityController implements SMAdminController, SMAuthen
|
||||
@NotNull Map<String, Object> userCredentials,
|
||||
@NotNull DBRProgressMonitor progressMonitor,
|
||||
@Nullable String activeUserId,
|
||||
boolean newUserAuthenticationTry
|
||||
boolean createNewUserIfNotExist
|
||||
) throws DBException {
|
||||
AuthProviderDescriptor authProvider = getAuthProvider(authProviderId);
|
||||
SMAuthProvider<?> smAuthProviderInstance = authProvider.getInstance();
|
||||
@@ -1217,7 +1220,7 @@ public class CBEmbeddedSecurityController implements SMAdminController, SMAuthen
|
||||
} catch (DBException e) {
|
||||
return null;
|
||||
}
|
||||
if (userId == null && newUserAuthenticationTry) {
|
||||
if (userId == null && createNewUserIfNotExist) {
|
||||
if (!(authProvider.getInstance() instanceof SMAuthProviderExternal<?>)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user