class SmartId::Api::Request

Constants

DEMO_BASE_URL
DEMO_SSL_KEY
PRODUCTION_BASE_URL
PRODUCTION_SSL_KEY
PROD_KEY_EXPIRY

Public Class Methods

execute(method:, uri:, params:) click to toggle source
# File lib/smart_id/api/request.rb, line 19
def self.execute(method:, uri:, params:)
  begin
    api_request = new(method, uri, params)
    api_request.execute
  rescue RestClient::RequestFailed => e
    case e.http_code
    when 471
      raise SmartId::IncorrectAccountLevelError
    when 403
      raise SmartId::InvalidPermissionsError
    when 404
      raise SmartId::UserNotFoundError
    when 480
      raise SmartId::OutdatedApiError
    when 580
      raise SmartId::SystemUnderMaintenanceError
    else
      raise SmartId::ConnectionError.new(e)
    end
  rescue RestClient::SSLCertificateNotVerified
    raise SmartId::SSLCertificateNotVerified
  end
end
new(method, uri, params) click to toggle source
# File lib/smart_id/api/request.rb, line 12
def initialize(method, uri, params)
  @method = method
  @url = self.class.const_get("#{SmartId.environment}_BASE_URL") + uri
  @params = params
  @logger = Logger.new(STDOUT)
end

Public Instance Methods

execute() click to toggle source
# File lib/smart_id/api/request.rb, line 49
def execute
  maybe_warn_of_ssl_key_expiry

  if @method.to_sym == :post
    attrs = post_request_attrs
  else
    attrs = get_request_attrs
  end 

  request = RestClient::Request.execute(**attrs)
end
maybe_warn_of_ssl_key_expiry() click to toggle source
# File lib/smart_id/api/request.rb, line 43
def maybe_warn_of_ssl_key_expiry
  if (PROD_KEY_EXPIRY - Date.today).to_i < 60
    @logger.warn("[Smart-id-Ruby] SSL KEY for security checks will soon expire, please update to newer version of this gem")
  end
end

Private Instance Methods

default_attrs() click to toggle source
# File lib/smart_id/api/request.rb, line 63
def default_attrs
  {
    method: @method,
    url: @url,
    headers: { content_type: :json, accept: :json },
    timeout: SmartId.poller_timeout_seconds + 1,
    ssl_verify_callback: lambda do |_, cert_store|
      provided_pub_key = cert_store.chain[0].public_key
      saved_key = self.class.const_get("#{SmartId.environment}_SSL_KEY")
      Digest::SHA256.digest(provided_pub_key.to_der) == Base64.decode64(saved_key)
    end
  }
end
get_request_attrs() click to toggle source
# File lib/smart_id/api/request.rb, line 77
def get_request_attrs
  default_attrs.merge(headers: {
    **default_attrs[:headers],
    params: @params 
  })
end
post_request_attrs() click to toggle source
# File lib/smart_id/api/request.rb, line 84
def post_request_attrs
  default_attrs.merge(payload: JSON.generate(@params))
end