From 2034cfe067eae93f752a2d0c743817f89dcb3fa6 Mon Sep 17 00:00:00 2001 From: Ainur <59531286+yagudin10@users.noreply.github.com> Date: Tue, 24 May 2022 10:30:29 +0300 Subject: [PATCH] CB-1995 resource controller checks prefixes (#841) * CB-1995 resource controller checks prefixes * CB-1995 rm project name fix * CB-1995 rm project name fix * CB-1995 rm controller security is shared fix --- .../io.cloudbeaver.model/META-INF/MANIFEST.MF | 1 + .../rm/local/LocalResourceController.java | 48 +++++++++++++++---- 2 files changed, 39 insertions(+), 10 deletions(-) diff --git a/server/bundles/io.cloudbeaver.model/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.model/META-INF/MANIFEST.MF index df0a555e36..bad88effcc 100644 --- a/server/bundles/io.cloudbeaver.model/META-INF/MANIFEST.MF +++ b/server/bundles/io.cloudbeaver.model/META-INF/MANIFEST.MF @@ -21,6 +21,7 @@ Export-Package: io.cloudbeaver, io.cloudbeaver.auth.provider.local, io.cloudbeaver.model, io.cloudbeaver.model.app, + io.cloudbeaver.model.rm.local, io.cloudbeaver.model.session, io.cloudbeaver.model.user, io.cloudbeaver.server, diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/local/LocalResourceController.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/local/LocalResourceController.java index 5bab19222a..4ea6636e1e 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/local/LocalResourceController.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/local/LocalResourceController.java @@ -302,16 +302,9 @@ public class LocalResourceController implements RMController { private Path getProjectPath(String projectId) throws DBException { - String prefix; - String projectName; - int divPos = projectId.indexOf("_"); - if (divPos < 0) { - prefix = PROJECT_PREFIX_USER; - projectName = projectId; - } else { - prefix = projectId.substring(0, divPos + 1); - projectName = projectId.substring(divPos + 1); - } + RMProjectName project = parseProjectName(projectId); + String prefix = project.getPrefix(); + String projectName = project.getName(); switch (prefix) { case PROJECT_PREFIX_GLOBAL: if (!projectName.equals(globalProjectName)) { @@ -395,4 +388,39 @@ public class LocalResourceController implements RMController { return new LocalResourceController(credentialsProvider, rootPath, userProjectsPath, sharedProjectsPath); } } + + public static class RMProjectName { + String prefix; + String name; + private RMProjectName(String prefix, String name) { + this.prefix = prefix; + this.name = name; + } + + public String getPrefix() { + return prefix; + } + + public String getName() { + return name; + } + } + public static RMProjectName parseProjectName(String projectId) { + String prefix; + String name; + int divPos = projectId.indexOf("_"); + if (divPos < 0) { + prefix = PROJECT_PREFIX_USER; + name = projectId; + } else { + prefix = projectId.substring(0, divPos + 1); + name = projectId.substring(divPos + 1); + } + return new RMProjectName(prefix, name); + } + + public static boolean isShared(String projectId) { + return PROJECT_PREFIX_SHARED.equals(parseProjectName(projectId).getPrefix()); + } + }