class OAuth::Signature::Base

Base class for OAuth signature implementations.

Includes {OAuth::AUTH_SANITIZER::FilteredAttributes} so inspect output redacts secret-bearing fields captured during signature construction.

Attributes

consumer_secret[R]
options[RW]

Signature construction options.

@return [Hash]

request[R]
token_secret[R]

Public Class Methods

implements(signature_method = nil) click to toggle source
   # File lib/oauth/signature/base.rb
26 def implements(signature_method = nil)
27   return OAuth::Signature.available_methods.key(self) if signature_method.nil?
28 
29   OAuth::Signature.available_methods[signature_method] = self
30 end
new(request, options = {}) { |arity == 1| ... } click to toggle source
   # File lib/oauth/signature/base.rb
33 def initialize(request, options = {}, &block)
34   raise TypeError unless request.is_a?(OAuth::RequestProxy::Base)
35 
36   @request = request
37   @options = options
38 
39   ## consumer secret was determined beforehand
40 
41   @consumer_secret = options[:consumer].secret if options[:consumer]
42 
43   # presence of :consumer_secret option will override any Consumer that's provided
44   @consumer_secret = options[:consumer_secret] if options[:consumer_secret]
45 
46   ## token secret was determined beforehand
47 
48   @token_secret = options[:token].secret if options[:token]
49 
50   # presence of :token_secret option will override any Token that's provided
51   @token_secret = options[:token_secret] if options[:token_secret]
52 
53   # override secrets based on the values returned from the block (if any)
54   if block
55     # consumer secret and token secret need to be looked up based on pieces of the request
56     secrets = yield (block.arity == 1) ? request : [token, consumer_key, nonce, request.timestamp]
57     if secrets.is_a?(Array) && secrets.size == 2
58       @token_secret = secrets[0]
59       @consumer_secret = secrets[1]
60     end
61   end
62 end

Public Instance Methods

==(other) click to toggle source
   # File lib/oauth/signature/base.rb
68 def ==(other)
69   check = signature.bytesize ^ other.bytesize
70   signature.bytes.zip(other.bytes) { |x, y| check |= x ^ y.to_i }
71   check.zero?
72 end
body_hash() click to toggle source
   # File lib/oauth/signature/base.rb
82 def body_hash
83   raise_instantiation_error
84 end
signature() click to toggle source
   # File lib/oauth/signature/base.rb
64 def signature
65   Base64.encode64(digest).chomp.delete("\n")
66 end
signature_base_string() click to toggle source
   # File lib/oauth/signature/base.rb
78 def signature_base_string
79   request.signature_base_string
80 end
verify() click to toggle source
   # File lib/oauth/signature/base.rb
74 def verify
75   self == request.signature
76 end

Private Instance Methods

consumer_key() click to toggle source
   # File lib/oauth/signature/base.rb
92 def consumer_key
93   request.consumer_key
94 end
digest() click to toggle source
    # File lib/oauth/signature/base.rb
104 def digest
105   raise_instantiation_error
106 end
nonce() click to toggle source
   # File lib/oauth/signature/base.rb
96 def nonce
97   request.nonce
98 end
raise_instantiation_error() click to toggle source
    # File lib/oauth/signature/base.rb
108 def raise_instantiation_error
109   raise NotImplementedError, "Cannot instantiate #{self.class.name} class directly."
110 end
secret() click to toggle source
    # File lib/oauth/signature/base.rb
100 def secret
101   "#{escape(consumer_secret)}&#{escape(token_secret)}"
102 end
token() click to toggle source
   # File lib/oauth/signature/base.rb
88 def token
89   request.token
90 end