summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Doherty <cdoherty@chef.io>2015-11-04 14:08:27 -0800
committerChris Doherty <cdoherty@chef.io>2015-11-04 14:08:27 -0800
commit232f19f8962ebaa7a90d5b42b01f6d33a6fbe605 (patch)
tree26f696bb9e40338c12498cc227998ceda9ca5679
parent5586276413970d86bbff0bc1bbc58c4325da761c (diff)
downloadchef-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.rb14
-rw-r--r--lib/chef_zero/endpoints/nodes_endpoint.rb10
-rw-r--r--lib/chef_zero/rest_base.rb6
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