Mercurial > hg > orthanc-authorization
annotate Plugin/AuthorizationParserBase.cpp @ 88:0048bde2b916
back to mainline
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 17 Mar 2023 18:56:48 +0100 |
parents | 94a9484d7f8f |
children | 7381a7674b36 |
rev | line source |
---|---|
1 | 1 /** |
2 * Advanced authorization plugin for Orthanc | |
68 | 3 * Copyright (C) 2017-2023 Osimis S.A., Belgium |
1 | 4 * |
5 * This program is free software: you can redistribute it and/or | |
6 * modify it under the terms of the GNU Affero General Public License | |
7 * as published by the Free Software Foundation, either version 3 of | |
8 * the License, or (at your option) any later version. | |
9 * | |
10 * This program is distributed in the hope that it will be useful, but | |
11 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
13 * Affero General Public License for more details. | |
14 * | |
15 * You should have received a copy of the GNU Affero General Public License | |
16 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
17 **/ | |
18 | |
19 #include "AuthorizationParserBase.h" | |
20 | |
32 | 21 #include <OrthancException.h> |
1 | 22 |
23 namespace OrthancPlugins | |
24 { | |
25 void AuthorizationParserBase::AddResourceInternal(AccessedResources& target, | |
26 Orthanc::ResourceType level, | |
27 const std::string& orthancId) | |
28 { | |
29 std::string dicomUid; | |
30 | |
31 if (resourceHierarchy_->LookupDicomUid(dicomUid, level, orthancId)) | |
32 { | |
33 target.push_back(AccessedResource(level, orthancId, dicomUid)); | |
34 } | |
35 } | |
36 | |
37 | |
38 void AuthorizationParserBase::AddOrthancInstance(AccessedResources& target, | |
39 const std::string& orthancId) | |
40 { | |
41 std::string patient, study, series; | |
42 if (!resourceHierarchy_->LookupInstance(patient, study, series, orthancId)) | |
43 { | |
44 throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource); | |
45 } | |
46 | |
47 AddResourceInternal(target, Orthanc::ResourceType_Patient, patient); | |
48 AddResourceInternal(target, Orthanc::ResourceType_Study, study); | |
49 AddResourceInternal(target, Orthanc::ResourceType_Series, series); | |
50 AddResourceInternal(target, Orthanc::ResourceType_Instance, orthancId); | |
51 } | |
52 | |
53 | |
54 void AuthorizationParserBase::AddOrthancSeries(AccessedResources& target, | |
55 const std::string& orthancId) | |
56 { | |
57 std::string patient, study; | |
58 if (!resourceHierarchy_->LookupSeries(patient, study, orthancId)) | |
59 { | |
60 throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource); | |
61 } | |
62 | |
63 AddResourceInternal(target, Orthanc::ResourceType_Patient, patient); | |
64 AddResourceInternal(target, Orthanc::ResourceType_Study, study); | |
65 AddResourceInternal(target, Orthanc::ResourceType_Series, orthancId); | |
66 } | |
67 | |
68 | |
69 void AuthorizationParserBase::AddOrthancStudy(AccessedResources& target, | |
70 const std::string& orthancId) | |
71 { | |
72 std::string patient; | |
73 if (!resourceHierarchy_->LookupStudy(patient, orthancId)) | |
74 { | |
75 throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource); | |
76 } | |
77 | |
78 AddResourceInternal(target, Orthanc::ResourceType_Patient, patient); | |
79 AddResourceInternal(target, Orthanc::ResourceType_Study, orthancId); | |
80 } | |
81 | |
82 | |
83 void AuthorizationParserBase::AddOrthancPatient(AccessedResources& target, | |
84 const std::string& orthancId) | |
85 { | |
86 AddResourceInternal(target, Orthanc::ResourceType_Patient, orthancId); | |
87 } | |
88 | |
89 | |
90 void AuthorizationParserBase::AddDicomStudy(AccessedResources& target, | |
91 const std::string& studyDicomUid) | |
92 { | |
93 std::string patient, study; | |
94 | |
95 if (!resourceHierarchy_->LookupOrthancId(study, Orthanc::ResourceType_Study, studyDicomUid) || | |
96 !resourceHierarchy_->LookupStudy(patient, study)) | |
97 { | |
98 throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource); | |
99 } | |
100 | |
101 AddResourceInternal(target, Orthanc::ResourceType_Patient, patient); | |
102 target.push_back(AccessedResource(Orthanc::ResourceType_Study, study, studyDicomUid)); | |
103 } | |
104 | |
77
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
105 void AuthorizationParserBase::AddDicomPatient(AccessedResources& target, |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
106 const std::string& patientId) |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
107 { |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
108 std::string patient; |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
109 |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
110 if (!resourceHierarchy_->LookupOrthancId(patient, Orthanc::ResourceType_Patient, patientId)) |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
111 { |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
112 throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource); |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
113 } |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
114 |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
115 AddResourceInternal(target, Orthanc::ResourceType_Patient, patient); |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
116 } |
1 | 117 |
118 void AuthorizationParserBase::AddDicomSeries(AccessedResources& target, | |
119 const std::string& studyDicomUid, | |
120 const std::string& seriesDicomUid) | |
121 { | |
122 std::string series; | |
123 | |
124 if (!resourceHierarchy_->LookupOrthancId(series, Orthanc::ResourceType_Series, seriesDicomUid)) | |
125 { | |
126 throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource); | |
127 } | |
128 | |
129 AddDicomStudy(target, studyDicomUid); | |
130 target.push_back(AccessedResource(Orthanc::ResourceType_Series, series, seriesDicomUid)); | |
131 } | |
132 | |
133 | |
134 void AuthorizationParserBase::AddDicomInstance(AccessedResources& target, | |
135 const std::string& studyDicomUid, | |
136 const std::string& seriesDicomUid, | |
137 const std::string& instanceDicomUid) | |
138 { | |
139 std::string instance; | |
140 | |
141 if (!resourceHierarchy_->LookupOrthancId | |
142 (instance, Orthanc::ResourceType_Instance, instanceDicomUid)) | |
143 { | |
144 throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource); | |
145 } | |
146 | |
147 AddDicomSeries(target, studyDicomUid, seriesDicomUid); | |
148 target.push_back(AccessedResource(Orthanc::ResourceType_Instance, instance, instanceDicomUid)); | |
149 } | |
150 | |
151 | |
29
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
152 AuthorizationParserBase::AuthorizationParserBase(ICacheFactory& factory) |
1 | 153 { |
29
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
154 resourceHierarchy_.reset(new ResourceHierarchyCache(factory)); |
1 | 155 |
156 if (resourceHierarchy_.get() == NULL) | |
157 { | |
158 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); | |
159 } | |
160 } | |
161 } | |
162 |