diff --git a/server/build.gradle b/server/build.gradle index 3da2aa2d..a94b18bf 100644 --- a/server/build.gradle +++ b/server/build.gradle @@ -1,6 +1,7 @@ configurations.all { resolutionStrategy { - force 'com.google.code.gson:gson:2.8.9' + force 'com.google.code.gson:gson:2.11.0' + force 'io.netty:netty-handler:4.1.118.Final' } } @@ -25,8 +26,8 @@ dependencies { implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2' implementation 'com.auth0:java-jwt:4.4.0' implementation 'com.auth0:jwks-rsa:0.22.1' - implementation 'org.apache.jclouds:jclouds-allblobstore:2.5.0' - implementation 'org.apache.jclouds.api:filesystem:2.5.0' + implementation 'org.apache.jclouds:jclouds-allblobstore:2.7.0' + implementation 'org.apache.jclouds.api:filesystem:2.7.0' implementation 'org.redisson:redisson:3.27.0' implementation 'com.networknt:json-schema-validator:1.5.2' implementation group: 'com.amazonaws', name: 'aws-java-sdk-core', version: '1.12.663' diff --git a/server/src/main/java/com/epam/aidial/core/server/util/ResourceDescriptorFactory.java b/server/src/main/java/com/epam/aidial/core/server/util/ResourceDescriptorFactory.java index 06374d88..b78b9888 100644 --- a/server/src/main/java/com/epam/aidial/core/server/util/ResourceDescriptorFactory.java +++ b/server/src/main/java/com/epam/aidial/core/server/util/ResourceDescriptorFactory.java @@ -16,7 +16,7 @@ public class ResourceDescriptorFactory { - private static final Set INVALID_FILE_NAME_CHARS = Set.of('/', '{', '}'); + private static final Set INVALID_FILE_NAME_CHARS = Set.of('/', '{', '}', '"'); private static final int MAX_PATH_SIZE = 900; /** diff --git a/server/src/test/java/com/epam/aidial/core/server/PublicationApiTest.java b/server/src/test/java/com/epam/aidial/core/server/PublicationApiTest.java index 1f084ec0..04b85457 100644 --- a/server/src/test/java/com/epam/aidial/core/server/PublicationApiTest.java +++ b/server/src/test/java/com/epam/aidial/core/server/PublicationApiTest.java @@ -931,15 +931,24 @@ void testResourceList() { "resourceType" : "CONVERSATION", "permissions" : [ "READ" ], "items" : [ { - "name" : "conversation1", - "parentPath" : "folder1", - "bucket" : "public", - "url" : "conversations/public/folder1/conversation1", - "nodeType" : "ITEM", - "resourceType" : "CONVERSATION", - "updatedAt" : "@ignore", - "permissions" : [ "READ" ] - } ] + "name" : "folder1", + "parentPath" : null, + "bucket" : "public", + "url" : "conversations/public/folder1/", + "nodeType" : "FOLDER", + "resourceType" : "CONVERSATION", + "permissions" : [ "READ" ], + "items" : null + }, { + "name" : "conversation1", + "parentPath" : "folder1", + "bucket" : "public", + "url" : "conversations/public/folder1/conversation1", + "nodeType" : "ITEM", + "resourceType" : "CONVERSATION", + "permissions" : [ "READ" ], + "updatedAt" : "@ignore" + } ] } """); @@ -988,24 +997,42 @@ void testResourceList() { "resourceType" : "CONVERSATION", "permissions" : [ "READ", "WRITE" ], "items" : [ { - "name" : "conversation1", - "parentPath" : "folder1", - "bucket" : "public", - "url" : "conversations/public/folder1/conversation1", - "nodeType" : "ITEM", - "resourceType" : "CONVERSATION", - "updatedAt" : "@ignore", - "permissions" : [ "READ", "WRITE" ] - }, { - "name" : "conversation2", - "parentPath" : "folder2", - "bucket" : "public", - "url" : "conversations/public/folder2/conversation2", - "nodeType" : "ITEM", - "resourceType" : "CONVERSATION", - "updatedAt" : "@ignore", - "permissions" : [ "READ", "WRITE" ] - } ] + "name" : "folder1", + "parentPath" : null, + "bucket" : "public", + "url" : "conversations/public/folder1/", + "nodeType" : "FOLDER", + "resourceType" : "CONVERSATION", + "permissions" : [ "READ", "WRITE" ], + "items" : null + }, { + "name" : "conversation1", + "parentPath" : "folder1", + "bucket" : "public", + "url" : "conversations/public/folder1/conversation1", + "nodeType" : "ITEM", + "resourceType" : "CONVERSATION", + "permissions" : [ "READ", "WRITE" ], + "updatedAt" : "@ignore" + }, { + "name" : "folder2", + "parentPath" : null, + "bucket" : "public", + "url" : "conversations/public/folder2/", + "nodeType" : "FOLDER", + "resourceType" : "CONVERSATION", + "permissions" : [ "READ", "WRITE" ], + "items" : null + }, { + "name" : "conversation2", + "parentPath" : "folder2", + "bucket" : "public", + "url" : "conversations/public/folder2/conversation2", + "nodeType" : "ITEM", + "resourceType" : "CONVERSATION", + "permissions" : [ "READ", "WRITE" ], + "updatedAt" : "@ignore" + } ] } """); } diff --git a/server/src/test/java/com/epam/aidial/core/server/util/ResourceDescriptorFactoryTest.java b/server/src/test/java/com/epam/aidial/core/server/util/ResourceDescriptorFactoryTest.java index 0c13773e..d3d33d50 100644 --- a/server/src/test/java/com/epam/aidial/core/server/util/ResourceDescriptorFactoryTest.java +++ b/server/src/test/java/com/epam/aidial/core/server/util/ResourceDescriptorFactoryTest.java @@ -159,6 +159,8 @@ public void testResourceWithInvalidFilename() { () -> ResourceDescriptorFactory.fromEncoded(ResourceTypes.FILE, "bucket", "location/", "fol%0Fder1")); assertThrows(IllegalArgumentException.class, () -> ResourceDescriptorFactory.fromEncoded(ResourceTypes.FILE, "bucket", "location/", "//file.txt")); + assertThrows(IllegalArgumentException.class, + () -> ResourceDescriptorFactory.fromEncoded(ResourceTypes.FILE, "bucket", "location/", "folder1%22")); } @Test diff --git a/storage/build.gradle b/storage/build.gradle index cf69a517..8f1479b1 100644 --- a/storage/build.gradle +++ b/storage/build.gradle @@ -1,6 +1,7 @@ configurations.all { resolutionStrategy { force 'com.google.code.gson:gson:2.8.9' + force 'io.netty:netty-handler:4.1.118.Final' } } @@ -10,8 +11,8 @@ dependencies { implementation 'org.slf4j:slf4j-api:1.7.32' implementation 'org.apache.commons:commons-lang3:3.12.0' implementation 'com.fasterxml.jackson.core:jackson-databind:2.15.2' - implementation 'org.apache.jclouds:jclouds-allblobstore:2.5.0' - implementation 'org.apache.jclouds.api:filesystem:2.5.0' + implementation 'org.apache.jclouds:jclouds-allblobstore:2.7.0' + implementation 'org.apache.jclouds.api:filesystem:2.7.0' implementation 'org.redisson:redisson:3.27.0' implementation group: 'com.amazonaws', name: 'aws-java-sdk-core', version: '1.12.663' implementation group: 'com.amazonaws', name: 'aws-java-sdk-sts', version: '1.12.663'