diff options
author | Luke Kanies <luke@madstop.com> | 2008-05-27 07:20:56 -0500 |
---|---|---|
committer | Luke Kanies <luke@madstop.com> | 2008-06-09 16:39:25 -0500 |
commit | e8044f93efd29fab87d67f55461df371dec8bdff (patch) | |
tree | 6de696a9cc81c370a0537df9ba9eef6013bb939e | |
parent | dbd9b40c6537c261f01976238ef9ccfd6a6d6d08 (diff) | |
download | puppet-e8044f93efd29fab87d67f55461df371dec8bdff.tar.gz puppet-e8044f93efd29fab87d67f55461df371dec8bdff.tar.xz puppet-e8044f93efd29fab87d67f55461df371dec8bdff.zip |
Adding to the indirection request support for authentication information.
This basically consists of the node name (i.e., the certificate name),
the IP, and whether the request is authenticated (which is determined
by whether it provided a valid certificate).
Now the two REST classes (mongrel and webrick) need to correctly
pass this information to the indirection calls they make.
-rw-r--r-- | lib/puppet/indirector/request.rb | 24 | ||||
-rwxr-xr-x | spec/unit/indirector/request.rb | 24 |
2 files changed, 44 insertions, 4 deletions
diff --git a/lib/puppet/indirector/request.rb b/lib/puppet/indirector/request.rb index 68b7ee160..45c06670b 100644 --- a/lib/puppet/indirector/request.rb +++ b/lib/puppet/indirector/request.rb @@ -3,10 +3,28 @@ require 'puppet/indirector' # Provide any attributes or functionality needed for indirected # instances. class Puppet::Indirector::Request - attr_accessor :indirection_name, :key, :method, :options, :instance + attr_accessor :indirection_name, :key, :method, :options, :instance, :node, :ip, :authenticated + + # Is this an authenticated request? + def authenticated? + # Double negative, so we just get true or false + ! ! authenticated + end def initialize(indirection_name, method, key, options = {}) - @indirection_name, @method, @options = indirection_name, method, (options || {}) + options ||= {} + raise ArgumentError, "Request options must be a hash, not %s" % options.class unless options.is_a?(Hash) + + @indirection_name, @method = indirection_name, method + + @options = options.inject({}) do |result, ary| + param, value = ary + if respond_to?(param.to_s + "=") + send(param.to_s + "=", value) + else + result[param] = value + end + end if key.is_a?(String) or key.is_a?(Symbol) @key = key @@ -14,8 +32,6 @@ class Puppet::Indirector::Request @instance = key @key = @instance.name end - - raise ArgumentError, "Request options must be a hash, not %s" % @options.class unless @options.is_a?(Hash) end # Look up the indirection based on the name provided. diff --git a/spec/unit/indirector/request.rb b/spec/unit/indirector/request.rb index cdb40b181..4f0ad8b6a 100755 --- a/spec/unit/indirector/request.rb +++ b/spec/unit/indirector/request.rb @@ -43,6 +43,30 @@ describe Puppet::Indirector::Request do it "should use an empty options hash if nil was provided" do Puppet::Indirector::Request.new(:ind, :method, :key, nil).options.should == {} end + + it "should default to a nil node" do + Puppet::Indirector::Request.new(:ind, :method, :key, nil).node.should be_nil + end + + it "should set its node attribute if provided in the options" do + Puppet::Indirector::Request.new(:ind, :method, :key, :node => "foo.com").node.should == "foo.com" + end + + it "should default to a nil ip" do + Puppet::Indirector::Request.new(:ind, :method, :key, nil).ip.should be_nil + end + + it "should set its ip attribute if provided in the options" do + Puppet::Indirector::Request.new(:ind, :method, :key, :ip => "192.168.0.1").ip.should == "192.168.0.1" + end + + it "should default to being unauthenticated" do + Puppet::Indirector::Request.new(:ind, :method, :key, nil).should_not be_authenticated + end + + it "should set be marked authenticated if configured in the options" do + Puppet::Indirector::Request.new(:ind, :method, :key, :authenticated => "eh").should be_authenticated + end end it "should look use the Indirection class to return the appropriate indirection" do |