class Instant2fa::Client

Attributes

config[RW]

Public Class Methods

new(config=Instant2fa.config.dup, options={}) click to toggle source
# File lib/instant2fa/client.rb, line 13
def initialize(config=Instant2fa.config.dup, options={})
  @config = config

  Resources::Base.site = @config.api_base
  Resources::Base.connection(true) do |connection|
    # hack because it currently doesn't raise for 422
    connection.use Middleware::UnprocessableEntityStatus
    connection.use FaradayMiddleware::FollowRedirects
    connection.use Faraday::Request::BasicAuthentication, @config.access_key, @config.access_secret
  end
end

Public Instance Methods

confirm_verification(distinct_id, token, options = {}) click to toggle source
# File lib/instant2fa/client.rb, line 46
def confirm_verification(distinct_id, token, options = {})
  raise Errors::BadDistinctID, "distinct_id cannot be nil" unless distinct_id

  verification_response_result_set = Resources::VerificationResponseToken.find(token)
  verification_response = verification_response_result_set[0]

  if verification_response.distinct_id != distinct_id.to_s
    raise Errors::VerificationMismatch, "The distinctID passed back from the request didn't match the one passed into this function. Are you passing in the right value for distinctID?"
  end

  if verification_response.status != 'succeeded'
    raise Errors::VerificationFailed, "The verification did not pass. The status was: #{verification_response.status}."
  end

  true
end
create_settings(distinct_id, options = {}) click to toggle source
# File lib/instant2fa/client.rb, line 25
def create_settings(distinct_id, options = {})
  raise Errors::BadDistinctID, "distinct_id cannot be nil" unless distinct_id

  user_access_token = Resources::UserAccessToken.create(distinct_id: distinct_id.to_s)
  raise_if_errors(user_access_token)
  return user_access_token.hosted_page_url
end
create_verification(distinct_id, options = {}) click to toggle source
# File lib/instant2fa/client.rb, line 33
def create_verification(distinct_id, options = {})
  raise Errors::BadDistinctID, "distinct_id cannot be nil" unless distinct_id

  begin
    verification_request = Resources::VerificationRequest.create(distinct_id: distinct_id.to_s)
    raise_if_errors(verification_request)
  rescue JsonApiClient::Errors::UnprocessableEntity
    raise Errors::MFANotEnabled.new, "User has not enabled an MFA device on their account."
  end

  return verification_request.hosted_page_url
end

Protected Instance Methods

raise_if_errors(resource) click to toggle source
# File lib/instant2fa/client.rb, line 65
def raise_if_errors(resource)
  unless resource.errors.empty?
    raise Errors::ValidationError, "#{resource.class} could not be created due to a validation error."
  end
end
symoblize_keys(hash) click to toggle source
# File lib/instant2fa/client.rb, line 71
def symoblize_keys(hash)
  hash.inject({}) do |memo, (k, v)|
    memo[k.to_sym] = v.is_a?(Hash) ? symoblize_keys(v) : v
    memo
  end
end