# HG changeset patch # User Sebastien Jodogne # Date 1677258455 -3600 # Node ID 8b74aa4f35153bf69854aee391a6e5fcce61a69c # Parent 688b83f915bc06d1b7a131601d43b67a6943e212 enforce the existence of the patient/study/instance while creating its archive diff -r 688b83f915bc -r 8b74aa4f3515 NEWS --- a/NEWS Wed Feb 22 11:10:40 2023 +0100 +++ b/NEWS Fri Feb 24 18:07:35 2023 +0100 @@ -53,6 +53,8 @@ * Fix decoding of RLE images for which the "Planar Configuration" tag (0028,0006) equals 1 * Fix issue #212 (Anonymization process transcodes data and loses resource link). +* Enforce the existence of the patient/study/instance while creating its archive + version 1.11.2 (2022-08-30) =========================== diff -r 688b83f915bc -r 8b74aa4f3515 OrthancServer/Sources/OrthancRestApi/OrthancRestArchive.cpp --- a/OrthancServer/Sources/OrthancRestApi/OrthancRestArchive.cpp Wed Feb 22 11:10:40 2023 +0100 +++ b/OrthancServer/Sources/OrthancRestApi/OrthancRestArchive.cpp Fri Feb 24 18:07:35 2023 +0100 @@ -61,7 +61,7 @@ } else { - job.AddResource(resources[i].asString()); + job.AddResource(resources[i].asString(), false, ResourceType_Patient /* dummy value */); } } } @@ -576,7 +576,8 @@ } - template + template static void CreateSingleGet(RestApiGetCall& call) { static const char* const TRANSCODE = "transcode"; @@ -627,7 +628,7 @@ } std::unique_ptr job(new ArchiveJob(context, IS_MEDIA, extended)); - job->AddResource(id); + job->AddResource(id, true, LEVEL); if (call.HasArgument(TRANSCODE)) { @@ -645,7 +646,8 @@ } - template + template static void CreateSinglePost(RestApiPostCall& call) { if (call.IsDocumentation()) @@ -678,7 +680,7 @@ priority, loaderThreads, body, false /* by default, not extented */); std::unique_ptr job(new ArchiveJob(context, IS_MEDIA, extended)); - job->AddResource(id); + job->AddResource(id, true, LEVEL); if (transcode) { @@ -698,18 +700,18 @@ void OrthancRestApi::RegisterArchive() { - Register("/patients/{id}/archive", CreateSingleGet); - Register("/patients/{id}/archive", CreateSinglePost); - Register("/patients/{id}/media", CreateSingleGet); - Register("/patients/{id}/media", CreateSinglePost); - Register("/series/{id}/archive", CreateSingleGet); - Register("/series/{id}/archive", CreateSinglePost); - Register("/series/{id}/media", CreateSingleGet); - Register("/series/{id}/media", CreateSinglePost); - Register("/studies/{id}/archive", CreateSingleGet); - Register("/studies/{id}/archive", CreateSinglePost); - Register("/studies/{id}/media", CreateSingleGet); - Register("/studies/{id}/media", CreateSinglePost); + Register("/patients/{id}/archive", CreateSingleGet); + Register("/patients/{id}/archive", CreateSinglePost); + Register("/patients/{id}/media", CreateSingleGet); + Register("/patients/{id}/media", CreateSinglePost); + Register("/series/{id}/archive", CreateSingleGet); + Register("/series/{id}/archive", CreateSinglePost); + Register("/series/{id}/media", CreateSingleGet); + Register("/series/{id}/media", CreateSinglePost); + Register("/studies/{id}/archive", CreateSingleGet); + Register("/studies/{id}/archive", CreateSinglePost); + Register("/studies/{id}/media", CreateSingleGet); + Register("/studies/{id}/media", CreateSinglePost); Register("/tools/create-archive", CreateBatch); diff -r 688b83f915bc -r 8b74aa4f3515 OrthancServer/Sources/ServerJobs/ArchiveJob.cpp --- a/OrthancServer/Sources/ServerJobs/ArchiveJob.cpp Wed Feb 22 11:10:40 2023 +0100 +++ b/OrthancServer/Sources/ServerJobs/ArchiveJob.cpp Fri Feb 24 18:07:35 2023 +0100 @@ -1155,7 +1155,9 @@ } - void ArchiveJob::AddResource(const std::string& publicId) + void ArchiveJob::AddResource(const std::string& publicId, + bool mustExist, + ResourceType expectedType) { if (writer_.get() != NULL) // Already started { @@ -1163,6 +1165,17 @@ } else { + if (mustExist) + { + ResourceType type; + if (!context_.GetIndex().LookupResourceType(type, publicId) || + type != expectedType) + { + throw OrthancException(ErrorCode_InexistentItem, + "Missing resource while creating an archive: " + publicId); + } + } + ResourceIdentifiers resource(context_.GetIndex(), publicId); archive_->Add(context_.GetIndex(), resource); } diff -r 688b83f915bc -r 8b74aa4f3515 OrthancServer/Sources/ServerJobs/ArchiveJob.h --- a/OrthancServer/Sources/ServerJobs/ArchiveJob.h Wed Feb 22 11:10:40 2023 +0100 +++ b/OrthancServer/Sources/ServerJobs/ArchiveJob.h Fri Feb 24 18:07:35 2023 +0100 @@ -89,7 +89,9 @@ return description_; } - void AddResource(const std::string& publicId); + void AddResource(const std::string& publicId, + bool mustExist, + ResourceType expectedType); void SetTranscode(DicomTransferSyntax transferSyntax);