Class: HTTPClient::OAuth
- Inherits:
-
Object
- Object
- HTTPClient::OAuth
- Includes:
- Util
- Defined in:
- lib/httpclient/auth.rb
Overview
Authentication filter for handling OAuth negotiation. Used in WWWAuth.
CAUTION: This impl only support ‘#7 Accessing Protected Resources’ in OAuth Core 1.0 spec for now. You need to obtain Access token and Access secret by yourself.
CAUTION: This impl does NOT support OAuth Request Body Hash spec for now. oauth.googlecode.com/svn/spec/ext/body_hash/1.0/oauth-bodyhash.html
Defined Under Namespace
Classes: Config
Instance Attribute Summary collapse
-
#scheme ⇒ Object
readonly
Authentication scheme.
Class Method Summary collapse
-
.escape(str) ⇒ Object
:nodoc:.
Instance Method Summary collapse
-
#challenge(uri, param_str = nil) ⇒ Object
Challenge handler: remember URL for response.
- #escape(str) ⇒ Object
-
#get(req) ⇒ Object
Response handler: returns credential.
-
#get_config(uri = nil) ⇒ Object
Get authentication credential.
-
#initialize ⇒ OAuth
constructor
Creates new DigestAuth filter.
-
#reset_challenge ⇒ Object
Resets challenge state.
-
#set(uri, user, passwd) ⇒ Object
Set authentication credential.
-
#set_config(uri, config) ⇒ Object
Set authentication credential.
Methods included from Util
#force_binary, hash_find_value, #https?, #keyword_argument, uri_dirname, uri_part_of, #urify
Constructor Details
#initialize ⇒ OAuth
Creates new DigestAuth filter.
612 613 614 615 616 617 618 619 620 621 |
# File 'lib/httpclient/auth.rb', line 612 def initialize @config = nil # common config @auth = {} # configs for each site @challengeable = {} @nonce_count = 0 @signature_handler = { 'HMAC-SHA1' => method(:sign_hmac_sha1) } @scheme = "OAuth" end |
Instance Attribute Details
#scheme ⇒ Object (readonly)
Authentication scheme.
542 543 544 |
# File 'lib/httpclient/auth.rb', line 542 def scheme @scheme end |
Class Method Details
.escape(str) ⇒ Object
:nodoc:
595 596 597 598 599 600 601 602 603 604 605 |
# File 'lib/httpclient/auth.rb', line 595 def self.escape(str) # :nodoc: if str.respond_to?(:force_encoding) str.dup.force_encoding('BINARY').gsub(/([^a-zA-Z0-9_.~-]+)/) { '%' + $1.unpack('H2' * $1.bytesize).join('%').upcase } else str.gsub(/([^a-zA-Z0-9_.~-]+)/n) { '%' + $1.unpack('H2' * $1.bytesize).join('%').upcase } end end |
Instance Method Details
#challenge(uri, param_str = nil) ⇒ Object
Challenge handler: remember URL for response.
672 673 674 675 676 677 678 679 |
# File 'lib/httpclient/auth.rb', line 672 def challenge(uri, param_str = nil) if uri.nil? @challengeable[nil] = true else @challengeable[urify(uri)] = true end true end |
#escape(str) ⇒ Object
607 608 609 |
# File 'lib/httpclient/auth.rb', line 607 def escape(str) self.class.escape(str) end |
#get(req) ⇒ Object
Response handler: returns credential. It sends cred only when a given uri is;
-
child page of challengeable(got *Authenticate before) uri and,
-
child page of defined credential
661 662 663 664 665 666 667 668 669 |
# File 'lib/httpclient/auth.rb', line 661 def get(req) target_uri = req.header.request_uri return nil unless @challengeable[nil] or @challengeable.find { |uri, ok| Util.uri_part_of(target_uri, uri) and ok } config = get_config(target_uri) || @config return nil unless config calc_cred(req, config) end |
#get_config(uri = nil) ⇒ Object
Get authentication credential.
646 647 648 649 650 651 652 653 654 655 |
# File 'lib/httpclient/auth.rb', line 646 def get_config(uri = nil) if uri.nil? @config else uri = urify(uri) Util.hash_find_value(@auth) { |cand_uri, cred| Util.uri_part_of(uri, cand_uri) } end end |
#reset_challenge ⇒ Object
Resets challenge state. Do not send ‘*Authorization’ header until the server sends ‘*Authentication’ again.
625 626 627 |
# File 'lib/httpclient/auth.rb', line 625 def reset_challenge @challengeable.clear end |
#set(uri, user, passwd) ⇒ Object
Set authentication credential. You cannot set OAuth config via WWWAuth#set_auth. Use OAuth#config=
631 632 633 |
# File 'lib/httpclient/auth.rb', line 631 def set(uri, user, passwd) # not supported end |
#set_config(uri, config) ⇒ Object
Set authentication credential.
636 637 638 639 640 641 642 643 |
# File 'lib/httpclient/auth.rb', line 636 def set_config(uri, config) if uri.nil? @config = config else uri = Util.uri_dirname(urify(uri)) @auth[uri] = config end end |