diff --git a/CHANGELOG.md b/CHANGELOG.md index a410c02f49ba921aa3b856da02f63e93915b84fc..09aa1b2604d414a9b5c510d9292f539e48b98fcc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,8 +7,6 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] -This is an important security update. - ### Added ### Changed @@ -21,10 +19,10 @@ This is an important security update. * Wrong serialization of date time values in the GRPC-API (resulting in org.caosdb.server.datatime@12347abcd or similar). +* Missing serialization of file descriptors in the GRPC-API during retrievals. ### Security - ## [v0.7.1] - 2021-12-13 (Timm Fitschen) diff --git a/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java b/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java index 168b90d81e2643e7742360a79b25eb5767cf618f..8b93acc9947d262ecdbae85ffd76883162b32c9e 100644 --- a/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java +++ b/src/main/java/org/caosdb/server/grpc/CaosDBToGrpcConverters.java @@ -35,6 +35,7 @@ import org.caosdb.api.entity.v1.EntityPermissionRule; import org.caosdb.api.entity.v1.EntityPermissionRuleCapability; import org.caosdb.api.entity.v1.EntityResponse; import org.caosdb.api.entity.v1.EntityRole; +import org.caosdb.api.entity.v1.FileDescriptor; import org.caosdb.api.entity.v1.Importance; import org.caosdb.api.entity.v1.ListDataType; import org.caosdb.api.entity.v1.MessageCode; @@ -61,6 +62,7 @@ import org.caosdb.server.datatype.ReferenceValue; import org.caosdb.server.datatype.TextDatatype; import org.caosdb.server.datatype.Value; import org.caosdb.server.entity.EntityInterface; +import org.caosdb.server.entity.FileProperties; import org.caosdb.server.entity.MagicTypes; import org.caosdb.server.entity.Message; import org.caosdb.server.entity.Role; @@ -131,6 +133,9 @@ public class CaosDBToGrpcConverters { if (from.hasParents()) { entityBuilder.addAllParents(convert(from.getParents())); } + if (from.hasFileProperties()) { + entityBuilder.setFileDescriptor(convert(from.getFileProperties())); + } final EntityResponse.Builder responseBuilder = EntityResponse.newBuilder(); responseBuilder.setEntity(entityBuilder); @@ -140,6 +145,13 @@ public class CaosDBToGrpcConverters { return responseBuilder; } + private FileDescriptor.Builder convert(FileProperties fileProperties) { + FileDescriptor.Builder result = FileDescriptor.newBuilder(); + result.setPath(fileProperties.getPath()); + result.setSize(fileProperties.getSize()); + return result; + } + private EntityRole convert(final Role role) { switch (role) { case RecordType: diff --git a/src/main/java/org/caosdb/server/grpc/GrpcToCaosDBConverters.java b/src/main/java/org/caosdb/server/grpc/GrpcToCaosDBConverters.java index 5420a8d8e809194ce2dbe894faaded794cc3a632..582edb2dbde739f55ecbf15aca0747a16dd87e13 100644 --- a/src/main/java/org/caosdb/server/grpc/GrpcToCaosDBConverters.java +++ b/src/main/java/org/caosdb/server/grpc/GrpcToCaosDBConverters.java @@ -125,7 +125,7 @@ public class GrpcToCaosDBConverters { if (from.getParentsCount() > 0) { entity.getParents().addAll(convertParents(from.getParentsList())); } - if (from.hasFileDescriptor()) { + if (entity.getRole() == Role.File && from.hasFileDescriptor()) { entity.setFileProperties(convert(from.getFileDescriptor())); } return entity; diff --git a/src/test/java/org/caosdb/server/grpc/CaosDBToGrpcConvertersTest.java b/src/test/java/org/caosdb/server/grpc/CaosDBToGrpcConvertersTest.java index 445ec01880b3468b7800ed332a45824f561b7a9c..6b21c9b1a5aa4afbe4b018029bf938ae2edd997e 100644 --- a/src/test/java/org/caosdb/server/grpc/CaosDBToGrpcConvertersTest.java +++ b/src/test/java/org/caosdb/server/grpc/CaosDBToGrpcConvertersTest.java @@ -6,6 +6,8 @@ import static org.junit.Assert.assertNull; import java.util.TimeZone; import org.caosdb.datetime.DateTimeFactory2; import org.caosdb.server.datatype.Value; +import org.caosdb.server.entity.FileProperties; +import org.caosdb.server.entity.RetrieveEntity; import org.junit.Test; public class CaosDBToGrpcConvertersTest { @@ -40,4 +42,15 @@ public class CaosDBToGrpcConvertersTest { converters.convertScalarValue(value).toString(), "string_value: \"2022-12-24T16:15:00.999999+0000\"\n"); } + + @Test + public void testConvertEntity_FileDescriptor() { + RetrieveEntity entity = new RetrieveEntity(null); + CaosDBToGrpcConverters converters = new CaosDBToGrpcConverters(null); + assertEquals(converters.convert(entity).toString(), "entity {\n}\n"); + entity.setFileProperties(new FileProperties("checksum1234", "the/path", 1024L)); + assertEquals( + converters.convert(entity).toString(), + "entity {\n file_descriptor {\n path: \"the/path\"\n size: 1024\n }\n}\n"); + } }