Sha256: aea67896892b0abc276d37d1e3162937a29c593ef71b7b24bd7f6a319ebaede6

Contents?: true

Size: 1.79 KB

Versions: 6

Compression:

Stored size: 1.79 KB

Contents

require 'oauth/signature'
require 'oauth/helper'
require 'oauth/request_proxy/base'
require 'base64'

module OAuth::Signature
  class Base
    include OAuth::Helper
    
    attr_accessor :options
    
    def self.implements(signature_method)
      OAuth::Signature.available_methods[signature_method] = self
    end

    def self.digest_class(digest_class = nil)
      return @digest_class if digest_class.nil?
      @digest_class = digest_class
    end

    attr_reader :token_secret, :consumer_secret, :request

    def initialize(request, options = {}, &block)
      raise TypeError unless request.kind_of?(OAuth::RequestProxy::Base)
      @request = request
      @options = options
      if block_given?
        @token_secret, @consumer_secret = yield block.arity == 1 ? token : [token, consumer_key,nonce,request.timestamp]
      else
        @consumer_secret = @options[:consumer].secret
        @token_secret = @options[:token] ? @options[:token].secret : ''
      end
    end

    def signature
      Base64.encode64(digest).chomp.gsub(/\n/,'')
    end

    def ==(cmp_signature)
      Base64.decode64(signature) == Base64.decode64(cmp_signature)
    end

    def verify
      self == self.request.signature
    end

    def signature_base_string
      normalized_params = request.parameters_for_signature.sort.map { |k,v| [escape(k), escape(v)] * "=" }.join("&")
      base = [request.method, request.uri, normalized_params]
      sbs = base.map { |v| escape(v) }.join("&")
    end

    private

    def token
      request.token
    end
    
    def consumer_key
      request.consumer_key
    end
    
    def nonce
      request.nonce
    end

    def secret
      "#{escape(consumer_secret)}&#{escape(token_secret)}"
    end

    def digest
      self.class.digest_class.digest(signature_base_string)
    end

  end
end

Version data entries

6 entries across 6 versions & 4 rubygems

Version Path
pelle-oauth-0.2.6 lib/oauth/signature/base.rb
pelle-oauth-0.2.7 lib/oauth/signature/base.rb
rares-oauth-0.2.7 lib/oauth/signature/base.rb
stmpjmpr-oauth-0.2.7 lib/oauth/signature/base.rb
oauth-0.2.6 lib/oauth/signature/base.rb
oauth-0.2.7 lib/oauth/signature/base.rb