roqua-core-api 0.2.1 → 0.2.2
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 +4 -4
- data/ChangeLog.md +6 -0
- data/lib/roqua/core_api/sessions/auth_session.rb +23 -21
- data/lib/roqua/core_api/sessions/hmac_auth_request.rb +52 -0
- data/lib/roqua/core_api/sessions/hmac_auth_session.rb +25 -0
- data/lib/roqua/core_api/sessions/oauth_session.rb +1 -1
- data/lib/roqua/core_api/sessions/token_session.rb +1 -1
- data/lib/roqua/core_api/sessions.rb +6 -0
- data/lib/roqua/core_api/sso_login.rb +28 -0
- data/lib/roqua/core_api/version.rb +1 -1
- data/lib/roqua/core_api.rb +1 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a72749c7f2600d3b71d258d719abc54d8e81f6ca
|
4
|
+
data.tar.gz: cd987f3e2b2784a18f901c09bcbe624c69f97943
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6ecc43438656a7fd8336060b40f27ce0a3325a6382edc494ad465aa90f82a126077d1c3c838b32baebbafa7feab364beee5e063320fbbbad122937b46d16087f
|
7
|
+
data.tar.gz: d23c4e9df670e6e818e492f97ef7e412f1814fe1c7e5f6d49fa414e716f87db6b5bb878c86098558c1bf146ab3a7bf9e75e30d35428ba101c36115c7fc571c5c
|
data/ChangeLog.md
CHANGED
@@ -13,40 +13,28 @@ module Roqua
|
|
13
13
|
|
14
14
|
def get(path, timeout: default_timeout, **params)
|
15
15
|
perform_request_or_fail do
|
16
|
-
HTTParty.get
|
17
|
-
|
18
|
-
query: params,
|
19
|
-
basic_auth: basic_auth,
|
20
|
-
timeout: timeout)
|
16
|
+
HTTParty.get full_url_for(path),
|
17
|
+
query_string_options('GET', path, params, timeout: timeout)
|
21
18
|
end
|
22
19
|
end
|
23
20
|
|
24
21
|
def post(path, timeout: default_timeout, **params)
|
25
22
|
perform_request_or_fail do
|
26
|
-
HTTParty.post
|
27
|
-
|
28
|
-
body: params.to_json,
|
29
|
-
basic_auth: basic_auth,
|
30
|
-
timeout: timeout)
|
23
|
+
HTTParty.post full_url_for(path),
|
24
|
+
json_body_options('POST', path, params, timeout: timeout)
|
31
25
|
end
|
32
26
|
end
|
33
27
|
|
34
28
|
def patch(path, timeout: default_timeout, **params)
|
35
29
|
perform_request_or_fail do
|
36
|
-
HTTParty.patch
|
37
|
-
|
38
|
-
body: params.to_json,
|
39
|
-
basic_auth: basic_auth,
|
40
|
-
timeout: timeout)
|
30
|
+
HTTParty.patch full_url_for(path),
|
31
|
+
json_body_options('PATCH', path, params, timeout: timeout)
|
41
32
|
end
|
42
33
|
end
|
43
34
|
|
44
35
|
def delete(path, timeout: default_timeout, **params)
|
45
|
-
HTTParty.delete
|
46
|
-
|
47
|
-
query: params,
|
48
|
-
basic_auth: basic_auth,
|
49
|
-
timeout: timeout)
|
36
|
+
HTTParty.delete full_url_for(path),
|
37
|
+
query_string_options('DELETE', path, params, timeout: timeout)
|
50
38
|
end
|
51
39
|
|
52
40
|
private
|
@@ -63,6 +51,20 @@ module Roqua
|
|
63
51
|
end
|
64
52
|
end
|
65
53
|
|
54
|
+
def json_body_options(request_method, path, params, timeout:)
|
55
|
+
{headers: headers(request_method, path, params).merge('Content-Type' => 'application/json'),
|
56
|
+
body: params.to_json,
|
57
|
+
basic_auth: basic_auth,
|
58
|
+
timeout: timeout}
|
59
|
+
end
|
60
|
+
|
61
|
+
def query_string_options(request_method, path, params, timeout:)
|
62
|
+
{headers: headers(request_method, path, params),
|
63
|
+
query: params,
|
64
|
+
basic_auth: basic_auth,
|
65
|
+
timeout: timeout}
|
66
|
+
end
|
67
|
+
|
66
68
|
def full_url_for(path)
|
67
69
|
core_site + api_base + path + '.json'
|
68
70
|
end
|
@@ -71,7 +73,7 @@ module Roqua
|
|
71
73
|
'/api/v1'
|
72
74
|
end
|
73
75
|
|
74
|
-
def headers
|
76
|
+
def headers(_request_method, _path, _params)
|
75
77
|
{}
|
76
78
|
end
|
77
79
|
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Roqua
|
2
|
+
module CoreApi
|
3
|
+
module Sessions
|
4
|
+
# Make a single hmac signed request.
|
5
|
+
# HmacAuthRequest.new(consumer_key: 'mykey', consumer_secret: '...')
|
6
|
+
# HmacAuthRequest.new(consumer_key: 'mykey', hmac: '...', nonce: '...', timestamp: 1467704698)
|
7
|
+
class HmacAuthRequest < AuthSession
|
8
|
+
attr_reader :consumer_key, :consumer_secret, :timestamp, :nonce
|
9
|
+
|
10
|
+
def initialize(consumer_key: ENV.fetch('CORE_CONSUMER_KEY'),
|
11
|
+
consumer_secret: ENV.fetch('CORE_CONSUMER_SECRET'),
|
12
|
+
timestamp: Time.now.to_i,
|
13
|
+
nonce: SecureRandom.urlsafe_base64(32),
|
14
|
+
hmac: nil,
|
15
|
+
**additional_arguments)
|
16
|
+
@consumer_key = consumer_key
|
17
|
+
@consumer_secret = consumer_secret
|
18
|
+
@timestamp = timestamp
|
19
|
+
@nonce = nonce
|
20
|
+
@hmac = hmac
|
21
|
+
super additional_arguments
|
22
|
+
end
|
23
|
+
|
24
|
+
def headers(request_method, path, params)
|
25
|
+
{'Authorization' => "HMAC #{consumer_key}:#{hmac(request_method, path, params)}:#{nonce}:#{timestamp}"}
|
26
|
+
end
|
27
|
+
|
28
|
+
# handle 401 response.
|
29
|
+
def access_denied(response)
|
30
|
+
fail Unauthorized, response
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def hmac(request_method, path, params)
|
36
|
+
@hmac || calculate_hmac(request_method, path, params)
|
37
|
+
end
|
38
|
+
|
39
|
+
def calculate_hmac(request_method, path, params)
|
40
|
+
checker = Authmac::HmacChecker.new(consumer_secret, '|', 'sha256')
|
41
|
+
params_to_sign = params.merge \
|
42
|
+
'request_method' => request_method,
|
43
|
+
'request_path' => "/api/v1#{path}",
|
44
|
+
'timestamp' => timestamp.to_s,
|
45
|
+
'nonce' => nonce,
|
46
|
+
'consumer_key' => consumer_key
|
47
|
+
checker.sign(params_to_sign.with_indifferent_access)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Roqua
|
2
|
+
module CoreApi
|
3
|
+
module Sessions
|
4
|
+
class HmacAuthSession < AuthSession
|
5
|
+
attr_reader :consumer_key, :consumer_secret
|
6
|
+
|
7
|
+
delegate :headers, :access_denied, to: :hmac_auth_request
|
8
|
+
|
9
|
+
def initialize(consumer_key: ENV.fetch('CORE_CONSUMER_KEY'),
|
10
|
+
consumer_secret: ENV.fetch('CORE_CONSUMER_SECRET'),
|
11
|
+
**additional_arguments)
|
12
|
+
@consumer_key = consumer_key
|
13
|
+
@consumer_secret = consumer_secret
|
14
|
+
super additional_arguments
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def hmac_auth_request
|
20
|
+
HmacAuthRequest.new(consumer_key: consumer_key, consumer_secret: consumer_secret)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -3,6 +3,8 @@ require 'roqua/core_api/sessions/auth_session'
|
|
3
3
|
require 'roqua/core_api/sessions/oauth_session'
|
4
4
|
require 'roqua/core_api/sessions/token_session'
|
5
5
|
require 'roqua/core_api/sessions/basic_auth_session'
|
6
|
+
require 'roqua/core_api/sessions/hmac_auth_request'
|
7
|
+
require 'roqua/core_api/sessions/hmac_auth_session'
|
6
8
|
|
7
9
|
module Roqua
|
8
10
|
module CoreApi
|
@@ -17,5 +19,9 @@ module Roqua
|
|
17
19
|
def self.basic_auth_session(*arguments, &block)
|
18
20
|
Sessions::BasicAuthSession.new(*arguments, &block)
|
19
21
|
end
|
22
|
+
|
23
|
+
def self.hmac_auth_request(*arguments)
|
24
|
+
Sessions::HmacAuthRequest(*arguments)
|
25
|
+
end
|
20
26
|
end
|
21
27
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Roqua
|
2
|
+
module CoreApi
|
3
|
+
# @api private
|
4
|
+
class SsoLogin < Base
|
5
|
+
object :session, class: Sessions::AuthSession
|
6
|
+
string :organization_id
|
7
|
+
string :dossier_group_id
|
8
|
+
string :external_identifier
|
9
|
+
hash :extra_params, strip: false, default: {}
|
10
|
+
|
11
|
+
def execute
|
12
|
+
response = session.get "/sso/login", **sso_params
|
13
|
+
if response.code == 422
|
14
|
+
errors_to_usecase response
|
15
|
+
end
|
16
|
+
response['token_session']
|
17
|
+
end
|
18
|
+
|
19
|
+
def sso_params
|
20
|
+
extra_params.merge(
|
21
|
+
organization_id: organization_id,
|
22
|
+
dossier_group_id: dossier_group_id,
|
23
|
+
external_identifier: external_identifier
|
24
|
+
).symbolize_keys
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
data/lib/roqua/core_api.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: roqua-core-api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marten Veldthuis
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -210,8 +210,11 @@ files:
|
|
210
210
|
- lib/roqua/core_api/sessions.rb
|
211
211
|
- lib/roqua/core_api/sessions/auth_session.rb
|
212
212
|
- lib/roqua/core_api/sessions/basic_auth_session.rb
|
213
|
+
- lib/roqua/core_api/sessions/hmac_auth_request.rb
|
214
|
+
- lib/roqua/core_api/sessions/hmac_auth_session.rb
|
213
215
|
- lib/roqua/core_api/sessions/oauth_session.rb
|
214
216
|
- lib/roqua/core_api/sessions/token_session.rb
|
217
|
+
- lib/roqua/core_api/sso_login.rb
|
215
218
|
- lib/roqua/core_api/update_dossier.rb
|
216
219
|
- lib/roqua/core_api/update_person.rb
|
217
220
|
- lib/roqua/core_api/version.rb
|
@@ -258,7 +261,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
258
261
|
version: '0'
|
259
262
|
requirements: []
|
260
263
|
rubyforge_project:
|
261
|
-
rubygems_version: 2.
|
264
|
+
rubygems_version: 2.5.1
|
262
265
|
signing_key:
|
263
266
|
specification_version: 4
|
264
267
|
summary: API wrapper gem around Core's API
|