class CapitalOneAPI::Client

Attributes

access_token[RW]
client_id[RW]
client_secret[RW]
redirect_uri[RW]
refresh_token[RW]
server_url[RW]

Public Class Methods

new(client_id:, client_secret:, redirect_uri:, server_url: CapitalOneAPI::PRODUCTION_SERVER_URL) click to toggle source
# File lib/capitalone-api/client.rb, line 14
def initialize(client_id:, client_secret:, redirect_uri:, server_url: CapitalOneAPI::PRODUCTION_SERVER_URL)
  @client_id     = client_id
  @client_secret = client_secret
  @redirect_uri  = redirect_uri
  @server_url    = server_url
  @logger        = Logger.new("#{Bundler.root}/log/capitalone_api.log")
end

Public Instance Methods

get_access_tokens(auth_code) click to toggle source

@param [String] auth_code

# File lib/capitalone-api/client.rb, line 23
def get_access_tokens(auth_code)

  params = {
    grant_type:    'authorization_code',
    code:          auth_code,
    client_id:     @client_id,
    client_secret: @client_secret,
    redirect_uri:  @redirect_uri
  }

  result = post_request("#{@server_url}/oauth/oauth20/token", params)

  @access_token  = result['access_token']
  @refresh_token = result['refresh_token']

  result
end
refresh_access_token(refresh_token) click to toggle source

@param [String] refresh_token

# File lib/capitalone-api/client.rb, line 42
def refresh_access_token(refresh_token)

  params = {
    grant_type:    'refresh_token',
    refresh_token: refresh_token,
    client_id:     @client_id,
    client_secret: @client_secret
  }

  result = post_request("#{@server_url}/oauth/oauth20/token", params)

  @access_token  = result['access_token']
  @refresh_token = result['refresh_token']

  result
end

Private Instance Methods

base_authorize_url(params = {}) click to toggle source

@param [Hash] params

# File lib/capitalone-api/client.rb, line 62
def base_authorize_url(params = {})
  url = "#{server_url}/oauth/auz/authorize?redirect_uri=#{redirect_uri}&client_id=#{client_id}" +
        "&response_type=code"
  url = CapitalOneAPI::Utils.set_params_to_url(url: url, params: params) if params.any?
  url
end
get_request(url, access_token) click to toggle source

@param [String] url @param [String] access_token

# File lib/capitalone-api/client.rb, line 91
def get_request(url, access_token)
  @logger.info("URL:#{url}; access_token:#{access_token}")

  uri = URI.parse(url)

  req = Net::HTTP::Get.new(uri)
  req['Accept'] = ['application/json', 'v=1']
  req['Authorization'] = ["Bearer #{access_token}"]

  res =
    Net::HTTP.start(uri.hostname, uri.port, ssl_options) do |http|
      http.request(req)
    end

  @logger.info("URL:#{url}; response:#{res.body}")

  MultiJson.load(res.body)
end
post_request(url, params) click to toggle source

@param [String] url @param [Hash] params

# File lib/capitalone-api/client.rb, line 71
def post_request(url, params)
  @logger.info("URL:#{url}; params:#{params}")

  uri = URI.parse(url)

  req = Net::HTTP::Post.new(uri)
  req.set_form_data(params)

  res =
    Net::HTTP.start(uri.hostname, uri.port, ssl_options) do |http|
      http.request(req)
    end

  @logger.info("URL:#{url}; response:#{res.body}")

  MultiJson.load(res.body)
end
ssl_options() click to toggle source
# File lib/capitalone-api/client.rb, line 110
def ssl_options
  { use_ssl: true, ssl_version: 'TLSv1_2' }
end