class PassByME2FAClient

Constants

VERSION

Public Class Methods

new(http_options) click to toggle source
# File lib/passbyme2fa-client.rb, line 35
def initialize(http_options)
  if !http_options.include? :key or !http_options.include? :cert
    raise ArgumentError.new("SSL key or certificate is missing!")
  end
  url = (http_options.include?(:address) ? http_options[:address] : "auth-sp.passbyme.com")
  http_options.delete :address
  @http = Net::HTTP.start(url, http_options.merge({
    :use_ssl => true,
    :verify_mode => OpenSSL::SSL::VERIFY_PEER,
    :ca_file => File.expand_path("../passbyme2fa-client/truststore.pem", __FILE__),
  }))
end

Public Instance Methods

cancel_message(message_id) click to toggle source
# File lib/passbyme2fa-client.rb, line 86
def cancel_message(message_id)
  handle_existing_message(message_id, Net::HTTP::Delete)
end
send_message(params) click to toggle source
# File lib/passbyme2fa-client.rb, line 48
def send_message(params)
  recipients = params[:recipients]
  subject = params[:subject]
  body = params[:body]
  availability = params[:availability]
  type = params[:type]
  callbackUrl = params[:callbackUrl]

  if recipients.nil? or recipients.length == 0
    raise ArgumentError.new("Missing recipients!")
  end

  availability = availability.to_i
  if availability < 1
    raise ArgumentError.new("Availability must be an integer greater than 0.")
  end

  raise ArgumentError.new("Invalid message type #{type}.") unless MessageType.constants.index { |ct|
    MessageType.const_get(ct) == type
  }

  req = Net::HTTP::Post.new("/frontend/messages", "Content-Type" => "application/json")
  req.body = {
    :recipients => recipients,
    :subject => subject,
    :body => body,
    :availability => availability,
    :type => type,
    :callbackUrl => callbackUrl
  }.to_json

  SessionInfo.new(JSON.parse(do_https(req)), self)
end
track_message(message_id) click to toggle source
# File lib/passbyme2fa-client.rb, line 82
def track_message(message_id)
  handle_existing_message(message_id, Net::HTTP::Get)
end

Private Instance Methods

do_https(req) click to toggle source
# File lib/passbyme2fa-client.rb, line 118
def do_https(req)
  req.add_field("X-PBM-API-VERSION", "1")

  res = @http.request(req)
  raise HTTPError.new(res) unless res.body

  if res.code !~ /\A2..\z/
    if res.code == "420"
      raise PassByMEError.new(JSON.parse(res.body))
    else
      raise HTTPError.new(res)
    end
  end

  res.body
end
handle_existing_message(message_id, net_http_class) click to toggle source
# File lib/passbyme2fa-client.rb, line 92
def handle_existing_message(message_id, net_http_class)
  message_handle = nil
  if message_id.is_a? Hash
    message_id = message_id[:messageId]
  end
  if message_id.is_a? SessionInfo
    message_handle = message_id
    message_id = message_id.message_id
  end
  if message_id.nil? or message_id == ""
    raise ArgumentError.new("Empty message id!")
  end

  req = net_http_class.new("/frontend/messages/#{message_id}")

  json = JSON.parse(do_https(req))

  if message_handle.nil?
    message_handle = SessionInfo.new(json, self)
  else
    message_handle.re_initialize(json)
  end

  message_handle
end