plivo 4.6.1 → 4.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4d52c001b00cc47d25bea87d44a4ce09ae8f922f
4
- data.tar.gz: 7938d6bd6d1d1d1612dd455132de25006c3fd30f
3
+ metadata.gz: e900720171e4df2094d35fb616d9ddc8643caad9
4
+ data.tar.gz: 5d13064ff1a724d757015c2460acaf427b760d85
5
5
  SHA512:
6
- metadata.gz: f886ee8aa69fe4228c300a4476082ba0c05e4e179972b33768d1a73f9ece04b5e071d3f6005510c17e92335e8c9bec97929e22a0253e8fe50bbecac6b166a096
7
- data.tar.gz: c3f02372894c4de3be0617b7c9727f54a9f681722c86e164212aba1585850d2f3568f9eca75ef038430e2d3ef186d4eea30b5453cc1700d8618de0c2aa7d05d8
6
+ metadata.gz: '0365769457f55e14b67bea6ba143ae7383f3b7da0a1c476237af5e7b2afc14d80c6e1686471b4bda4e41ad07fc0dfc72f2b977df8752977b0db463482c09c223'
7
+ data.tar.gz: 289321daf7b17b46954d96a605561f5d7869c449287fe9f7b438af6206fc02134be0a92d09c6cc88fc68467f71a9eb7395d038fc58149d07d8d5a2493a1e0def
data/CHANGELOG.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Change Log
2
2
 
3
+ ## [4.7.0](https://github.com/plivo/plivo-ruby/releases/tag/v4.7.0) (2020-04-29)
4
+ - Add V3 signature helper functions.
5
+
3
6
  ## [4.6.1](https://github.com/plivo/plivo-ruby/releases/tag/v4.6.1) (2020-04-02)
4
7
  - Add nil check for API requests.
5
8
 
data/README.md CHANGED
@@ -8,7 +8,7 @@ The Plivo Ruby SDK makes it simpler to integrate communications into your Ruby a
8
8
  Add this line to your application's Gemfile:
9
9
 
10
10
  ```ruby
11
- gem 'plivo', '>= 4.6.1'
11
+ gem 'plivo', '>= 4.7.0'
12
12
  ```
13
13
 
14
14
  And then execute:
data/lib/plivo/utils.rb CHANGED
@@ -101,11 +101,83 @@ module Plivo
101
101
  # @param [String] auth_token
102
102
  def valid_signature?(uri, nonce, signature, auth_token)
103
103
  parsed_uri = URI.parse(uri)
104
- uri_details = { host: parsed_uri.host, path: parsed_uri.path }
104
+ uri_details = {host: parsed_uri.host, path: parsed_uri.path}
105
105
  uri_builder_module = parsed_uri.scheme == 'https' ? URI::HTTPS : URI::HTTP
106
106
  data_to_sign = uri_builder_module.build(uri_details).to_s + nonce
107
107
  sha256_digest = OpenSSL::Digest.new('sha256')
108
108
  Base64.encode64(OpenSSL::HMAC.digest(sha256_digest, auth_token, data_to_sign)).strip() == signature
109
109
  end
110
+
111
+ def generate_url?(uri, params, method)
112
+ uri.sub!("+", "%20")
113
+ parsed_uri = URI.parse(uri)
114
+ uri = parsed_uri.scheme + "://" + parsed_uri.host + parsed_uri.path
115
+ if params.to_s.length > 0 || parsed_uri.query.to_s.length > 0
116
+ uri += "?"
117
+ end
118
+ if parsed_uri.query.to_s.length > 0
119
+ parsed_uri_query = URI.decode(parsed_uri.query)
120
+ if method == "GET"
121
+ queryParamMap = getMapFromQueryString?(parsed_uri_query)
122
+ params.keys.sort.each { |key|
123
+ queryParamMap[key] = params[key]
124
+ }
125
+ uri += GetSortedQueryParamString?(queryParamMap, true)
126
+ else
127
+ uri += GetSortedQueryParamString?(getMapFromQueryString?(parsed_uri_query), true) + "." + GetSortedQueryParamString?(params, false)
128
+ uri = uri.chomp(".")
129
+ end
130
+ else
131
+ if method == "GET"
132
+ uri += GetSortedQueryParamString?(params, true)
133
+ else
134
+ uri += GetSortedQueryParamString?(params, false)
135
+ end
136
+ end
137
+ return uri
138
+ end
139
+
140
+ def getMapFromQueryString?(query)
141
+ mp = Hash.new
142
+ if query.to_s.length == 0
143
+ return mp
144
+ end
145
+ keyValuePairs = query.split("&")
146
+ keyValuePairs.each { |key|
147
+ params = key.split("=", 2)
148
+ if params.length == 2
149
+ mp[params[0]] = params[1]
150
+ end
151
+ }
152
+ return mp
153
+ end
154
+
155
+ def GetSortedQueryParamString?(params, queryParams)
156
+ url = ""
157
+ if queryParams
158
+ params.keys.sort.each { |key|
159
+ url += key + "=" + params[key] + "&"
160
+ }
161
+ url = url.chomp("&")
162
+ else
163
+ params.keys.sort.each { |key|
164
+ url += key.to_s + params[key].to_s
165
+ }
166
+ end
167
+ return url
168
+ end
169
+
170
+
171
+ def compute_signatureV3?(url, auth_token, nonce)
172
+ sha256_digest = OpenSSL::Digest.new('sha256')
173
+ new_url = url + "." + nonce
174
+ return Base64.encode64(OpenSSL::HMAC.digest(sha256_digest, auth_token, new_url)).strip()
175
+ end
176
+
177
+ def valid_signatureV3?(uri, nonce, signature, auth_token, method, params={})
178
+ new_url = generate_url?(uri, params, method)
179
+ generated_signature = compute_signatureV3?(new_url, auth_token, nonce)
180
+ return signature.split(",").include? generated_signature
181
+ end
110
182
  end
111
183
  end
data/lib/plivo/version.rb CHANGED
@@ -1,4 +1,3 @@
1
1
  module Plivo
2
- VERSION = '4.6.1'.freeze
3
-
2
+ VERSION = '4.7.0'.freeze
4
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: plivo
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.6.1
4
+ version: 4.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Plivo SDKs Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-04-02 00:00:00.000000000 Z
11
+ date: 2020-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday