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