Mercurial > hg > orthanc-authorization
annotate Plugin/ResourceHierarchyCache.h @ 134:89560460907d
sync
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 21 Nov 2023 20:07:11 +0100 |
parents | aa56dcf599b9 |
children | 9be1ee2b8fe1 |
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 #pragma once | |
20 | |
21 #include "ICacheFactory.h" | |
22 #include "Enumerations.h" | |
23 #include "OrthancResource.h" | |
24 | |
36
8ada1b669194
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
31
diff
changeset
|
25 #include <Compatibility.h> // For std::unique_ptr<> |
8ada1b669194
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
31
diff
changeset
|
26 |
1 | 27 #include <orthanc/OrthancCPlugin.h> |
28 | |
77
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
29 #if BUILD_UNIT_TESTS == 1 |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
30 # include <gtest/gtest_prod.h> |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
31 #endif |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
32 |
1 | 33 namespace OrthancPlugins |
34 { | |
35 class ResourceHierarchyCache : public boost::noncopyable | |
36 { | |
37 private: | |
36
8ada1b669194
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
31
diff
changeset
|
38 std::unique_ptr<ICache> cache_; // Maps resources to their parents |
8ada1b669194
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
31
diff
changeset
|
39 std::unique_ptr<ICache> orthancToDicom_; |
8ada1b669194
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
31
diff
changeset
|
40 std::unique_ptr<ICache> dicomToOrthanc_; |
109 | 41 std::unique_ptr<ICache> labels_; |
1 | 42 |
43 std::string ComputeKey(Orthanc::ResourceType level, | |
43 | 44 const std::string& identifier) const; |
1 | 45 |
46 std::string ComputeKey(const OrthancResource& resource) const | |
47 { | |
48 return ComputeKey(resource.GetLevel(), resource.GetIdentifier()); | |
49 } | |
50 | |
51 void LinkParent(const OrthancResource& child, | |
52 const OrthancResource& parent); | |
53 | |
54 bool LookupParent(std::string& target, | |
55 const OrthancResource& resource); | |
56 | |
57 bool LookupParent(std::string& target, | |
58 Orthanc::ResourceType level, | |
59 const std::string& identifier) | |
60 { | |
61 return LookupParent(target, OrthancResource(level, identifier)); | |
62 } | |
63 | |
109 | 64 void UpdateResourceFromOrthanc(OrthancResource& parent, |
65 std::set<std::string>& labels, | |
66 const OrthancResource& resource); | |
67 | |
1 | 68 public: |
43 | 69 explicit ResourceHierarchyCache(ICacheFactory& factory); |
1 | 70 |
71 void Invalidate(Orthanc::ResourceType level, | |
72 const std::string& identifier); | |
73 | |
74 bool LookupStudy(std::string& patient, | |
75 const std::string& study) | |
76 { | |
77 return LookupParent(patient, Orthanc::ResourceType_Study, study); | |
78 } | |
79 | |
80 bool LookupSeries(std::string& patient, | |
81 std::string& study, | |
82 const std::string& series); | |
83 | |
84 bool LookupInstance(std::string& patient, | |
85 std::string& study, | |
86 std::string& series, | |
87 const std::string& instance); | |
88 | |
89 bool LookupDicomUid(std::string& target, | |
90 Orthanc::ResourceType level, | |
91 const std::string& orthancId); | |
92 | |
93 bool LookupOrthancId(std::string& target, | |
94 Orthanc::ResourceType level, | |
95 const std::string& dicomUid); | |
77
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
96 |
109 | 97 void GetLabels(std::set<std::string>& labels, |
98 const OrthancResource& resource); | |
99 | |
78 | 100 #if BUILD_UNIT_TESTS == 1 |
77
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
101 FRIEND_TEST(DefaultAuthorizationParser, Parse); |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
102 protected: |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
103 void AddOrthancDicomMapping(Orthanc::ResourceType level, |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
104 const std::string& orthancId, |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
105 const std::string& dicomUid); |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
106 |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
107 void AddParentLink(Orthanc::ResourceType childLevel, |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
108 const std::string& childOrthancId, |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
109 const std::string& parentOrthancId); |
110 | 110 |
111 void AddLabels(Orthanc::ResourceType level, | |
112 const std::string& orthancId, | |
113 const std::string& serializedLabels); | |
78 | 114 #endif |
1 | 115 }; |
116 } |