class SmileIdentityCore::IDApi

Public Class Methods

new(partner_id, api_key, sid_server) click to toggle source
# File lib/smile-identity-core/id_api.rb, line 4
def initialize(partner_id, api_key, sid_server)
  @partner_id = partner_id.to_s
  @api_key = api_key

  @sid_server = sid_server
  if !(sid_server =~ URI::regexp)
    sid_server_mapping = {
      0 => 'https://3eydmgh10d.execute-api.us-west-2.amazonaws.com/test',
      1 => 'https://la7am6gdm8.execute-api.us-west-2.amazonaws.com/prod'
    }
    @url = sid_server_mapping[sid_server.to_i]
  else
    @url = sid_server
  end
end

Public Instance Methods

id_info=(id_info) click to toggle source
# File lib/smile-identity-core/id_api.rb, line 52
def id_info=(id_info)

  updated_id_info = id_info

  if updated_id_info.nil? ||  updated_id_info.keys.length == 0
    raise ArgumentError.new("Please make sure that id_info not empty or nil")
  end

  [:country, :id_type, :id_number].each do |key|
    unless updated_id_info[key] && !updated_id_info[key].nil? && !updated_id_info[key].empty?
      raise ArgumentError.new("Please make sure that #{key.to_s} is included in the id_info")
    end
  end

  @id_info = updated_id_info
end
partner_params=(partner_params) click to toggle source
# File lib/smile-identity-core/id_api.rb, line 34
def partner_params=(partner_params)
  if partner_params == nil
    raise ArgumentError.new('Please ensure that you send through partner params')
  end

  if !partner_params.is_a?(Hash)
    raise ArgumentError.new('Partner params needs to be a hash')
  end

  [:user_id, :job_id, :job_type].each do |key|
    unless partner_params[key] && !partner_params[key].nil? && !(partner_params[key].empty? if partner_params[key].is_a?(String))
      raise ArgumentError.new("Please make sure that #{key.to_s} is included in the partner params")
    end
  end

  @partner_params = partner_params
end
submit_job(partner_params, id_info) click to toggle source
# File lib/smile-identity-core/id_api.rb, line 20
def submit_job(partner_params, id_info)
  self.partner_params = symbolize_keys partner_params

  @timestamp = Time.now.to_i

  self.id_info = symbolize_keys id_info

  if @partner_params[:job_type].to_i != 5
    raise ArgumentError.new('Please ensure that you are setting your job_type to 5 to query ID Api')
  end

  return setup_requests
end

Private Instance Methods

configure_json() click to toggle source
# File lib/smile-identity-core/id_api.rb, line 101
def configure_json
  body = {
    timestamp: @timestamp,
    sec_key: determine_sec_key,
    partner_id: @partner_id,
    partner_params: @partner_params
  }

  body.merge!(@id_info)
  JSON.generate(body)
end
determine_sec_key() click to toggle source
# File lib/smile-identity-core/id_api.rb, line 113
def determine_sec_key
  @sec_key = SmileIdentityCore::Signature.new(@partner_id, @api_key).generate_sec_key(@timestamp)[:sec_key]
end
setup_requests() click to toggle source
# File lib/smile-identity-core/id_api.rb, line 75
def setup_requests
  url = "#{@url}/id_verification"

  request = Typhoeus::Request.new(
    url,
    method: 'POST',
    headers: {'Content-Type'=> "application/json"},
    body: configure_json
  )

  request.on_complete do |response|
    if response.success?
      return response.body
    elsif response.timed_out?
      raise "#{response.code.to_s}: #{response.body}"
    elsif response.code == 0
      # Could not get an http response, something's wrong.
      raise "#{response.code.to_s}: #{response.body}"
    else
      # Received a non-successful http response.
      raise "#{response.code.to_s}: #{response.body}"
    end
  end
  request.run
end
symbolize_keys(params) click to toggle source
# File lib/smile-identity-core/id_api.rb, line 71
def symbolize_keys params
  (params.is_a?(Hash)) ? Hash[params.map{ |k, v| [k.to_sym, v] }] : params
end