summaryrefslogtreecommitdiff
path: root/lib/chef/rest.rb
diff options
context:
space:
mode:
authordanielsdeleo <dan@opscode.com>2013-10-03 16:52:18 -0700
committerdanielsdeleo <dan@opscode.com>2013-10-08 15:01:47 -0700
commit2f82c5b421d2a99cd0c098b4a2d5047d19cdc531 (patch)
tree2f465844923b13a6f6f74b1437ca209e77b64cf0 /lib/chef/rest.rb
parentd391b30f9d3e77505285dfddbea77908d6a36968 (diff)
downloadchef-2f82c5b421d2a99cd0c098b4a2d5047d19cdc531.tar.gz
move http authenticator to its own file
Diffstat (limited to 'lib/chef/rest.rb')
-rw-r--r--lib/chef/rest.rb69
1 files changed, 5 insertions, 64 deletions
diff --git a/lib/chef/rest.rb b/lib/chef/rest.rb
index 6c504bdcad..7ba0164403 100644
--- a/lib/chef/rest.rb
+++ b/lib/chef/rest.rb
@@ -23,7 +23,7 @@
require 'net/https'
require 'uri'
require 'tempfile'
-require 'chef/rest/auth_credentials'
+require 'chef/rest/authenticator'
require 'chef/rest/decompressor'
require 'chef/rest/json_to_model_inflater'
require 'chef/rest/rest_request'
@@ -39,69 +39,6 @@ class Chef
# authentication.
class REST
- class Authenticator
-
- attr_reader :signing_key_filename
- attr_reader :raw_key
- attr_reader :attr_names
- attr_reader :auth_credentials
-
- attr_accessor :sign_request
-
- def initialize(opts={})
- @raw_key = nil
- @sign_request = true
- @signing_key_filename = opts[:signing_key_filename]
- @key = load_signing_key(opts[:signing_key_filename], opts[:raw_key])
- @auth_credentials = AuthCredentials.new(opts[:client_name], @key)
- end
-
- def handle_request(method, url, headers={}, data=false)
- headers.merge!(authentication_headers(method, url, data)) if sign_requests?
- [method, url, headers, data]
- end
-
- def handle_response(http_response, rest_request, return_value)
- [http_response, rest_request, return_value]
- end
-
- def sign_requests?
- auth_credentials.sign_requests? && @sign_request
- end
-
- def client_name
- @auth_credentials.client_name
- end
-
- def load_signing_key(key_file, raw_key = nil)
- if (!!key_file)
- @raw_key = IO.read(key_file).strip
- elsif (!!raw_key)
- @raw_key = raw_key.strip
- else
- return nil
- end
- @key = OpenSSL::PKey::RSA.new(@raw_key)
- rescue SystemCallError, IOError => e
- Chef::Log.warn "Failed to read the private key #{key_file}: #{e.inspect}"
- raise Chef::Exceptions::PrivateKeyMissing, "I cannot read #{key_file}, which you told me to use to sign requests!"
- rescue OpenSSL::PKey::RSAError
- msg = "The file #{key_file} or :raw_key option does not contain a correctly formatted private key.\n"
- msg << "The key file should begin with '-----BEGIN RSA PRIVATE KEY-----' and end with '-----END RSA PRIVATE KEY-----'"
- raise Chef::Exceptions::InvalidPrivateKey, msg
- end
-
- def authentication_headers(method, url, json_body=nil)
- request_params = {:http_method => method, :path => url.path, :body => json_body, :host => "#{url.host}:#{url.port}"}
- request_params[:body] ||= ""
- auth_credentials.signature_headers(request_params)
- end
-
-
- end
-
-
- attr_reader :auth_credentials
attr_accessor :url, :cookies, :sign_on_redirect, :redirect_limit
attr_reader :authenticator
@@ -129,6 +66,10 @@ class Chef
authenticator.signing_key_filename
end
+ def auth_credentials
+ authenticator.auth_credentials
+ end
+
def client_name
authenticator.client_name
end