sageone_api_request_signer 1.0.1 → 1.1.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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7ee694bdf80abcf67c8ed334cf38760cc3bf67ed
|
4
|
+
data.tar.gz: 1781b4db7c262a996660a22a5bcd29a52ade7f8f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56a0e39d35f0470e9c4e9cdc358a62cd072252e0d49f1570f4ed883b3a8603480bc5a810f616a32bbb24a5cccd4e91358e7d9d5b90cc38364d1629d5dbc2cea5
|
7
|
+
data.tar.gz: a3e49db37f115b116eca1a947ffb2c3ce6c6bc4975fb0edc53a0c11f07c101f50b8780b99ef5e05c805181cde932519691f3cb1c9195b150f45f8965cd4f0c26
|
@@ -1,4 +1,6 @@
|
|
1
1
|
require "sageone_api_request_signer/version"
|
2
|
+
require "active_support"
|
3
|
+
require "active_support/core_ext"
|
2
4
|
require "base64"
|
3
5
|
|
4
6
|
# "Sign" an Sageone API request call following the steps detailed here:
|
@@ -41,8 +43,7 @@ class SageoneApiRequestSigner
|
|
41
43
|
|
42
44
|
def parameter_string
|
43
45
|
@parameter_string ||= (
|
44
|
-
|
45
|
-
key_value_pair.map{|pair| pair.join('=') }.join('&')
|
46
|
+
url_params.merge(body_params).sort.to_h.to_query.gsub('+','%20')
|
46
47
|
)
|
47
48
|
end
|
48
49
|
|
@@ -80,10 +81,4 @@ class SageoneApiRequestSigner
|
|
80
81
|
def percent_encode(str)
|
81
82
|
URI.escape(str.to_s, /[^0-9A-Za-z\-._~]/)
|
82
83
|
end
|
83
|
-
|
84
|
-
def percent_encode_pair(pair)
|
85
|
-
pair.map! do |k,v|
|
86
|
-
[percent_encode(k), percent_encode(v)]
|
87
|
-
end
|
88
|
-
end
|
89
84
|
end
|
@@ -18,6 +18,8 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.add_dependency "activesupport"
|
22
|
+
|
21
23
|
spec.add_development_dependency "bundler", "~> 1.7"
|
22
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
25
|
spec.add_development_dependency 'fudge'
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require 'rest_client'
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
RSpec.describe 'testing complex body params' do
|
5
|
+
subject do
|
6
|
+
SageoneApiRequestSigner.new({
|
7
|
+
request_method: 'post',
|
8
|
+
url: 'https://api.sageone.com/test/accounts/v1/contacts',
|
9
|
+
signing_secret: 'TestSigningSecret',
|
10
|
+
access_token: 'TestToken',
|
11
|
+
})
|
12
|
+
end
|
13
|
+
|
14
|
+
let(:headers) do
|
15
|
+
subject.request_headers.merge({
|
16
|
+
'Accept' => '*/*',
|
17
|
+
'Content-Type' => 'application/x-www-form-urlencoded',
|
18
|
+
'User-Agent' => 'NPSS'
|
19
|
+
})
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'with multi-level hashes' do
|
23
|
+
subject.body_params = {
|
24
|
+
first: 'level',
|
25
|
+
second: {
|
26
|
+
multi: 'level',
|
27
|
+
third: {
|
28
|
+
level: 'the last one'
|
29
|
+
},
|
30
|
+
ok: 'this is enough'
|
31
|
+
}
|
32
|
+
}
|
33
|
+
|
34
|
+
check_signature!
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'with arrays' do
|
38
|
+
subject.body_params = {
|
39
|
+
simple: 'param',
|
40
|
+
complex: [
|
41
|
+
{one:11, two:12, three:13},
|
42
|
+
{one:21, two:22, three:23},
|
43
|
+
]
|
44
|
+
}
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'hardcore one' do
|
48
|
+
subject.body_params = {
|
49
|
+
hardcore: [
|
50
|
+
{one:11, two:12, three:13},
|
51
|
+
{four:4, two:22, three:23},
|
52
|
+
{
|
53
|
+
fuck_all: {
|
54
|
+
i_am: 'really nested',
|
55
|
+
no: {
|
56
|
+
i_am: 'damm more'
|
57
|
+
}
|
58
|
+
}
|
59
|
+
}
|
60
|
+
]
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
describe
|
65
|
+
|
66
|
+
def check_signature!
|
67
|
+
RestClient.post subject.url, subject.body_params, headers
|
68
|
+
|
69
|
+
rescue => e
|
70
|
+
raise e unless e.respond_to? :response
|
71
|
+
|
72
|
+
response = JSON.parse(e.response.to_s)
|
73
|
+
|
74
|
+
expect(subject.nonce).to eql(response['nonce'])
|
75
|
+
expect(subject.request_method).to eql(response['request_method'])
|
76
|
+
expect(subject.access_token).to eql(response['token'])
|
77
|
+
expect(subject.base_url).to eql(response['base_url'])
|
78
|
+
expect(subject.parameter_string).to eql(response['parameter_string'])
|
79
|
+
expect(subject.signature_base_string).to eql(response['signature_base_string'])
|
80
|
+
expect(subject.signing_secret).to eql(response['signing_secret'])
|
81
|
+
end
|
82
|
+
end
|
@@ -104,6 +104,12 @@ RSpec.describe SageoneApiRequestSigner do
|
|
104
104
|
|
105
105
|
expect(subject.parameter_string).to eql 'aaa=1&bee=2&dee=3&zee=4'
|
106
106
|
end
|
107
|
+
|
108
|
+
it 'cant have +, should have %20' do
|
109
|
+
subject.url = 'https://api.sageone.com/accounts/v1/contacts?in_the_url=i+cant+have+pluses'
|
110
|
+
subject.body_params = {'in_the_body_param' => 'cant have pluses here too'}
|
111
|
+
expect(subject.parameter_string).to eql 'in_the_body_param=cant%20have%20pluses%20here%20too&in_the_url=i%20cant%20have%20pluses'
|
112
|
+
end
|
107
113
|
end
|
108
114
|
|
109
115
|
describe '#signature_base_string' do
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sageone_api_request_signer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rudiney Altair Franceschi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -183,6 +197,7 @@ files:
|
|
183
197
|
- lib/sageone_api_request_signer/version.rb
|
184
198
|
- sageone_api_request_signer.gemspec
|
185
199
|
- spec/integration/check_signature_data_spec.rb
|
200
|
+
- spec/integration/complex_body_params_spec.rb
|
186
201
|
- spec/sageone_api_request_signer_spec.rb
|
187
202
|
- spec/spec_helper.rb
|
188
203
|
homepage: ''
|
@@ -205,12 +220,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
205
220
|
version: '0'
|
206
221
|
requirements: []
|
207
222
|
rubyforge_project:
|
208
|
-
rubygems_version: 2.
|
223
|
+
rubygems_version: 2.3.0
|
209
224
|
signing_key:
|
210
225
|
specification_version: 4
|
211
226
|
summary: Sign requests call to SageOne API.
|
212
227
|
test_files:
|
213
228
|
- spec/integration/check_signature_data_spec.rb
|
229
|
+
- spec/integration/complex_body_params_spec.rb
|
214
230
|
- spec/sageone_api_request_signer_spec.rb
|
215
231
|
- spec/spec_helper.rb
|
216
232
|
has_rdoc:
|