class OAuth::Signature::Base

Attributes

consumer_secret[R]
options[RW]
request[R]
token_secret[R]

Public Class Methods

implements(signature_method = nil) click to toggle source
# File lib/oauth/signature/base.rb, line 13
def self.implements(signature_method = nil)
  return @implements if signature_method.nil?
  @implements = signature_method
  OAuth::Signature.available_methods[@implements] = self
end
new(request, options = {}) { |arity == 1 ? request : [token, consumer_key, nonce, timestamp]| ... } click to toggle source
# File lib/oauth/signature/base.rb, line 19
def initialize(request, options = {}, &block)
  raise TypeError unless request.is_a?(OAuth::RequestProxy::Base)
  @request = request
  @options = options

  ## consumer secret was determined beforehand

  @consumer_secret = options[:consumer].secret if options[:consumer]

  # presence of :consumer_secret option will override any Consumer that's provided
  @consumer_secret = options[:consumer_secret] if options[:consumer_secret]

  ## token secret was determined beforehand

  @token_secret = options[:token].secret if options[:token]

  # presence of :token_secret option will override any Token that's provided
  @token_secret = options[:token_secret] if options[:token_secret]

  # override secrets based on the values returned from the block (if any)
  if block_given?
    # consumer secret and token secret need to be looked up based on pieces of the request
    secrets = yield block.arity == 1 ? request : [token, consumer_key, nonce, request.timestamp]
    if secrets.is_a?(Array) && secrets.size == 2
      @token_secret = secrets[0]
      @consumer_secret = secrets[1]
    end
  end
end

Public Instance Methods

==(cmp_signature) click to toggle source
# File lib/oauth/signature/base.rb, line 53
def ==(cmp_signature)
  check = signature.bytesize ^ cmp_signature.bytesize
  signature.bytes.zip(cmp_signature.bytes) { |x, y| check |= x ^ y.to_i }
  check.zero?
end
body_hash() click to toggle source
# File lib/oauth/signature/base.rb, line 67
def body_hash
  raise_instantiation_error
end
signature() click to toggle source
# File lib/oauth/signature/base.rb, line 49
def signature
  Base64.encode64(digest).chomp.delete("\n")
end
signature_base_string() click to toggle source
# File lib/oauth/signature/base.rb, line 63
def signature_base_string
  request.signature_base_string
end
verify() click to toggle source
# File lib/oauth/signature/base.rb, line 59
def verify
  self == request.signature
end

Private Instance Methods

consumer_key() click to toggle source
# File lib/oauth/signature/base.rb, line 77
def consumer_key
  request.consumer_key
end
digest() click to toggle source
# File lib/oauth/signature/base.rb, line 89
def digest
  raise_instantiation_error
end
nonce() click to toggle source
# File lib/oauth/signature/base.rb, line 81
def nonce
  request.nonce
end
raise_instantiation_error() click to toggle source
# File lib/oauth/signature/base.rb, line 93
def raise_instantiation_error
  raise NotImplementedError, "Cannot instantiate #{self.class.name} class directly."
end
secret() click to toggle source
# File lib/oauth/signature/base.rb, line 85
def secret
  "#{escape(consumer_secret)}&#{escape(token_secret)}"
end
token() click to toggle source
# File lib/oauth/signature/base.rb, line 73
def token
  request.token
end