summaryrefslogtreecommitdiff
path: root/lib/chef_zero/endpoints/actors_endpoint.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/chef_zero/endpoints/actors_endpoint.rb')
-rw-r--r--lib/chef_zero/endpoints/actors_endpoint.rb32
1 files changed, 21 insertions, 11 deletions
diff --git a/lib/chef_zero/endpoints/actors_endpoint.rb b/lib/chef_zero/endpoints/actors_endpoint.rb
index d1e4714..6297aed 100644
--- a/lib/chef_zero/endpoints/actors_endpoint.rb
+++ b/lib/chef_zero/endpoints/actors_endpoint.rb
@@ -8,17 +8,12 @@ module ChefZero
def get(request)
response = super(request)
- if request.query_params['email']
- results = parse_json(response[2])
- new_results = {}
- results.each do |name, url|
- record = get_data(request, request.rest_path + [ name ], :nil)
- if record
- record = parse_json(record)
- new_results[name] = url if record['email'] == request.query_params['email']
- end
- end
- response[2] = to_json(new_results)
+ # apply query filters: if one applies, stop processing rest
+ # (precendence matches chef-server: https://github.com/chef/chef-server/blob/268a0c9/src/oc_erchef/apps/chef_objects/src/chef_user.erl#L554-L559)
+ if value = request.query_params['external_authentication_uid']
+ response[2] = filter('external_authentication_uid', value, request, response[2])
+ elsif value = request.query_params['email']
+ response[2] = filter('email', value, request, response[2])
end
if request.query_params['verbose']
@@ -85,6 +80,21 @@ module ChefZero
result
end
end
+
+ private
+
+ def filter(key, value, request, resp)
+ results = parse_json(resp)
+ new_results = {}
+ results.each do |name, url|
+ record = get_data(request, request.rest_path + [ name ], :nil)
+ if record
+ record = parse_json(record)
+ new_results[name] = url if record[key] == value
+ end
+ end
+ to_json(new_results)
+ end
end
end
end