class Phaxio::Resources::Callback

Provides utilities for working with callbacks. @see www.phaxio.com/docs/api/v2/faxes/send_callback @see www.phaxio.com/docs/api/v2/faxes/receive_callback

Constants

DIGEST

Public Class Methods

valid_signature?(signature, url, params, files = []) click to toggle source

Determines whether or not the passed signature is valid for the given url, params, and files. @param signature [String]

The signature received from Phaxio.

@param url [String]

The callback URL used in this request.

@param params [Hash]

The parameters received with the callback, excluding files.

@param files [Array<File>]

The files received with the callback, if any.

@return [true, false] @raise [Phaxio::Error::PhaxioError] @see www.phaxio.com/docs/security/callbacks

# File lib/phaxio/resources/callback.rb, line 24
def valid_signature? signature, url, params, files = []
  check_signature = generate_check_signature url, params, files
  check_signature == signature
end

Private Class Methods

callback_token() click to toggle source
# File lib/phaxio/resources/callback.rb, line 38
def callback_token
  Phaxio.callback_token or raise(Error::PhaxioError, 'No callback token has been set')
end
files_to_array(files) click to toggle source
# File lib/phaxio/resources/callback.rb, line 55
def files_to_array(files)
  files.is_a?(Array) ? files : [files]
end
generate_check_signature(url, params, files = []) click to toggle source
# File lib/phaxio/resources/callback.rb, line 31
def generate_check_signature url, params, files = []
  params_string = generate_params_string(params)
  files_string = generate_files_string(files)
  callback_data = "#{url}#{params_string}#{files_string}"
  OpenSSL::HMAC.hexdigest(DIGEST, callback_token, callback_data)
end
generate_file_string(file) click to toggle source
# File lib/phaxio/resources/callback.rb, line 59
def generate_file_string(file)
  file[:name] + DIGEST.hexdigest(file[:tempfile].read)
end
generate_files_string(files) click to toggle source
# File lib/phaxio/resources/callback.rb, line 48
def generate_files_string(files)
  files_array = files_to_array(files).reject(&:nil?)
  sorted_files = files_array.sort_by { |file| file[:name] }
  files_strings = sorted_files.map { |file| generate_file_string(file) }
  files_strings.join
end
generate_params_string(params) click to toggle source
# File lib/phaxio/resources/callback.rb, line 42
def generate_params_string(params)
  sorted_params = params.sort_by { |key, _value| key }
  params_strings = sorted_params.map { |key, value| "#{key}#{value}" }
  params_strings.join
end