Mercurial > hg > orthanc-authorization
annotate Plugin/ResourceHierarchyCache.h @ 150:9be1ee2b8fe1 0.7.0
0.7.0
author | Alain Mazy <am@osimis.io> |
---|---|
date | Fri, 16 Feb 2024 08:39:33 +0100 |
parents | aa56dcf599b9 |
children | c4b908970ae4 |
rev | line source |
---|---|
1 | 1 /** |
2 * Advanced authorization plugin for Orthanc | |
68 | 3 * Copyright (C) 2017-2023 Osimis S.A., Belgium |
150 | 4 * Copyright (C) 2024-2024 Orthanc Team SRL, Belgium |
1 | 5 * |
6 * This program is free software: you can redistribute it and/or | |
7 * modify it under the terms of the GNU Affero General Public License | |
8 * as published by the Free Software Foundation, either version 3 of | |
9 * the License, or (at your option) any later version. | |
10 * | |
11 * This program is distributed in the hope that it will be useful, but | |
12 * WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 * Affero General Public License for more details. | |
15 * | |
16 * You should have received a copy of the GNU Affero General Public License | |
17 * along with this program. If not, see <http://www.gnu.org/licenses/>. | |
18 **/ | |
19 | |
20 #pragma once | |
21 | |
22 #include "ICacheFactory.h" | |
23 #include "Enumerations.h" | |
24 #include "OrthancResource.h" | |
25 | |
36
8ada1b669194
replacing deprecated std::auto_ptr by std::unique_ptr
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
31
diff
changeset
|
26 #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
|
27 |
1 | 28 #include <orthanc/OrthancCPlugin.h> |
29 | |
77
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
30 #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
|
31 # 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
|
32 #endif |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
33 |
1 | 34 namespace OrthancPlugins |
35 { | |
36 class ResourceHierarchyCache : public boost::noncopyable | |
37 { | |
38 private: | |
36
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> 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
|
40 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
|
41 std::unique_ptr<ICache> dicomToOrthanc_; |
109 | 42 std::unique_ptr<ICache> labels_; |
1 | 43 |
44 std::string ComputeKey(Orthanc::ResourceType level, | |
43 | 45 const std::string& identifier) const; |
1 | 46 |
47 std::string ComputeKey(const OrthancResource& resource) const | |
48 { | |
49 return ComputeKey(resource.GetLevel(), resource.GetIdentifier()); | |
50 } | |
51 | |
52 void LinkParent(const OrthancResource& child, | |
53 const OrthancResource& parent); | |
54 | |
55 bool LookupParent(std::string& target, | |
56 const OrthancResource& resource); | |
57 | |
58 bool LookupParent(std::string& target, | |
59 Orthanc::ResourceType level, | |
60 const std::string& identifier) | |
61 { | |
62 return LookupParent(target, OrthancResource(level, identifier)); | |
63 } | |
64 | |
109 | 65 void UpdateResourceFromOrthanc(OrthancResource& parent, |
66 std::set<std::string>& labels, | |
67 const OrthancResource& resource); | |
68 | |
1 | 69 public: |
43 | 70 explicit ResourceHierarchyCache(ICacheFactory& factory); |
1 | 71 |
72 void Invalidate(Orthanc::ResourceType level, | |
73 const std::string& identifier); | |
74 | |
75 bool LookupStudy(std::string& patient, | |
76 const std::string& study) | |
77 { | |
78 return LookupParent(patient, Orthanc::ResourceType_Study, study); | |
79 } | |
80 | |
81 bool LookupSeries(std::string& patient, | |
82 std::string& study, | |
83 const std::string& series); | |
84 | |
85 bool LookupInstance(std::string& patient, | |
86 std::string& study, | |
87 std::string& series, | |
88 const std::string& instance); | |
89 | |
90 bool LookupDicomUid(std::string& target, | |
91 Orthanc::ResourceType level, | |
92 const std::string& orthancId); | |
93 | |
94 bool LookupOrthancId(std::string& target, | |
95 Orthanc::ResourceType level, | |
96 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
|
97 |
109 | 98 void GetLabels(std::set<std::string>& labels, |
99 const OrthancResource& resource); | |
100 | |
78 | 101 #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
|
102 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
|
103 protected: |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
104 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
|
105 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
|
106 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
|
107 |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
108 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
|
109 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
|
110 const std::string& parentOrthancId); |
110 | 111 |
112 void AddLabels(Orthanc::ResourceType level, | |
113 const std::string& orthancId, | |
114 const std::string& serializedLabels); | |
78 | 115 #endif |
1 | 116 }; |
117 } |