Module: Plivo::Utils
- Included in:
- Plivo, Base::Resource, Base::ResourceInterface, Resources
- Defined in:
- lib/plivo/utils.rb
Overview
Utils module
Constant Summary collapse
- TYPE_WHITELIST =
[Integer]
Class Method Summary collapse
- .expected_type?(param_name, expected_types, param_value) ⇒ Boolean
- .expected_value?(param_name, expected_values, param_value) ⇒ Boolean
- .raise_invalid_request(message = '') ⇒ Object
- .valid_account?(account_id, raise_directly = false) ⇒ Boolean
- .valid_mainaccount?(account_id, raise_directly = false) ⇒ Boolean
- .valid_param?(param_name, param_value, expected_types = nil, mandatory = false, expected_values = nil) ⇒ Boolean
- .valid_signature?(uri, nonce, signature, auth_token) ⇒ Boolean
- .valid_subaccount?(account_id, raise_directly = false) ⇒ Boolean
Class Method Details
.expected_type?(param_name, expected_types, param_value) ⇒ Boolean
70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/plivo/utils.rb', line 70 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 TYPE_WHITELIST.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
85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/plivo/utils.rb', line 85 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
55 56 57 |
# File 'lib/plivo/utils.rb', line 55 def raise_invalid_request( = '') raise Exceptions::InvalidRequestError, end |
.valid_account?(account_id, raise_directly = false) ⇒ Boolean
13 14 15 |
# File 'lib/plivo/utils.rb', line 13 def valid_account?(account_id, raise_directly = false) valid_subaccount?(account_id, raise_directly) || valid_mainaccount?(account_id, raise_directly) end |
.valid_mainaccount?(account_id, raise_directly = false) ⇒ Boolean
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/plivo/utils.rb', line 37 def valid_mainaccount?(account_id, raise_directly = false) unless account_id.is_a? String return false unless raise_directly raise_invalid_request('account_id must be a string') end if account_id.length != 20 return false unless raise_directly raise_invalid_request('account_id should be of length 20') end if account_id[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
59 60 61 62 63 64 65 66 67 68 |
# File 'lib/plivo/utils.rb', line 59 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
102 103 104 105 106 107 108 109 |
# File 'lib/plivo/utils.rb', line 102 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
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
# File 'lib/plivo/utils.rb', line 19 def valid_subaccount?(account_id, raise_directly = false) unless account_id.is_a? String return false unless raise_directly raise_invalid_request('subaccount_id must be a string') end if account_id.length != 20 return false unless raise_directly raise_invalid_request('subaccount_id should be of length 20') end if account_id[0..1] != 'SA' return false unless raise_directly raise_invalid_request("subaccount_id should start with 'SA'") end true end |