From 1b950b246c3d385e52fde619538f03763bcb3c11 Mon Sep 17 00:00:00 2001 From: kmacgugan Date: Wed, 8 Jun 2016 17:08:12 -0700 Subject: Add external_authentication_uid to actors endpoint for querying --- lib/chef_zero/endpoints/actors_endpoint.rb | 32 ++++++++++++++++++++---------- 1 file 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 -- cgit v1.2.1