From bbd66e4ada132c1e94879f404285ea471599d23a Mon Sep 17 00:00:00 2001 From: Maxim-Gadalov Date: Thu, 18 Jan 2024 13:15:14 +0100 Subject: [PATCH] fix: shared file access --- .../core/controller/AccessControlBaseController.java | 9 +++++---- src/test/java/com/epam/aidial/core/FileApiTest.java | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/epam/aidial/core/controller/AccessControlBaseController.java b/src/main/java/com/epam/aidial/core/controller/AccessControlBaseController.java index 0eff2c046..90f51ff3d 100644 --- a/src/main/java/com/epam/aidial/core/controller/AccessControlBaseController.java +++ b/src/main/java/com/epam/aidial/core/controller/AccessControlBaseController.java @@ -25,9 +25,10 @@ public abstract class AccessControlBaseController { * @param filePath url encoded file path */ public Future handle(String bucket, String filePath) { + ResourceType type = ResourceType.FILE; String urlDecodedBucket = UrlUtil.decodePath(bucket); String decryptedBucket = proxy.getEncryptionService().decrypt(urlDecodedBucket); - boolean hasReadAccess = isSharedWithMe(bucket, filePath); + boolean hasReadAccess = isSharedWithMe(type, bucket, filePath); boolean hasWriteAccess = hasWriteAccess(filePath, decryptedBucket); boolean hasAccess = checkFullAccess ? hasWriteAccess : hasReadAccess || hasWriteAccess; @@ -37,7 +38,7 @@ public Future handle(String bucket, String filePath) { ResourceDescription resource; try { - resource = ResourceDescription.fromEncoded(ResourceType.FILE, urlDecodedBucket, decryptedBucket, filePath); + resource = ResourceDescription.fromEncoded(type, urlDecodedBucket, decryptedBucket, filePath); } catch (Exception ex) { String errorMessage = ex.getMessage() != null ? ex.getMessage() : DEFAULT_RESOURCE_ERROR_MESSAGE.formatted(filePath); return context.respond(HttpStatus.BAD_REQUEST, errorMessage); @@ -48,8 +49,8 @@ public Future handle(String bucket, String filePath) { protected abstract Future handle(ResourceDescription resource); - protected boolean isSharedWithMe(String bucket, String filePath) { - String url = bucket + BlobStorageUtil.PATH_SEPARATOR + filePath; + protected boolean isSharedWithMe(ResourceType type, String bucket, String filePath) { + String url = type.getGroup() + BlobStorageUtil.PATH_SEPARATOR + bucket + BlobStorageUtil.PATH_SEPARATOR + filePath; return context.getApiKeyData().getAttachedFiles().contains(url); } diff --git a/src/test/java/com/epam/aidial/core/FileApiTest.java b/src/test/java/com/epam/aidial/core/FileApiTest.java index faecc7fcb..8aa1d571a 100644 --- a/src/test/java/com/epam/aidial/core/FileApiTest.java +++ b/src/test/java/com/epam/aidial/core/FileApiTest.java @@ -434,7 +434,7 @@ public void testDownloadSharedFile(Vertx vertx, VertxTestContext context) { apiKeyData1.setOriginalKey(projectApiKeyData.getOriginalKey()); // set deployment ID for proxyKey1 apiKeyData1.setSourceDeployment("EPM-RTC-GPT"); - apiKeyData1.setAttachedFiles(Set.of("7G9WZNcoY26Vy9D7bEgbv6zqbJGfyDp9KZyEbJR4XMZt/folder1/file.txt")); + apiKeyData1.setAttachedFiles(Set.of("files/7G9WZNcoY26Vy9D7bEgbv6zqbJGfyDp9KZyEbJR4XMZt/folder1/file.txt")); apiKeyStore.assignApiKey(apiKeyData1); String apiKey1 = apiKeyData1.getPerRequestKey();