Mercurial > hg > orthanc-authorization
annotate Plugin/ResourceHierarchyCache.h @ 94:0a59aa1631b2 0.5.1
0.5.1
author | Alain Mazy <am@osimis.io> |
---|---|
date | Sat, 15 Apr 2023 08:03:33 +0200 |
parents | a2e5ea1869bd |
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 #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_; |
1 | 41 |
42 std::string ComputeKey(Orthanc::ResourceType level, | |
43 | 43 const std::string& identifier) const; |
1 | 44 |
45 std::string ComputeKey(const OrthancResource& resource) const | |
46 { | |
47 return ComputeKey(resource.GetLevel(), resource.GetIdentifier()); | |
48 } | |
49 | |
50 void LinkParent(const OrthancResource& child, | |
51 const OrthancResource& parent); | |
52 | |
53 bool LookupParent(std::string& target, | |
54 const OrthancResource& resource); | |
55 | |
56 bool LookupParent(std::string& target, | |
57 Orthanc::ResourceType level, | |
58 const std::string& identifier) | |
59 { | |
60 return LookupParent(target, OrthancResource(level, identifier)); | |
61 } | |
62 | |
63 public: | |
43 | 64 explicit ResourceHierarchyCache(ICacheFactory& factory); |
1 | 65 |
66 void Invalidate(Orthanc::ResourceType level, | |
67 const std::string& identifier); | |
68 | |
69 bool LookupStudy(std::string& patient, | |
70 const std::string& study) | |
71 { | |
72 return LookupParent(patient, Orthanc::ResourceType_Study, study); | |
73 } | |
74 | |
75 bool LookupSeries(std::string& patient, | |
76 std::string& study, | |
77 const std::string& series); | |
78 | |
79 bool LookupInstance(std::string& patient, | |
80 std::string& study, | |
81 std::string& series, | |
82 const std::string& instance); | |
83 | |
84 bool LookupDicomUid(std::string& target, | |
85 Orthanc::ResourceType level, | |
86 const std::string& orthancId); | |
87 | |
88 bool LookupOrthancId(std::string& target, | |
89 Orthanc::ResourceType level, | |
90 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
|
91 |
78 | 92 #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
|
93 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
|
94 protected: |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
95 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
|
96 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
|
97 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
|
98 |
94a9484d7f8f
fix security issues allowing to browse remote dicom servers + introduced UnitTests
Alain Mazy <am@osimis.io>
parents:
68
diff
changeset
|
99 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
|
100 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
|
101 const std::string& parentOrthancId); |
78 | 102 #endif |
1 | 103 }; |
104 } |