Sha256: 520e499db61eb55fabfac03e6b7915711783b4b311f69718976400d1716700bd

Contents?: true

Size: 1.8 KB

Versions: 7

Compression:

Stored size: 1.8 KB

Contents

require 'rest-core'

module RestCore::ClientOauth1
  include RestCore

  def authorize_url! opts={}
    self.data = ParseQuery.parse_query(
      post(request_token_path, {}, {}, {:json_decode => false}.merge(opts)))

    authorize_url
  end

  def authorize_url
    url(authorize_path, :oauth_token => oauth_token)
  end

  def authorize! opts={}
    self.data = ParseQuery.parse_query(
      post(access_token_path, {}, {}, {:json_decode => false}.merge(opts)))

    data['authorized'] = 'true'
    data
  end

  def authorized?
    !!(oauth_token && oauth_token_secret && data['authorized'])
  end

  def data_json
    JsonDecode.json_encode(data.merge('sig' => calculate_sig))
  end

  def data_json= json
    self.data = check_sig_and_return_data(JsonDecode.json_decode(json))
  rescue JsonDecode.const_get(:ParseError)
    self.data = nil
  end

  def oauth_token
    data['oauth_token'] if data.kind_of?(Hash)
  end
  def oauth_token= token
    data['oauth_token'] = token if data.kind_of?(Hash)
  end
  def oauth_token_secret
    data['oauth_token_secret'] if data.kind_of?(Hash)
  end
  def oauth_token_secret= secret
    data['oauth_token_secret'] = secret if data.kind_of?(Hash)
  end
  def oauth_callback
    data['oauth_callback'] if data.kind_of?(Hash)
  end
  def oauth_callback= uri
    data['oauth_callback'] = uri if data.kind_of?(Hash)
  end

  private
  def default_data
    {}
  end

  def check_sig_and_return_data hash
    hash if consumer_secret && hash.kind_of?(Hash) &&
            calculate_sig(hash) == hash['sig']
  end

  def calculate_sig hash=data
    base = hash.reject{ |(k, _)| k == 'sig' }.sort.map{ |(k, v)|
      "#{escape(k.to_s)}=#{escape(v.to_s)}"
    }.join('&')
    Digest::MD5.hexdigest("#{escape(consumer_secret)}&#{base}")
  end

  def escape string
    CGI.escape(string).gsub('+', '%20')
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
rest-core-1.0.3 lib/rest-core/client_oauth1.rb
rest-core-1.0.2 lib/rest-core/client_oauth1.rb
rest-core-1.0.1 lib/rest-core/client_oauth1.rb
rest-core-1.0.0 lib/rest-core/client_oauth1.rb
rest-core-0.8.2 lib/rest-core/client_oauth1.rb
rest-core-0.8.1 lib/rest-core/client_oauth1.rb
rest-core-0.8.0 lib/rest-core/client_oauth1.rb