Mercurial > hg > orthanc-authorization
changeset 229:83bf83000928
return [] on GET /dicom-web/studies with a resource token
author | Alain Mazy <am@orthanc.team> |
---|---|
date | Thu, 17 Apr 2025 18:40:05 +0200 |
parents | add4f4c0cf7e |
children | dc8035ecabc6 |
files | NEWS Plugin/Plugin.cpp |
diffstat | 2 files changed, 21 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/NEWS Thu Apr 17 18:21:40 2025 +0200 +++ b/NEWS Thu Apr 17 18:40:05 2025 +0200 @@ -1,6 +1,10 @@ Pending changes =============== +* When calling /dicom-web/studies with a resource token when no StudyInstanceUID + is specified in the query args, the plugin now returns an empty list of resources + instead of returning a 403. This notably prevents OHIF to display errors when requesting + prior studies while still preserving the security since no resources are returned. * Added support for /dicom-web/studies/../thumbnail.
--- a/Plugin/Plugin.cpp Thu Apr 17 18:21:40 2025 +0200 +++ b/Plugin/Plugin.cpp Thu Apr 17 18:40:05 2025 +0200 @@ -426,6 +426,14 @@ { return 1; } + + // Calling one of this "search" uri with a resource-token is authorized (since we override these routes in this plugin) but + // the results will be empty. We want to avoid 403 errors in OHIF when requesting prior studies. + // TODO: In the future, we shall be able to return the studies that are authorized by the resource-token. + if (strcmp(uri, "/dicom-web/studies") == 0 && method == OrthancPluginHttpMethod_Get) + { + return 1; + } } // By default, forbid access to all the resources @@ -808,10 +816,17 @@ // If anonymous user profile, it might be a resource token e.g accessing /dicom-web/studies/.../metadata // -> extract the StudyInstanceUID from the query and send the token for validation to the auth-service - // If there is no StudyInstanceUID, then, return a 403 because we don't know what resource it relates to + // If there is no StudyInstanceUID, then, return an empty list if (!GetStudyInstanceUIDFromQuery(studyInstanceUID, query)) { - throw Orthanc::OrthancException(Orthanc::ErrorCode_ForbiddenAccess, "Auth plugin: unable to call tools/find when the user does not have access to any labels and if there is no StudyInstanceUID in the query."); + // If there is no StudyInstaceUID, this might still be a call to /dicom-web/studies?PatientID=... e.g. from OHIF + // in this case, let's return an empty list. TODO: in the future, we may get the StudyInstanceUIDs from the resource token and + // "add" &StudyInstanceUID=1.2|1.3|1.4 in the query if there are multiple studies in the resource token + Json::Value emptyArray = Json::arrayValue; + OrthancPlugins::AnswerJson(emptyArray, output); + return; + + // old code prior to 0.9.2: throw Orthanc::OrthancException(Orthanc::ErrorCode_ForbiddenAccess, "Auth plugin: unable to call tools/find when the user does not have access to any labels and if there is no StudyInstanceUID in the query."); } std::vector<std::string> studyOrthancIds;