| 170 | } |
| 171 | |
| 172 | HTTPRequestFilter headersFilter(const Poco::Util::AbstractConfiguration & config, const std::string & prefix, HTTPRequestFilterMatchType match_type) |
| 173 | { |
| 174 | std::unordered_map<String, FilterExpression> headers_expression; |
| 175 | Poco::Util::AbstractConfiguration::Keys headers_name; |
| 176 | config.keys(prefix, headers_name); |
| 177 | |
| 178 | for (const auto & header_name : headers_name) |
| 179 | { |
| 180 | const auto & expression = getExpression( |
| 181 | config.getString(prefix + "." + header_name), match_type, /* ignore_query_string= */ false); |
| 182 | checkExpression("", expression); /// Check expression syntax is correct |
| 183 | headers_expression.emplace(std::make_pair(header_name, expression)); |
| 184 | } |
| 185 | |
| 186 | return [headers_expression](const HTTPServerRequest & request) |
| 187 | { |
| 188 | for (const auto & [header_name, header_expression] : headers_expression) |
| 189 | { |
| 190 | const auto header_value = request.get(header_name, ""); |
| 191 | if (!checkExpression(std::string_view(header_value.data(), header_value.size()), header_expression)) |
| 192 | return false; |
| 193 | } |
| 194 | |
| 195 | return true; |
| 196 | }; |
| 197 | } |
| 198 | |
| 199 | std::vector<HTTPRequestFilter> extractHTTPRequestFiltersFromConfig(const Poco::Util::AbstractConfiguration & config, const std::string & config_prefix) |
| 200 | { |
no test coverage detected