Mercurial > hg > orthanc-authorization
comparison Plugin/PermissionParser.cpp @ 195:2f1e872e8eaa
merge
author | Alain Mazy <am@orthanc.team> |
---|---|
date | Fri, 14 Jun 2024 16:31:58 +0200 |
parents | 85859ec3aa7e 55435a4dd2c6 |
children |
comparison
equal
deleted
inserted
replaced
194:85859ec3aa7e | 195:2f1e872e8eaa |
---|---|
24 #include <OrthancException.h> | 24 #include <OrthancException.h> |
25 #include <Logging.h> | 25 #include <Logging.h> |
26 | 26 |
27 namespace OrthancPlugins | 27 namespace OrthancPlugins |
28 { | 28 { |
29 PermissionPattern::PermissionPattern(const OrthancPluginHttpMethod& method, const std::string& patternRegex, const std::string& permissions) : | 29 PermissionPattern::PermissionPattern(const OrthancPluginHttpMethod& method, |
30 method(method), | 30 const std::string& patternRegex, |
31 pattern(patternRegex) | 31 const std::string& permissions) : |
32 method_(method), | |
33 pattern_(patternRegex) | |
32 { | 34 { |
33 if (!permissions.empty()) | 35 if (!permissions.empty()) |
34 { | 36 { |
35 std::vector<std::string> permissionsVector; | 37 std::vector<std::string> permissionsVector; |
36 Orthanc::Toolbox::TokenizeString(permissionsVector, permissions, '|'); | 38 Orthanc::Toolbox::TokenizeString(permissionsVector, permissions, '|'); |
37 | 39 |
38 for (size_t i = 0; i < permissionsVector.size(); ++i) | 40 for (size_t i = 0; i < permissionsVector.size(); ++i) |
39 { | 41 { |
40 this->permissions.insert(permissionsVector[i]); | 42 permissions_.insert(permissionsVector[i]); |
41 } | 43 } |
42 } | 44 } |
43 } | 45 } |
44 | 46 |
45 | 47 |
68 | 70 |
69 PermissionParser::PermissionParser(const std::string& dicomWebRoot, const std::string& oe2Root) : | 71 PermissionParser::PermissionParser(const std::string& dicomWebRoot, const std::string& oe2Root) : |
70 dicomWebRoot_(dicomWebRoot), | 72 dicomWebRoot_(dicomWebRoot), |
71 oe2Root_(oe2Root) | 73 oe2Root_(oe2Root) |
72 { | 74 { |
75 } | |
76 | |
77 PermissionParser::~PermissionParser() | |
78 { | |
79 for (std::list<PermissionPattern*>::iterator it = permissionsPattern_.begin(); | |
80 it != permissionsPattern_.begin(); ++it) | |
81 { | |
82 assert(*it != NULL); | |
83 delete *it; | |
84 } | |
73 } | 85 } |
74 | 86 |
75 void PermissionParser::Add(const Json::Value& configuration, const IAuthorizationParser* authorizationParser) | 87 void PermissionParser::Add(const Json::Value& configuration, const IAuthorizationParser* authorizationParser) |
76 { | 88 { |
77 if (configuration.type() != Json::arrayValue) | 89 if (configuration.type() != Json::arrayValue) |
148 StripLeadingAndTrailingSlashes(strippedDicomWebRoot); | 160 StripLeadingAndTrailingSlashes(strippedDicomWebRoot); |
149 Replace(regex, "DICOM_WEB_ROOT", strippedDicomWebRoot); | 161 Replace(regex, "DICOM_WEB_ROOT", strippedDicomWebRoot); |
150 | 162 |
151 LOG(WARNING) << "Authorization plugin: adding a new permission pattern: " << lowerCaseMethod << " " << regex << " - " << permission; | 163 LOG(WARNING) << "Authorization plugin: adding a new permission pattern: " << lowerCaseMethod << " " << regex << " - " << permission; |
152 | 164 |
153 permissionsPattern_.push_back(PermissionPattern(parsedMethod, regex, permission)); | 165 permissionsPattern_.push_back(new PermissionPattern(parsedMethod, regex, permission)); |
154 | 166 |
155 { // extract individual permissions | 167 { // extract individual permissions |
156 std::set<std::string> permissions; | 168 std::set<std::string> permissions; |
157 Orthanc::Toolbox::SplitString(permissions, permission, '|'); | 169 Orthanc::Toolbox::SplitString(permissions, permission, '|'); |
158 | 170 |
175 // The mutex below should not be necessary, but we prefer to | 187 // The mutex below should not be necessary, but we prefer to |
176 // ensure thread safety in boost::regex | 188 // ensure thread safety in boost::regex |
177 boost::mutex::scoped_lock lock(mutex_); | 189 boost::mutex::scoped_lock lock(mutex_); |
178 | 190 |
179 | 191 |
180 for (std::list<PermissionPattern>::const_iterator it = permissionsPattern_.begin(); | 192 for (std::list<PermissionPattern*>::const_iterator it = permissionsPattern_.begin(); |
181 it != permissionsPattern_.end(); ++it) | 193 it != permissionsPattern_.end(); ++it) |
182 { | 194 { |
183 if (method == it->method) | 195 if (method == (*it)->GetMethod()) |
184 { | 196 { |
185 boost::smatch what; | 197 boost::smatch what; |
186 if (boost::regex_match(uri, what, it->pattern)) | 198 if (boost::regex_match(uri, what, (*it)->GetPattern())) |
187 { | 199 { |
188 matchedPattern = it->pattern.expression(); | 200 matchedPattern = (*it)->GetPattern().expression(); |
189 permissions = it->permissions; | 201 permissions = (*it)->GetPermissions(); |
190 return true; | 202 return true; |
191 } | 203 } |
192 } | 204 } |
193 } | 205 } |
194 | 206 |