Mercurial > hg > orthanc-authorization
annotate Plugin/Plugin.cpp @ 56:c02f0646297d
added support for /dicom-web/studies?0020000D=1.2.3&...
author | Alain Mazy <am@osimis.io> |
---|---|
date | Tue, 08 Nov 2022 16:10:22 +0100 |
parents | 317b31e99501 |
children | 55539d564f4f |
rev | line source |
---|---|
1 | 1 /** |
2 * Advanced authorization plugin for Orthanc | |
46
914b8113fd46
upgrade to year 2021
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
41
diff
changeset
|
3 * Copyright (C) 2017-2021 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 "AssociativeArray.h" | |
20 #include "DefaultAuthorizationParser.h" | |
21 #include "CachedAuthorizationService.h" | |
22 #include "AuthorizationWebService.h" | |
23 #include "MemoryCache.h" | |
24 | |
34 | 25 #include "../Resources/Orthanc/Plugins/OrthancPluginCppWrapper.h" |
26 | |
36
8ada1b669194
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
35
diff
changeset
|
27 #include <Compatibility.h> // For std::unique_ptr<> |
32 | 28 #include <Logging.h> |
29 #include <Toolbox.h> | |
1 | 30 |
31 | |
32 // Configuration of the authorization plugin | |
36
8ada1b669194
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
35
diff
changeset
|
33 static std::unique_ptr<OrthancPlugins::IAuthorizationParser> authorizationParser_; |
8ada1b669194
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
35
diff
changeset
|
34 static std::unique_ptr<OrthancPlugins::IAuthorizationService> authorizationService_; |
1 | 35 static std::set<std::string> uncheckedResources_; |
36 static std::list<std::string> uncheckedFolders_; | |
37 static std::list<OrthancPlugins::Token> tokens_; | |
38 static std::set<OrthancPlugins::AccessLevel> uncheckedLevels_; | |
39 | |
40 | |
41 static int32_t FilterHttpRequests(OrthancPluginHttpMethod method, | |
42 const char *uri, | |
43 const char *ip, | |
44 uint32_t headersCount, | |
45 const char *const *headersKeys, | |
46 const char *const *headersValues, | |
47 uint32_t getArgumentsCount, | |
48 const char *const *getArgumentsKeys, | |
49 const char *const *getArgumentsValues) | |
50 { | |
51 try | |
52 { | |
53 if (method == OrthancPluginHttpMethod_Get) | |
54 { | |
55 // Allow GET accesses to static resources | |
56 if (uncheckedResources_.find(uri) != uncheckedResources_.end()) | |
57 { | |
58 return 1; | |
59 } | |
60 | |
61 for (std::list<std::string>::const_iterator | |
62 it = uncheckedFolders_.begin(); it != uncheckedFolders_.end(); ++it) | |
63 { | |
64 if (Orthanc::Toolbox::StartsWith(uri, *it)) | |
65 { | |
66 return 1; | |
67 } | |
68 } | |
69 } | |
70 | |
71 if (authorizationParser_.get() != NULL && | |
72 authorizationService_.get() != NULL) | |
73 { | |
74 // Parse the resources that are accessed through this URI | |
75 OrthancPlugins::IAuthorizationParser::AccessedResources accesses; | |
56
c02f0646297d
added support for /dicom-web/studies?0020000D=1.2.3&...
Alain Mazy <am@osimis.io>
parents:
54
diff
changeset
|
76 std::map<std::string, std::string> getArguments; |
c02f0646297d
added support for /dicom-web/studies?0020000D=1.2.3&...
Alain Mazy <am@osimis.io>
parents:
54
diff
changeset
|
77 for (uint32_t i = 0; i < getArgumentsCount; i++) |
c02f0646297d
added support for /dicom-web/studies?0020000D=1.2.3&...
Alain Mazy <am@osimis.io>
parents:
54
diff
changeset
|
78 { |
c02f0646297d
added support for /dicom-web/studies?0020000D=1.2.3&...
Alain Mazy <am@osimis.io>
parents:
54
diff
changeset
|
79 getArguments[getArgumentsKeys[i]] = getArgumentsValues[i]; |
c02f0646297d
added support for /dicom-web/studies?0020000D=1.2.3&...
Alain Mazy <am@osimis.io>
parents:
54
diff
changeset
|
80 } |
c02f0646297d
added support for /dicom-web/studies?0020000D=1.2.3&...
Alain Mazy <am@osimis.io>
parents:
54
diff
changeset
|
81 |
c02f0646297d
added support for /dicom-web/studies?0020000D=1.2.3&...
Alain Mazy <am@osimis.io>
parents:
54
diff
changeset
|
82 if (!authorizationParser_->Parse(accesses, uri, getArguments)) |
1 | 83 { |
84 return 0; // Unable to parse this URI | |
85 } | |
86 | |
87 // Loop over all the accessed resources to ensure access is | |
88 // granted to each of them | |
89 for (OrthancPlugins::IAuthorizationParser::AccessedResources::const_iterator | |
90 access = accesses.begin(); access != accesses.end(); ++access) | |
91 { | |
92 // Ignored the access levels that are unchecked | |
93 // (cf. "UncheckedLevels" option) | |
94 if (uncheckedLevels_.find(access->GetLevel()) == uncheckedLevels_.end()) | |
95 { | |
96 LOG(INFO) << "Testing whether access to " | |
97 << OrthancPlugins::EnumerationToString(access->GetLevel()) | |
98 << " \"" << access->GetOrthancId() << "\" is allowed"; | |
99 | |
100 bool granted = false; | |
101 unsigned int validity; // ignored | |
102 | |
103 if (tokens_.empty()) | |
104 { | |
105 granted = authorizationService_->IsGranted(validity, method, *access); | |
106 } | |
107 else | |
108 { | |
109 OrthancPlugins::AssociativeArray headers | |
110 (headersCount, headersKeys, headersValues, false); | |
111 | |
112 OrthancPlugins::AssociativeArray getArguments | |
113 (getArgumentsCount, getArgumentsKeys, getArgumentsValues, true); | |
114 | |
115 // Loop over all the authorization tokens stored in the HTTP | |
116 // headers, until finding one that is granted | |
117 for (std::list<OrthancPlugins::Token>::const_iterator | |
118 token = tokens_.begin(); token != tokens_.end(); ++token) | |
119 { | |
120 std::string value; | |
121 | |
122 bool hasValue = false; | |
123 switch (token->GetType()) | |
124 { | |
125 case OrthancPlugins::TokenType_HttpHeader: | |
126 hasValue = headers.GetValue(value, token->GetKey()); | |
127 break; | |
128 | |
129 case OrthancPlugins::TokenType_GetArgument: | |
130 hasValue = getArguments.GetValue(value, token->GetKey()); | |
131 break; | |
132 | |
133 default: | |
134 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange); | |
135 } | |
136 | |
137 if (hasValue && | |
138 authorizationService_->IsGranted(validity, method, *access, *token, value)) | |
139 { | |
140 granted = true; | |
141 break; | |
142 } | |
143 } | |
144 } | |
145 | |
146 if (!granted) | |
147 { | |
148 return 0; | |
149 } | |
150 } | |
151 } | |
152 | |
153 // Access is granted to all the resources | |
154 return 1; | |
155 } | |
156 | |
157 // By default, forbid access to all the resources | |
158 return 0; | |
159 } | |
160 catch (std::runtime_error& e) | |
161 { | |
162 LOG(ERROR) << e.what(); | |
163 return OrthancPluginErrorCode_Success; // Ignore error | |
164 } | |
165 catch (Orthanc::OrthancException& e) | |
166 { | |
167 LOG(ERROR) << e.What(); | |
168 return OrthancPluginErrorCode_Success; // Ignore error | |
169 } | |
170 catch (...) | |
171 { | |
172 LOG(ERROR) << "Unhandled internal exception"; | |
173 return OrthancPluginErrorCode_Success; // Ignore error | |
174 } | |
175 } | |
176 | |
177 | |
178 #if !ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 2, 1) | |
179 static int32_t FilterHttpRequestsFallback(OrthancPluginHttpMethod method, | |
180 const char *uri, | |
181 const char *ip, | |
182 uint32_t headersCount, | |
183 const char *const *headersKeys, | |
184 const char *const *headersValues) | |
185 { | |
186 // Fallback wrapper function for Orthanc <= 1.2.0, where the GET | |
187 // arguments were not available in the HTTP filters | |
188 return FilterHttpRequests(method, uri, ip, | |
189 headersCount, headersKeys, headersValues, | |
190 0, NULL, NULL); | |
191 } | |
192 #endif | |
193 | |
194 | |
195 static OrthancPluginErrorCode OnChangeCallback(OrthancPluginChangeType changeType, | |
196 OrthancPluginResourceType resourceType, | |
197 const char* resourceId) | |
198 { | |
199 try | |
200 { | |
201 if (authorizationParser_.get() == NULL) | |
202 { | |
203 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError); | |
204 } | |
205 | |
206 if (changeType == OrthancPluginChangeType_Deleted) | |
207 { | |
208 switch (resourceType) | |
209 { | |
210 case OrthancPluginResourceType_Patient: | |
211 authorizationParser_->Invalidate(Orthanc::ResourceType_Patient, resourceId); | |
212 break; | |
213 | |
214 case OrthancPluginResourceType_Study: | |
215 authorizationParser_->Invalidate(Orthanc::ResourceType_Study, resourceId); | |
216 break; | |
217 | |
218 case OrthancPluginResourceType_Series: | |
219 authorizationParser_->Invalidate(Orthanc::ResourceType_Series, resourceId); | |
220 break; | |
221 | |
222 case OrthancPluginResourceType_Instance: | |
223 authorizationParser_->Invalidate(Orthanc::ResourceType_Instance, resourceId); | |
224 break; | |
225 | |
226 default: | |
227 break; | |
228 } | |
229 } | |
230 | |
231 return OrthancPluginErrorCode_Success; | |
232 } | |
233 catch (std::runtime_error& e) | |
234 { | |
235 LOG(ERROR) << e.what(); | |
236 return OrthancPluginErrorCode_Success; // Ignore error | |
237 } | |
238 catch (Orthanc::OrthancException& e) | |
239 { | |
240 LOG(ERROR) << e.What(); | |
241 return OrthancPluginErrorCode_Success; // Ignore error | |
242 } | |
243 catch (...) | |
244 { | |
245 LOG(ERROR) << "Unhandled internal exception"; | |
246 return OrthancPluginErrorCode_Success; // Ignore error | |
247 } | |
248 } | |
249 | |
250 | |
251 extern "C" | |
252 { | |
253 ORTHANC_PLUGINS_API int32_t OrthancPluginInitialize(OrthancPluginContext* context) | |
254 { | |
29
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
255 OrthancPlugins::SetGlobalContext(context); |
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
256 OrthancPluginLogWarning(context, "Initializing the authorization plugin"); |
1 | 257 |
258 /* Check the version of the Orthanc core */ | |
29
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
259 if (OrthancPluginCheckVersion(context) == 0) |
1 | 260 { |
29
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
261 OrthancPlugins::ReportMinimalOrthancVersion(ORTHANC_PLUGINS_MINIMAL_MAJOR_NUMBER, |
1 | 262 ORTHANC_PLUGINS_MINIMAL_MINOR_NUMBER, |
263 ORTHANC_PLUGINS_MINIMAL_REVISION_NUMBER); | |
264 return -1; | |
265 } | |
266 | |
41 | 267 #if ORTHANC_FRAMEWORK_VERSION_IS_ABOVE(1, 7, 2) |
32 | 268 Orthanc::Logging::InitializePluginContext(context); |
33
b9c536bf598b
improved Orthanc::Logging::Initialize()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
32
diff
changeset
|
269 #else |
b9c536bf598b
improved Orthanc::Logging::Initialize()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
32
diff
changeset
|
270 Orthanc::Logging::Initialize(context); |
b9c536bf598b
improved Orthanc::Logging::Initialize()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
32
diff
changeset
|
271 #endif |
b9c536bf598b
improved Orthanc::Logging::Initialize()
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
32
diff
changeset
|
272 |
29
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
273 OrthancPluginSetDescription(context, "Advanced authorization plugin for Orthanc."); |
1 | 274 |
275 try | |
276 { | |
29
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
277 OrthancPlugins::OrthancConfiguration general; |
1 | 278 |
279 static const char* SECTION = "Authorization"; | |
280 if (general.IsSection(SECTION)) | |
281 { | |
282 OrthancPlugins::OrthancConfiguration configuration; | |
283 general.GetSection(configuration, "Authorization"); | |
284 | |
285 // TODO - The size of the caches is set to 10,000 items. Maybe add a configuration option? | |
286 OrthancPlugins::MemoryCache::Factory factory(10000); | |
287 | |
288 { | |
289 std::string root; | |
290 | |
291 if (configuration.IsSection("DicomWeb")) | |
292 { | |
293 OrthancPlugins::OrthancConfiguration dicomWeb; | |
294 dicomWeb.GetSection(configuration, "DicomWeb"); | |
295 root = dicomWeb.GetStringValue("Root", ""); | |
296 } | |
297 | |
298 if (root.empty()) | |
299 { | |
300 root = "/dicom-web/"; | |
301 } | |
302 | |
303 authorizationParser_.reset | |
29
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
304 (new OrthancPlugins::DefaultAuthorizationParser(factory, root)); |
1 | 305 } |
306 | |
307 std::list<std::string> tmp; | |
308 | |
309 configuration.LookupListOfStrings(tmp, "TokenHttpHeaders", true); | |
310 for (std::list<std::string>::const_iterator | |
311 it = tmp.begin(); it != tmp.end(); ++it) | |
312 { | |
313 tokens_.push_back(OrthancPlugins::Token(OrthancPlugins::TokenType_HttpHeader, *it)); | |
314 } | |
315 | |
316 configuration.LookupListOfStrings(tmp, "TokenGetArguments", true); | |
317 | |
8
4362026afddf
orthanc 1.2.1 renamed as 1.3.0
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
1
diff
changeset
|
318 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 3, 0) |
1 | 319 for (std::list<std::string>::const_iterator |
320 it = tmp.begin(); it != tmp.end(); ++it) | |
321 { | |
322 tokens_.push_back(OrthancPlugins::Token(OrthancPlugins::TokenType_GetArgument, *it)); | |
323 } | |
324 #else | |
325 if (!tmp.empty()) | |
326 { | |
29
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
327 throw Orthanc::OrthancException( |
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
328 Orthanc::ErrorCode_Plugin, |
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
329 "The option \"TokenGetArguments\" of the authorization plugin " |
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
330 "is only valid if compiled against Orthanc >= 1.3.0" |
1 | 331 } |
332 #endif | |
333 | |
334 configuration.LookupSetOfStrings(uncheckedResources_, "UncheckedResources", false); | |
335 configuration.LookupListOfStrings(uncheckedFolders_, "UncheckedFolders", false); | |
336 | |
337 std::string url; | |
338 | |
339 static const char* WEB_SERVICE = "WebService"; | |
340 if (!configuration.LookupStringValue(url, WEB_SERVICE)) | |
341 { | |
29
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
342 throw Orthanc::OrthancException( |
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
343 Orthanc::ErrorCode_BadFileFormat, |
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
344 "Missing mandatory option \"" + std::string(WEB_SERVICE) + |
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
345 "\" for the authorization plugin"); |
1 | 346 } |
347 | |
348 if (configuration.LookupListOfStrings(tmp, "UncheckedLevels", false)) | |
349 { | |
350 for (std::list<std::string>::const_iterator | |
351 it = tmp.begin(); it != tmp.end(); ++it) | |
352 { | |
353 uncheckedLevels_.insert(OrthancPlugins::StringToAccessLevel(*it)); | |
354 } | |
355 } | |
356 | |
54
317b31e99501
Added 3 new configurations: WebServiceUsername, WebServicePassword, WebServiceIdentifier. WebServiceIdentifier is now included in the payload as the 'identifier' field
Alain Mazy <am@osimis.io>
parents:
51
diff
changeset
|
357 std::unique_ptr<OrthancPlugins::AuthorizationWebService> webService(new OrthancPlugins::AuthorizationWebService(url)); |
317b31e99501
Added 3 new configurations: WebServiceUsername, WebServicePassword, WebServiceIdentifier. WebServiceIdentifier is now included in the payload as the 'identifier' field
Alain Mazy <am@osimis.io>
parents:
51
diff
changeset
|
358 |
317b31e99501
Added 3 new configurations: WebServiceUsername, WebServicePassword, WebServiceIdentifier. WebServiceIdentifier is now included in the payload as the 'identifier' field
Alain Mazy <am@osimis.io>
parents:
51
diff
changeset
|
359 std::string webServiceIdentifier; |
317b31e99501
Added 3 new configurations: WebServiceUsername, WebServicePassword, WebServiceIdentifier. WebServiceIdentifier is now included in the payload as the 'identifier' field
Alain Mazy <am@osimis.io>
parents:
51
diff
changeset
|
360 if (configuration.LookupStringValue(webServiceIdentifier, "WebServiceIdentifier")) |
317b31e99501
Added 3 new configurations: WebServiceUsername, WebServicePassword, WebServiceIdentifier. WebServiceIdentifier is now included in the payload as the 'identifier' field
Alain Mazy <am@osimis.io>
parents:
51
diff
changeset
|
361 { |
317b31e99501
Added 3 new configurations: WebServiceUsername, WebServicePassword, WebServiceIdentifier. WebServiceIdentifier is now included in the payload as the 'identifier' field
Alain Mazy <am@osimis.io>
parents:
51
diff
changeset
|
362 webService->SetIdentifier(webServiceIdentifier); |
317b31e99501
Added 3 new configurations: WebServiceUsername, WebServicePassword, WebServiceIdentifier. WebServiceIdentifier is now included in the payload as the 'identifier' field
Alain Mazy <am@osimis.io>
parents:
51
diff
changeset
|
363 } |
317b31e99501
Added 3 new configurations: WebServiceUsername, WebServicePassword, WebServiceIdentifier. WebServiceIdentifier is now included in the payload as the 'identifier' field
Alain Mazy <am@osimis.io>
parents:
51
diff
changeset
|
364 |
317b31e99501
Added 3 new configurations: WebServiceUsername, WebServicePassword, WebServiceIdentifier. WebServiceIdentifier is now included in the payload as the 'identifier' field
Alain Mazy <am@osimis.io>
parents:
51
diff
changeset
|
365 std::string webServiceUsername; |
317b31e99501
Added 3 new configurations: WebServiceUsername, WebServicePassword, WebServiceIdentifier. WebServiceIdentifier is now included in the payload as the 'identifier' field
Alain Mazy <am@osimis.io>
parents:
51
diff
changeset
|
366 std::string webServicePassword; |
317b31e99501
Added 3 new configurations: WebServiceUsername, WebServicePassword, WebServiceIdentifier. WebServiceIdentifier is now included in the payload as the 'identifier' field
Alain Mazy <am@osimis.io>
parents:
51
diff
changeset
|
367 if (configuration.LookupStringValue(webServiceUsername, "WebServiceUsername") && configuration.LookupStringValue(webServicePassword, "WebServicePassword")) |
317b31e99501
Added 3 new configurations: WebServiceUsername, WebServicePassword, WebServiceIdentifier. WebServiceIdentifier is now included in the payload as the 'identifier' field
Alain Mazy <am@osimis.io>
parents:
51
diff
changeset
|
368 { |
317b31e99501
Added 3 new configurations: WebServiceUsername, WebServicePassword, WebServiceIdentifier. WebServiceIdentifier is now included in the payload as the 'identifier' field
Alain Mazy <am@osimis.io>
parents:
51
diff
changeset
|
369 webService->SetCredentials(webServiceUsername, webServicePassword); |
317b31e99501
Added 3 new configurations: WebServiceUsername, WebServicePassword, WebServiceIdentifier. WebServiceIdentifier is now included in the payload as the 'identifier' field
Alain Mazy <am@osimis.io>
parents:
51
diff
changeset
|
370 } |
317b31e99501
Added 3 new configurations: WebServiceUsername, WebServicePassword, WebServiceIdentifier. WebServiceIdentifier is now included in the payload as the 'identifier' field
Alain Mazy <am@osimis.io>
parents:
51
diff
changeset
|
371 |
1 | 372 authorizationService_.reset |
373 (new OrthancPlugins::CachedAuthorizationService | |
54
317b31e99501
Added 3 new configurations: WebServiceUsername, WebServicePassword, WebServiceIdentifier. WebServiceIdentifier is now included in the payload as the 'identifier' field
Alain Mazy <am@osimis.io>
parents:
51
diff
changeset
|
374 (webService.release(), factory)); |
1 | 375 |
29
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
376 OrthancPluginRegisterOnChangeCallback(context, OnChangeCallback); |
1 | 377 |
378 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 2, 1) | |
29
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
379 OrthancPluginRegisterIncomingHttpRequestFilter2(context, FilterHttpRequests); |
1 | 380 #else |
29
bc0431cb6b8f
fix for compatibility with simplified OrthancPluginCppWrapper
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
22
diff
changeset
|
381 OrthancPluginRegisterIncomingHttpRequestFilter(context, FilterHttpRequestsFallback); |
1 | 382 #endif |
383 } | |
384 else | |
385 { | |
386 LOG(WARNING) << "No section \"" << SECTION << "\" in the configuration file, " | |
387 << "the authorization plugin is disabled"; | |
388 } | |
389 } | |
390 catch (Orthanc::OrthancException& e) | |
391 { | |
392 LOG(ERROR) << e.What(); | |
393 return -1; | |
394 } | |
395 | |
396 return 0; | |
397 } | |
398 | |
399 | |
400 ORTHANC_PLUGINS_API void OrthancPluginFinalize() | |
401 { | |
402 authorizationParser_.reset(NULL); | |
403 } | |
404 | |
405 | |
406 ORTHANC_PLUGINS_API const char* OrthancPluginGetName() | |
407 { | |
408 return "authorization"; | |
409 } | |
410 | |
411 | |
412 ORTHANC_PLUGINS_API const char* OrthancPluginGetVersion() | |
413 { | |
22
c44013681a51
now using the Orthanc framework
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
8
diff
changeset
|
414 return ORTHANC_PLUGIN_VERSION; |
1 | 415 } |
416 } |