plivo 4.6.1 → 4.7.0

Sign up to get free protection for your applications and to get access to all the features.
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