class Chebyte::OauthUtil

Attributes

callback_url[RW]
consumer_key[RW]
consumer_secret[RW]
oauth_version[RW]
params[RW]
req_method[RW]
sig_method[RW]
token[RW]
token_secret[RW]

Public Class Methods

new() click to toggle source
# File lib/ruby-yql.rb, line 14
def initialize
  @consumer_key = ''
  @consumer_secret = ''
  @token = ''
  @token_secret = ''
  @req_method = 'GET'
  @sig_method = 'HMAC-SHA1'
  @oauth_version = '1.0'
  @callback_url = ''
  @params = []
end

Public Instance Methods

construct_req_url( url) click to toggle source
# File lib/ruby-yql.rb, line 38
def construct_req_url( url)
  parsed_url = URI.parse( url )
  parsed_url.scheme + '://' + parsed_url.host + parsed_url.path
end
generate_nonce() click to toggle source
# File lib/ruby-yql.rb, line 26
def generate_nonce
  Array.new( 5 ) { rand(256) }.pack('C*').unpack('H*').first
end
generate_sig( args ) click to toggle source
# File lib/ruby-yql.rb, line 43
def generate_sig( args )
  key     = percent_encode( args[:consumer_secret] ) + '&' + percent_encode( args[:token_secret] )
  text    = args[:base_str]
  digest  = OpenSSL::Digest::Digest.new( 'sha1' )
  raw_sig = OpenSSL::HMAC.digest( digest, key, text )
  Base64.encode64( raw_sig ).chomp.gsub( /\n/, '' )
end
normalize_req_params( params ) click to toggle source
# File lib/ruby-yql.rb, line 34
def normalize_req_params( params )
  percent_encode( params.sort().join( '&' ) )
end
percent_encode( string ) click to toggle source
# File lib/ruby-yql.rb, line 30
def percent_encode( string )
  URI.escape( string, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]") )
end
sign( url ) click to toggle source
# File lib/ruby-yql.rb, line 55
def sign( url )

  parsed_url = URI.parse( url )

  @params.push( 'oauth_consumer_key=' + @consumer_key )
  @params.push( 'oauth_nonce=' + generate_nonce() )
  @params.push( 'oauth_signature_method=' + @sig_method )
  @params.push( 'oauth_timestamp=' + Time.now.to_i.to_s )
  @params.push( 'oauth_version=' + @oauth_version )

  if parsed_url.query
    @params = @params | parsed_url.query.split( '&' )
  end

  normal_req_params = normalize_req_params( params )

  req_url = parsed_url.scheme + '://' + parsed_url.host + parsed_url.path

  base_str = [ @req_method, percent_encode( req_url ), normal_req_params ].join( '&' )

  # sign
  signature = generate_sig({
    :base_str => base_str,
    :consumer_secret => @consumer_secret,
    :token_secret => @token_secret
  })

  @params.push( 'oauth_signature=' + percent_encode( signature ) )

  return self
end
to_query_string() click to toggle source
# File lib/ruby-yql.rb, line 51
def to_query_string
  @params.join('&')
end