class Authy::API

Constants

MAX_TOKEN_SIZE
MIN_TOKEN_SIZE

Public Class Methods

delete_user(params) click to toggle source

options: :id user id

# File lib/authy/api.rb, line 106
def self.delete_user(params)
  user_id = params.delete(:id) || params.delete("id")

  post_request("protected/json/users/delete/:user_id", params.merge({"user_id" => user_id}))
end
register_user(attributes) click to toggle source
# File lib/authy/api.rb, line 13
def self.register_user(attributes)
  api_key = attributes.delete(:api_key) || Authy.api_key
  send_install_link_via_sms = attributes.delete(:send_install_link_via_sms) { true }
  params = {
    :user => attributes,
    :send_install_link_via_sms => send_install_link_via_sms
  }

  url = "#{Authy.api_uri}/protected/json/users/new"
  response = http_client.post(url, :body => escape_query(params), :header => default_header(params: { api_key: api_key }))

  Authy::User.new(response)
end
request_email(params) click to toggle source

options: :id user id

# File lib/authy/api.rb, line 89
def self.request_email(params)
  user_id = params.delete(:id) || params.delete('id')

  post_request("protected/json/email/:user_id", params.merge({"user_id" => user_id}))
end
request_phone_call(params) click to toggle source

options: :id user id :force force phone_call

# File lib/authy/api.rb, line 81
def self.request_phone_call(params)
  user_id = params.delete(:id) || params.delete("id")

  get_request("protected/json/call/:user_id", params.merge({"user_id" => user_id}))
end
request_qr_code(params) click to toggle source

options: :id user id :qr_size qr size :qr_label context for qr code

# File lib/authy/api.rb, line 63
def self.request_qr_code(params)
  user_id = params.delete(:id) || params.delete("id")
  qr_size = params.delete(:qr_size) || params.delete("qr_size") || 300
  qr_label = params.delete(:qr_label) || params.delete("qr_label") || ""

  return invalid_response("User id is invalid") unless is_digit?(user_id)
  return invalid_response("Qr image size is invalid") unless is_digit?(qr_size)

  response = post_request("protected/json/users/:user_id/secret", params.merge({
    "user_id" => user_id,
    "qr_size" => qr_size,
    "label" => qr_label
  }))
end
request_sms(params) click to toggle source

options: :id user id :force force sms

# File lib/authy/api.rb, line 53
def self.request_sms(params)
  user_id = params.delete(:id) || params.delete("id")

  get_request("protected/json/sms/:user_id", params.merge({"user_id" => user_id}))
end
update_user(params) click to toggle source

options: :id user id :email user's new email

# File lib/authy/api.rb, line 98
def self.update_user(params)
  user_id = params.delete(:id) || params.delete('id')

  post_request("protected/json/users/:user_id/update", params.merge({"user_id" => user_id}))
end
user_status(params) click to toggle source

options: :id user id

# File lib/authy/api.rb, line 114
def self.user_status(params)
  user_id = params.delete(:id) || params.delete("id")
  get_request("protected/json/users/:user_id/status", params.merge({"user_id" => user_id}))
end
verify(params) click to toggle source

options: :id user id :token authy token entered by the user :force (true|false) force to check even if the cellphone is not confirmed

# File lib/authy/api.rb, line 32
def self.verify(params)
  token = params.delete(:token) || params.delete("token")
  user_id = params.delete(:id) || params.delete("id")

  return invalid_response("Token format is invalid") unless token_is_safe?(token)
  return invalid_response("User id is invalid") unless is_digit?(user_id)

  params[:force] = true if params[:force].nil? && params["force"].nil?

  response = get_request("protected/json/verify/:token/:user_id", params.merge({
    "token" => token,
    "user_id" => user_id
  }))

  return verify_response(response) if response.ok?
  return response
end

Private Class Methods

build_error_response(error = "blank uri param found") click to toggle source
# File lib/authy/api.rb, line 152
def self.build_error_response(error = "blank uri param found")
  OpenStruct.new({
    "status" => 400,
    "body" => {
      "success" => false,
      "message" => error,
      "errors" => {
        "message" => error,
      },
    }.to_json
  })
end
default_header(params: {}) click to toggle source
# File lib/authy/api.rb, line 184
def self.default_header(params: {})
  api_key = params.delete(:api_key) || params.delete("api_key")

  header = {
    "X-Authy-API-Key" => api_key || Authy.api_key,
    "User-Agent" => Authy.user_agent
  }

  return header
end
get_request(uri, params = {}) click to toggle source
# File lib/authy/api.rb, line 137
def self.get_request(uri, params = {})
  header_ = default_header(params: params)

  uri_params = keys_to_verify(uri, params)
  state, error = validate_for_url(uri_params, params)
  response = if state
      url = "#{Authy.api_uri}/#{eval_uri(uri, params)}"
      params = clean_uri_params(uri_params, params)
      http_client.get(url, params, header_)
    else
      build_error_response(error)
    end
  Authy::Response.new(response)
end
invalid_response(str = "Invalid resonse") click to toggle source
# File lib/authy/api.rb, line 173
def self.invalid_response(str = "Invalid resonse")
  response = build_error_response(str)
  return Authy::Response.new(response)
end
is_digit?(str) click to toggle source
# File lib/authy/api.rb, line 169
def self.is_digit?(str)
  !!(/^\d+$/.match str.to_s)
end
post_request(uri, params = {}) click to toggle source
# File lib/authy/api.rb, line 121
def self.post_request(uri, params = {})
  header_ = default_header(params: params)

  uri_params = keys_to_verify(uri, params)
  state, error = validate_for_url(uri_params, params)

  response = if state
      url = "#{Authy.api_uri}/#{eval_uri(uri, params)}"
      params = clean_uri_params(uri_params, params)
      http_client.post(url, :body => escape_query(params), header: header_)
    else
      build_error_response(error)
    end
  Authy::Response.new(response)
end
token_is_safe?(token) click to toggle source
# File lib/authy/api.rb, line 165
def self.token_is_safe?(token)
  !!(/\A\d{#{MIN_TOKEN_SIZE},#{MAX_TOKEN_SIZE}}\Z/.match token)
end
verify_response(response) click to toggle source
# File lib/authy/api.rb, line 178
def self.verify_response(response)
  return response if response["token"] == "is valid"
  response = build_error_response("Token is invalid")
  return Authy::Response.new(response)
end