diff options
author | Chris Doherty <cdoherty@chef.io> | 2015-11-04 14:08:27 -0800 |
---|---|---|
committer | Chris Doherty <cdoherty@chef.io> | 2015-11-04 14:08:27 -0800 |
commit | 232f19f8962ebaa7a90d5b42b01f6d33a6fbe605 (patch) | |
tree | 26f696bb9e40338c12498cc227998ceda9ca5679 | |
parent | 5586276413970d86bbff0bc1bbc58c4325da761c (diff) | |
download | chef-zero-232f19f8962ebaa7a90d5b42b01f6d33a6fbe605.tar.gz |
Factor out policy_name/policy_group validation for use by both POST /nodes and PUT /nodes/:node_id.
-rw-r--r-- | lib/chef_zero/endpoints/node_endpoint.rb | 14 | ||||
-rw-r--r-- | lib/chef_zero/endpoints/nodes_endpoint.rb | 10 | ||||
-rw-r--r-- | lib/chef_zero/rest_base.rb | 6 |
3 files changed, 22 insertions, 8 deletions
diff --git a/lib/chef_zero/endpoints/node_endpoint.rb b/lib/chef_zero/endpoints/node_endpoint.rb index 223ec9f..f2bb8ba 100644 --- a/lib/chef_zero/endpoints/node_endpoint.rb +++ b/lib/chef_zero/endpoints/node_endpoint.rb @@ -6,6 +6,20 @@ module ChefZero module Endpoints # /nodes/ID class NodeEndpoint < RestObjectEndpoint + def put(request) + data = parse_json(request.body) + + if data.has_key?("policy_name") && policy_name_invalid?(data["policy_name"]) + return error(400, "Field 'policy_name' invalid", :pretty => false) + end + + if data.has_key?("policy_group") && policy_name_invalid?(data["policy_group"]) + return error(400, "Field 'policy_group' invalid", :pretty => false) + end + + super(request) + end + def populate_defaults(request, response_json) node = FFI_Yajl::Parser.parse(response_json, :create_additions => false) node = ChefData::DataNormalizer.normalize_node(node, request.rest_path[3]) diff --git a/lib/chef_zero/endpoints/nodes_endpoint.rb b/lib/chef_zero/endpoints/nodes_endpoint.rb index efcaebd..8b9d852 100644 --- a/lib/chef_zero/endpoints/nodes_endpoint.rb +++ b/lib/chef_zero/endpoints/nodes_endpoint.rb @@ -7,22 +7,16 @@ module ChefZero # /nodes class NodesEndpoint < RestListEndpoint - def name_invalid?(name) - !name.is_a?(String) || - name.size > 255 || - name =~ /[+ !]/ - end - def post(request) # /nodes validation if request.rest_path.last == "nodes" data = parse_json(request.body) - if data.has_key?("policy_name") && name_invalid?(data["policy_name"]) + if data.has_key?("policy_name") && policy_name_invalid?(data["policy_name"]) return error(400, "Field 'policy_name' invalid", :pretty => false) end - if data.has_key?("policy_group") && name_invalid?(data["policy_group"]) + if data.has_key?("policy_group") && policy_name_invalid?(data["policy_group"]) return error(400, "Field 'policy_group' invalid", :pretty => false) end end diff --git a/lib/chef_zero/rest_base.rb b/lib/chef_zero/rest_base.rb index a503df6..b4f8605 100644 --- a/lib/chef_zero/rest_base.rb +++ b/lib/chef_zero/rest_base.rb @@ -263,5 +263,11 @@ module ChefZero or_else_value end end + + def policy_name_invalid?(name) + !name.is_a?(String) || + name.size > 255 || + name =~ /[+ !]/ + end end end |