Module: Plivo::Utils

Included in:
Plivo, Base::Resource, Base::ResourceInterface, Resources
Defined in:
lib/plivo/utils.rb

Overview

Utils module

Class Method Summary collapse

Class Method Details

.expected_type?(param_name, expected_types, param_value) ⇒ Boolean

Returns:

  • (Boolean)


67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/plivo/utils.rb', line 67

def expected_type?(param_name, expected_types, param_value)
  return true if expected_types.nil?
  param_value_class = param_value.class
  param_value_class = Integer if [Fixnum, Bignum].include? param_value_class
  if expected_types.is_a? Array
    return true if expected_types.include? param_value_class
    raise_invalid_request("#{param_name}: Expected one of #{expected_types}"\
      " but received #{param_value.class} instead")
  else
    return true if expected_types == param_value_class
    raise_invalid_request("#{param_name}: Expected a #{expected_types}"\
      " but received #{param_value.class} instead")
  end
end

.expected_value?(param_name, expected_values, param_value) ⇒ Boolean

Returns:

  • (Boolean)


82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/plivo/utils.rb', line 82

def expected_value?(param_name, expected_values, param_value)
  return true if expected_values.nil?
  if expected_values.is_a? Array
    return true if expected_values.include? param_value
    raise_invalid_request("#{param_name}: Expected one of #{expected_values}"\
      " but received '#{param_value}' instead")
  else
    return true if expected_values == param_value
    raise_invalid_request("#{param_name}: Expected '#{expected_values}'"\
      " but received '#{param_value}' instead")
  end
end

.raise_invalid_request(message = '') ⇒ Object



52
53
54
# File 'lib/plivo/utils.rb', line 52

def raise_invalid_request(message = '')
  raise Exceptions::InvalidRequestError, message
end

.valid_account?(account_id, raise_directly = false) ⇒ Boolean

Returns:

  • (Boolean)


10
11
12
# File 'lib/plivo/utils.rb', line 10

def valid_account?(, raise_directly = false)
  valid_subaccount?(, raise_directly) || valid_mainaccount?(, raise_directly)
end

.valid_mainaccount?(account_id, raise_directly = false) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/plivo/utils.rb', line 34

def valid_mainaccount?(, raise_directly = false)
  unless .is_a? String
    return false unless raise_directly
    raise_invalid_request('account_id must be a string')
  end

  if .length != 20
    return false unless raise_directly
    raise_invalid_request('account_id should be of length 20')
  end

  if [0..1] != 'MA'
    return false unless raise_directly
    raise_invalid_request("account_id should start with 'SA'")
  end
  true
end

.valid_param?(param_name, param_value, expected_types = nil, mandatory = false, expected_values = nil) ⇒ Boolean

Returns:

  • (Boolean)


56
57
58
59
60
61
62
63
64
65
# File 'lib/plivo/utils.rb', line 56

def valid_param?(param_name, param_value, expected_types = nil, mandatory = false, expected_values = nil)
  if mandatory && param_value.nil?
    raise_invalid_request("#{param_name} is a required parameter")
  end

  return true if param_value.nil?

  return expected_type?(param_name, expected_types, param_value) unless expected_values
  expected_value?(param_name, expected_values, param_value)
end

.valid_signature?(uri, nonce, signature, auth_token) ⇒ Boolean

Parameters:

  • uri (String)
  • nonce (String)
  • signature (String)
  • auth_token (String)

Returns:

  • (Boolean)


99
100
101
102
103
104
105
106
# File 'lib/plivo/utils.rb', line 99

def valid_signature?(uri, nonce, signature, auth_token)
  parsed_uri = URI.parse(uri)
  uri_details = { host: parsed_uri.host, path: parsed_uri.path }
  uri_builder_module = parsed_uri.scheme == 'https' ? URI::HTTPS : URI::HTTP
  data_to_sign = uri_builder_module.build(uri_details).to_s + nonce
  sha256_digest = OpenSSL::Digest.new('sha256')
  Base64.encode64(OpenSSL::HMAC.digest(sha256_digest, auth_token, data_to_sign)).strip() == signature
end

.valid_subaccount?(account_id, raise_directly = false) ⇒ Boolean

Parameters:

  • account_id (String)
  • raise_directly (Boolean) (defaults to: false)

Returns:

  • (Boolean)


16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/plivo/utils.rb', line 16

def valid_subaccount?(, raise_directly = false)
  unless .is_a? String
    return false unless raise_directly
    raise_invalid_request('subaccount_id must be a string')
  end

  if .length != 20
    return false unless raise_directly
    raise_invalid_request('subaccount_id should be of length 20')
  end

  if [0..1] != 'SA'
    return false unless raise_directly
    raise_invalid_request("subaccount_id should start with 'SA'")
  end
  true
end