summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThom May <thom@may.lt>2016-07-19 18:39:35 +0100
committerGitHub <noreply@github.com>2016-07-19 18:39:35 +0100
commit1c8b088bc8232c6faf7c24f196ac2b5e2d27364e (patch)
tree0c0a4f0aca934434d0d748aa96fb8bfcc5aa93b5
parent6644c2d16df7867c81e9ae192358c19ebcc6ca99 (diff)
parentf310cc0f92158f3e5f83193a88203636404c8e0d (diff)
downloadchef-zero-1c8b088bc8232c6faf7c24f196ac2b5e2d27364e.tar.gz
Merge pull request #224 from chef/lcg/rebase-101
Return HTTP 400 Bad Request on Solr parse error
-rw-r--r--lib/chef_zero/endpoints/search_endpoint.rb10
-rw-r--r--lib/chef_zero/solr/solr_parser.rb4
2 files changed, 13 insertions, 1 deletions
diff --git a/lib/chef_zero/endpoints/search_endpoint.rb b/lib/chef_zero/endpoints/search_endpoint.rb
index a9ad2bf..63d7f4a 100644
--- a/lib/chef_zero/endpoints/search_endpoint.rb
+++ b/lib/chef_zero/endpoints/search_endpoint.rb
@@ -14,6 +14,8 @@ module ChefZero
results = search(request, orgname)
results['rows'] = results['rows'].map { |name,uri,value,search_value| value }
json_response(200, results)
+ rescue ChefZero::Solr::ParseError
+ bad_search_request(request)
end
def post(request)
@@ -43,10 +45,18 @@ module ChefZero
'start' => full_results['start'],
'total' => full_results['total']
})
+ rescue ChefZero::Solr::ParseError
+ bad_search_request(request)
end
private
+ def bad_search_request(request)
+ query_string = request.query_params['q']
+ resp = {"error" => ["invalid search query: '#{query_string}'"]}
+ json_response(400, resp)
+ end
+
def search_container(request, index, orgname)
relative_parts, normalize_proc = case index
when 'client'
diff --git a/lib/chef_zero/solr/solr_parser.rb b/lib/chef_zero/solr/solr_parser.rb
index 936ead1..99da5fe 100644
--- a/lib/chef_zero/solr/solr_parser.rb
+++ b/lib/chef_zero/solr/solr_parser.rb
@@ -7,6 +7,8 @@ require 'chef_zero/solr/query/subquery'
module ChefZero
module Solr
+ class ParseError < RuntimeError; end
+
class SolrParser
def initialize(query_string)
@query_string = query_string
@@ -114,7 +116,7 @@ module ChefZero
end
def parse_error(token, str)
- raise "Error on token '#{token}' at #{@index} of '#{@query_string}': #{str}"
+ raise ChefZero::Solr::ParseError, "Error on token '#{token}' at #{@index} of '#{@query_string}': #{str}"
end
def read_single_expression