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