nexaas_id-client 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +5 -5
- data/README.md +26 -0
- data/lib/nexaas_id/client/application.rb +9 -11
- data/lib/nexaas_id/client/base.rb +23 -0
- data/lib/nexaas_id/client/identity.rb +13 -18
- data/lib/nexaas_id/client/oauth.rb +9 -9
- data/lib/nexaas_id/configuration.rb +6 -0
- data/lib/nexaas_id/resources/base.rb +4 -1
- data/lib/nexaas_id/resources/widget.rb +1 -1
- data/lib/nexaas_id/version.rb +1 -1
- data/lib/nexaas_id.rb +3 -3
- data/spec/nexaas_id/client/application_spec.rb +21 -5
- data/spec/nexaas_id/client/identity_spec.rb +38 -18
- data/spec/nexaas_id/configuration_spec.rb +17 -23
- data/spec/nexaas_id/resources/profile_spec.rb +7 -1
- data/spec/nexaas_id/resources/sign_up_spec.rb +5 -2
- data/spec/nexaas_id/resources/widget_spec.rb +8 -2
- data/spec/nexaas_id_spec.rb +10 -9
- data/spec/spec_helper.rb +3 -3
- data/spec/support/authorization.rb +12 -9
- data/spec/support/configuration_helper.rb +11 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7dba0636a5ef5cd0279be78dbab7ee836e995a50f73be0dbb3c2195742db35c
|
4
|
+
data.tar.gz: 7f5a5e5e133db3f5c8702ba4e11a1545d74f37355de0ad91dfd7260c721a212c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46cc9b29c4ffdf03c4cbd931de93a52297714a2e280ddddd1bceaef452a2a0fffd6e0753cd796c2720791f2aa7933f34849f836668f0d24583f9e372c69501c5
|
7
|
+
data.tar.gz: 0bd625171195ba87a1b5afcbbfb9a85954f7e73db67250186036e2d254daabac07cfbceebb8f2ad93336565ed6206c384db737b331d6a7b87640d84dc82705b3
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
nexaas_id-client (0.
|
4
|
+
nexaas_id-client (0.7.0)
|
5
5
|
multi_json (~> 1.11)
|
6
6
|
oauth2 (~> 1.4.0)
|
7
7
|
virtus (~> 1.0)
|
@@ -46,14 +46,14 @@ GEM
|
|
46
46
|
domain_name (~> 0.5)
|
47
47
|
ice_nine (0.11.2)
|
48
48
|
json (2.1.0)
|
49
|
-
jwt (1.
|
49
|
+
jwt (2.1.0)
|
50
50
|
method_source (0.8.2)
|
51
51
|
multi_json (1.13.1)
|
52
52
|
multi_xml (0.6.0)
|
53
53
|
multipart-post (2.0.0)
|
54
|
-
oauth2 (1.4.
|
55
|
-
faraday (>= 0.8, < 0.
|
56
|
-
jwt (
|
54
|
+
oauth2 (1.4.1)
|
55
|
+
faraday (>= 0.8, < 0.16.0)
|
56
|
+
jwt (>= 1.0, < 3.0)
|
57
57
|
multi_json (~> 1.3)
|
58
58
|
multi_xml (~> 0.5)
|
59
59
|
rack (>= 1.2, < 3)
|
data/README.md
CHANGED
@@ -53,6 +53,19 @@ NexaasID.configure do |c|
|
|
53
53
|
end
|
54
54
|
```
|
55
55
|
|
56
|
+
Or, if you want to instantiate multiple application connections:
|
57
|
+
|
58
|
+
```ruby
|
59
|
+
require 'nexaas_id'
|
60
|
+
|
61
|
+
config = NexaasID.Configuration.build do |c|
|
62
|
+
c.url = 'https://sandbox.id.nexaas.com'
|
63
|
+
c.user_agent = 'My App v1.0'
|
64
|
+
c.application_token = 'your-application-token'
|
65
|
+
c.application_secret = 'your-application-secret'
|
66
|
+
end
|
67
|
+
```
|
68
|
+
|
56
69
|
## Usage
|
57
70
|
|
58
71
|
The API can be used to access resources owned by an `Identity`, which requires previous authorization from the
|
@@ -67,6 +80,12 @@ or resources owned by an `Application`, which only requires the application's cr
|
|
67
80
|
client = NexaasID::Client::Identity.new(user_credentials)
|
68
81
|
```
|
69
82
|
|
83
|
+
Or passing an explicit configuration:
|
84
|
+
|
85
|
+
```ruby
|
86
|
+
client = NexaasID::Client::Identity.new(user_credentials, config)
|
87
|
+
```
|
88
|
+
|
70
89
|
Here, `user_crendentials` is an object that must have the following attributes available for reading/writing:
|
71
90
|
* access_token
|
72
91
|
* refresh_token
|
@@ -121,10 +140,17 @@ navbar_url = widget_resource.navbar_url
|
|
121
140
|
|
122
141
|
#### Create an instance of NexaasID::Client::Application, as below:
|
123
142
|
|
143
|
+
|
124
144
|
```ruby
|
125
145
|
client = NexaasID::Client::Application.new
|
126
146
|
```
|
127
147
|
|
148
|
+
Or passing a explicit configuration:
|
149
|
+
|
150
|
+
```ruby
|
151
|
+
client = NexaasID::Client::Application.new(config)
|
152
|
+
```
|
153
|
+
|
128
154
|
#### Now you have access to the following endpoints:
|
129
155
|
|
130
156
|
* [SignUp API](https://docs.id.nexaas.com/api/invitation) as `client.signup`
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
1
3
|
# Nexaas ID Client for resources not owned by an Identity
|
2
4
|
#
|
3
5
|
# [API]
|
@@ -7,26 +9,22 @@
|
|
7
9
|
# client = NexaasID::Client::Application.new
|
8
10
|
# client.sign_up.create(invited: 'john.doe@example.com')
|
9
11
|
#
|
10
|
-
class NexaasID::Client::Application
|
11
|
-
|
12
|
-
|
12
|
+
class NexaasID::Client::Application < NexaasID::Client::Base
|
13
|
+
def initialize(config = nil)
|
14
|
+
super(config)
|
13
15
|
@tokens = {}
|
14
16
|
end
|
15
17
|
|
16
|
-
|
17
|
-
|
18
|
-
def
|
19
|
-
|
18
|
+
protected
|
19
|
+
|
20
|
+
def api_token
|
21
|
+
token(:invite)
|
20
22
|
end
|
21
23
|
|
22
24
|
private
|
23
25
|
|
24
26
|
attr_reader :tokens
|
25
27
|
|
26
|
-
def client
|
27
|
-
@client ||= NexaasID::Client::OAuth.build
|
28
|
-
end
|
29
|
-
|
30
28
|
def token(scope = nil)
|
31
29
|
token = tokens[scope]
|
32
30
|
return token unless token.nil? || token.expired?
|
@@ -0,0 +1,23 @@
|
|
1
|
+
class NexaasID::Client::Base
|
2
|
+
def initialize(config = nil)
|
3
|
+
@config = config || NexaasID.default_configuration
|
4
|
+
end
|
5
|
+
|
6
|
+
# Provides a SignUp resource.
|
7
|
+
# @return [NexaasID::Resources::SignUp] the signup resource.
|
8
|
+
def sign_up
|
9
|
+
NexaasID::Resources::SignUp.new(api_token, config)
|
10
|
+
end
|
11
|
+
|
12
|
+
protected
|
13
|
+
|
14
|
+
attr_accessor :config
|
15
|
+
|
16
|
+
def api_token
|
17
|
+
raise NotImplementedError
|
18
|
+
end
|
19
|
+
|
20
|
+
def client
|
21
|
+
@client ||= NexaasID::Client::OAuth.new(config)
|
22
|
+
end
|
23
|
+
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require_relative './base'
|
2
|
+
|
1
3
|
# Nexaas ID Client for resources owned by an Identity
|
2
4
|
#
|
3
5
|
# [API]
|
@@ -7,7 +9,7 @@
|
|
7
9
|
# client = NexaasID::Client::Identity.new(user_credentials)
|
8
10
|
# client.profile.get
|
9
11
|
#
|
10
|
-
class NexaasID::Client::Identity
|
12
|
+
class NexaasID::Client::Identity < NexaasID::Client::Base
|
11
13
|
attr_reader :credentials
|
12
14
|
|
13
15
|
# Creates an instance of this client.
|
@@ -17,7 +19,8 @@ class NexaasID::Client::Identity
|
|
17
19
|
# #refresh_token, #refresh_token=,
|
18
20
|
# #expires_at, #expires_at=
|
19
21
|
# #expires_in, #expires_in=] The user credentials, obtained through the OAuth2 authorization flow.
|
20
|
-
def initialize(credentials)
|
22
|
+
def initialize(credentials, config = nil)
|
23
|
+
super(config)
|
21
24
|
@credentials = credentials
|
22
25
|
@token = NexaasID::Client::ExceptionWrapper.new(OAuth2::AccessToken.from_hash(client, hash))
|
23
26
|
end
|
@@ -25,19 +28,19 @@ class NexaasID::Client::Identity
|
|
25
28
|
# Provides a Profile resource.
|
26
29
|
# @return [NexaasID::Resources::Profile] the profile resource.
|
27
30
|
def profile
|
28
|
-
NexaasID::Resources::Profile.new(
|
29
|
-
end
|
30
|
-
|
31
|
-
# Provides a SignUp resource.
|
32
|
-
# @return [NexaasID::Resources::SignUp] the signup resource.
|
33
|
-
def sign_up
|
34
|
-
NexaasID::Resources::SignUp.new(api)
|
31
|
+
NexaasID::Resources::Profile.new(api_token, config)
|
35
32
|
end
|
36
33
|
|
37
34
|
# Provides a Widget resource.
|
38
35
|
# @return [NexaasID::Resources::Widget] the widget resource.
|
39
36
|
def widget
|
40
|
-
NexaasID::Resources::Widget.new(
|
37
|
+
NexaasID::Resources::Widget.new(api_token, config)
|
38
|
+
end
|
39
|
+
|
40
|
+
protected
|
41
|
+
|
42
|
+
def api_token
|
43
|
+
token.expired? ? refresh_token : token
|
41
44
|
end
|
42
45
|
|
43
46
|
private
|
@@ -46,14 +49,6 @@ class NexaasID::Client::Identity
|
|
46
49
|
|
47
50
|
ATTRIBUTES = %i[access_token refresh_token expires_at expires_in].freeze
|
48
51
|
|
49
|
-
def api
|
50
|
-
token.expired? ? refresh_token : token
|
51
|
-
end
|
52
|
-
|
53
|
-
def client
|
54
|
-
@client ||= NexaasID::Client::OAuth.build
|
55
|
-
end
|
56
|
-
|
57
52
|
def hash
|
58
53
|
ATTRIBUTES.map { |attr| [attr, credentials.send(attr)] }.to_h
|
59
54
|
end
|
@@ -2,19 +2,19 @@ require 'oauth2'
|
|
2
2
|
|
3
3
|
# OAuth2 client used by NexaasID::Client::Application and NexaasID::Client::Identity.
|
4
4
|
# Provides direct access to the underlying OAuth2 API.
|
5
|
-
class NexaasID::Client::OAuth
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
5
|
+
class NexaasID::Client::OAuth < OAuth2::Client
|
6
|
+
def initialize(config)
|
7
|
+
super(
|
8
|
+
config.application_token,
|
9
|
+
config.application_secret,
|
10
|
+
site: config.url,
|
11
|
+
connection_opts: { headers: headers }
|
12
|
+
)
|
13
13
|
end
|
14
14
|
|
15
15
|
private
|
16
16
|
|
17
|
-
def
|
17
|
+
def headers
|
18
18
|
{ 'Accept': 'application/json', 'Content-type': 'application/json' }
|
19
19
|
end
|
20
20
|
end
|
@@ -2,6 +2,12 @@ class NexaasID::Configuration
|
|
2
2
|
|
3
3
|
attr_accessor :url, :user_agent, :application_token, :application_secret
|
4
4
|
|
5
|
+
def self.build
|
6
|
+
config = new
|
7
|
+
yield(config) if block_given?
|
8
|
+
config
|
9
|
+
end
|
10
|
+
|
5
11
|
def initialize
|
6
12
|
@url = 'https://id.nexaas.com'
|
7
13
|
@user_agent = "Nexaas ID Ruby Client v#{NexaasID::VERSION}"
|
@@ -1,10 +1,13 @@
|
|
1
1
|
# Default root for all resource classes.
|
2
2
|
class NexaasID::Resources::Base
|
3
|
+
attr_reader :configuration
|
4
|
+
|
3
5
|
# Creates an instance of this class.
|
4
6
|
#
|
5
7
|
# @param [api] api An instance of OAuth2::AccessToken
|
6
|
-
def initialize(api)
|
8
|
+
def initialize(api, config)
|
7
9
|
@api = api
|
10
|
+
@configuration = config
|
8
11
|
end
|
9
12
|
|
10
13
|
protected
|
@@ -23,6 +23,6 @@ class NexaasID::Resources::Widget < NexaasID::Resources::Base
|
|
23
23
|
#
|
24
24
|
# @return [String] user's navbar URL
|
25
25
|
def navbar_url
|
26
|
-
%(#{
|
26
|
+
%(#{configuration.url}/api/v1/widgets/navbar?access_token=#{api.token})
|
27
27
|
end
|
28
28
|
end
|
data/lib/nexaas_id/version.rb
CHANGED
data/lib/nexaas_id.rb
CHANGED
@@ -30,11 +30,11 @@ require "nexaas_id/resources/sign_up"
|
|
30
30
|
require "nexaas_id/resources/widget"
|
31
31
|
|
32
32
|
module NexaasID
|
33
|
-
def self.
|
34
|
-
@
|
33
|
+
def self.default_configuration
|
34
|
+
@default_configuration ||= Configuration.new
|
35
35
|
end
|
36
36
|
|
37
37
|
def self.configure
|
38
|
-
yield(
|
38
|
+
yield(default_configuration) if block_given?
|
39
39
|
end
|
40
40
|
end
|
@@ -1,12 +1,28 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe NexaasID::Client::Application do
|
4
|
-
|
4
|
+
describe 'implicit default configuration' do
|
5
|
+
subject { described_class.new }
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
describe '#sign_up' do
|
8
|
+
it 'provides the signup resource' do
|
9
|
+
VCR.use_cassette('application/sign_up/client_credentials') do
|
10
|
+
expect(subject.sign_up).to be_a(NexaasID::Resources::SignUp)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe 'explicit configuration' do
|
17
|
+
subject { described_class.new(configuration) }
|
18
|
+
|
19
|
+
let(:configuration) { default_configuration }
|
20
|
+
|
21
|
+
describe '#sign_up' do
|
22
|
+
it 'provides the signup resource' do
|
23
|
+
VCR.use_cassette('application/sign_up/client_credentials') do
|
24
|
+
expect(subject.sign_up).to be_a(NexaasID::Resources::SignUp)
|
25
|
+
end
|
10
26
|
end
|
11
27
|
end
|
12
28
|
end
|
@@ -1,35 +1,55 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe NexaasID::Client::Identity do
|
4
|
-
|
4
|
+
describe 'implicit default configuration' do
|
5
|
+
subject do
|
6
|
+
described_class.new(user_credentials(NexaasID.default_configuration))
|
7
|
+
end
|
5
8
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
9
|
+
describe '#profile' do
|
10
|
+
it 'provides the profile resource' do
|
11
|
+
VCR.use_cassette('identity/refresh_token') do
|
12
|
+
expect(subject.profile).to be_a(NexaasID::Resources::Profile)
|
13
|
+
end
|
10
14
|
end
|
11
15
|
end
|
12
16
|
end
|
13
17
|
|
14
|
-
describe '
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
+
describe 'explicit configuration' do
|
19
|
+
subject do
|
20
|
+
described_class.new(user_credentials(configuration), configuration)
|
21
|
+
end
|
22
|
+
|
23
|
+
let(:configuration) { default_configuration }
|
24
|
+
|
25
|
+
describe '#profile' do
|
26
|
+
it 'provides the profile resource' do
|
27
|
+
VCR.use_cassette('identity/refresh_token') do
|
28
|
+
expect(subject.profile).to be_a(NexaasID::Resources::Profile)
|
29
|
+
end
|
18
30
|
end
|
19
31
|
end
|
20
|
-
end
|
21
32
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
33
|
+
describe '#sign_up' do
|
34
|
+
it 'provides the signup resource' do
|
35
|
+
VCR.use_cassette('identity/refresh_token') do
|
36
|
+
expect(subject.sign_up).to be_a(NexaasID::Resources::SignUp)
|
37
|
+
end
|
26
38
|
end
|
27
39
|
end
|
28
|
-
end
|
29
40
|
|
30
|
-
|
31
|
-
|
32
|
-
|
41
|
+
describe '#sign_up' do
|
42
|
+
it 'provides the widget resource' do
|
43
|
+
VCR.use_cassette('identity/refresh_token') do
|
44
|
+
expect(subject.widget).to be_a(NexaasID::Resources::Widget)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '#credentials' do
|
50
|
+
it 'returns the updated credentials' do
|
51
|
+
expect(subject.credentials).to eq(user_credentials(configuration))
|
52
|
+
end
|
33
53
|
end
|
34
54
|
end
|
35
55
|
end
|
@@ -2,37 +2,31 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe NexaasID::Configuration do
|
5
|
+
subject do
|
6
|
+
described_class.build do |c|
|
7
|
+
c.url = 'http://some/where'
|
8
|
+
c.user_agent = 'My App v1.0'
|
9
|
+
c.application_token = 'some-app-token'
|
10
|
+
c.application_secret = 'some-app-secret'
|
11
|
+
end
|
12
|
+
end
|
5
13
|
|
6
14
|
it "should use the production Nexaas ID URL by default" do
|
7
|
-
expect(
|
15
|
+
expect(subject.url).to eq('http://some/where')
|
8
16
|
end
|
9
17
|
|
10
18
|
it "should use a default user agent" do
|
11
|
-
expect(
|
12
|
-
end
|
13
|
-
|
14
|
-
it 'should allow setting the configuration parameters' do
|
15
|
-
config = NexaasID::Configuration.new
|
16
|
-
|
17
|
-
config.url = 'https://sandbox.id.nexaas.com'
|
18
|
-
config.application_token = '58ca7acc-9479-4671-8b7c-745c5a65ce08'
|
19
|
-
config.application_secret = '8da0d1a5-961d-461f-8ae6-1922db172340'
|
20
|
-
|
21
|
-
expect(config.url).to eq('https://sandbox.id.nexaas.com')
|
22
|
-
expect(config.application_token).to eq('58ca7acc-9479-4671-8b7c-745c5a65ce08')
|
23
|
-
expect(config.application_secret).to eq('8da0d1a5-961d-461f-8ae6-1922db172340')
|
19
|
+
expect(subject.user_agent).to eq('My App v1.0')
|
24
20
|
end
|
25
21
|
|
26
|
-
|
27
|
-
|
22
|
+
it 'generates an URL to a resource' do
|
23
|
+
configuration = subject
|
28
24
|
|
29
|
-
|
30
|
-
|
25
|
+
expect(configuration.url_for('/api/v1/profile')).
|
26
|
+
to eq('http://some/where/api/v1/profile')
|
31
27
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
end
|
28
|
+
configuration.url = 'https://sandbox.id.nexaas.com/'
|
29
|
+
expect(configuration.url_for('/api/v1/profile'))
|
30
|
+
.to eq('https://sandbox.id.nexaas.com/api/v1/profile')
|
36
31
|
end
|
37
|
-
|
38
32
|
end
|
@@ -1,7 +1,13 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe NexaasID::Resources::Profile do
|
4
|
-
let(:client)
|
4
|
+
let(:client) do
|
5
|
+
configuration = default_configuration
|
6
|
+
NexaasID::Client::Identity.new(
|
7
|
+
user_credentials(configuration),
|
8
|
+
configuration
|
9
|
+
)
|
10
|
+
end
|
5
11
|
let(:resource) { client.profile }
|
6
12
|
|
7
13
|
describe "#get" do
|
@@ -5,7 +5,7 @@ describe NexaasID::Resources::SignUp do
|
|
5
5
|
|
6
6
|
describe "#create" do
|
7
7
|
describe 'with application client' do
|
8
|
-
let(:client) { NexaasID::Client::Application.new }
|
8
|
+
let(:client) { NexaasID::Client::Application.new(default_configuration) }
|
9
9
|
subject { resource.create('demurtas@mailinator.com') }
|
10
10
|
|
11
11
|
it 'invites an user' do
|
@@ -18,7 +18,10 @@ describe NexaasID::Resources::SignUp do
|
|
18
18
|
end
|
19
19
|
|
20
20
|
describe 'with identity client' do
|
21
|
-
let(:client)
|
21
|
+
let(:client) do
|
22
|
+
configuration = default_configuration
|
23
|
+
NexaasID::Client::Identity.new(user_credentials(configuration), configuration)
|
24
|
+
end
|
22
25
|
subject { resource.create('demurtas@mailinator.com') }
|
23
26
|
|
24
27
|
it 'invites an user' do
|
@@ -1,12 +1,18 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe NexaasID::Resources::Widget do
|
4
|
-
let(:client)
|
4
|
+
let(:client) do
|
5
|
+
NexaasID::Client::Identity.new(
|
6
|
+
user_credentials(configuration),
|
7
|
+
configuration
|
8
|
+
)
|
9
|
+
end
|
10
|
+
let(:configuration) { default_configuration }
|
5
11
|
let(:resource) { client.widget }
|
6
12
|
|
7
13
|
describe "#navbar_url" do
|
8
14
|
subject { resource.navbar_url }
|
9
|
-
let(:regexp) { %r(#{Regexp.quote(
|
15
|
+
let(:regexp) { %r(#{Regexp.quote(configuration.url)}/api/v1/widgets/navbar\?access_token=(.+?)$) }
|
10
16
|
|
11
17
|
it 'returns the navbar url for this user' do
|
12
18
|
VCR.use_cassette('identity/widget/navbar_url/success') do
|
data/spec/nexaas_id_spec.rb
CHANGED
@@ -2,12 +2,11 @@
|
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
describe NexaasID do
|
5
|
-
|
6
5
|
it 'should have a version number' do
|
7
6
|
expect(NexaasID::VERSION).not_to be_nil
|
8
7
|
end
|
9
8
|
|
10
|
-
describe 'configuration' do
|
9
|
+
describe 'default configuration' do
|
11
10
|
it 'should be done via block initialization' do
|
12
11
|
NexaasID.configure do |c|
|
13
12
|
c.url = 'http://some/where'
|
@@ -15,16 +14,18 @@ describe NexaasID do
|
|
15
14
|
c.application_token = 'some-app-token'
|
16
15
|
c.application_secret = 'some-app-secret'
|
17
16
|
end
|
18
|
-
|
19
|
-
|
20
|
-
expect(
|
21
|
-
expect(
|
17
|
+
|
18
|
+
config = NexaasID.default_configuration
|
19
|
+
expect(config.url).to eq('http://some/where')
|
20
|
+
expect(config.user_agent).to eq('My App v1.0')
|
21
|
+
expect(config.application_token).to eq('some-app-token')
|
22
|
+
expect(config.application_secret).to eq('some-app-secret')
|
22
23
|
end
|
24
|
+
|
23
25
|
it 'should use a singleton object for the configuration values' do
|
24
|
-
config1 = NexaasID.
|
25
|
-
config2 = NexaasID.
|
26
|
+
config1 = NexaasID.default_configuration
|
27
|
+
config2 = NexaasID.default_configuration
|
26
28
|
expect(config1).to be === config2
|
27
29
|
end
|
28
30
|
end
|
29
|
-
|
30
31
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -17,6 +17,7 @@ require 'vcr'
|
|
17
17
|
require 'pry'
|
18
18
|
require 'webmock/rspec'
|
19
19
|
require 'support/authorization'
|
20
|
+
require 'support/configuration_helper'
|
20
21
|
|
21
22
|
VCR.configure do |c|
|
22
23
|
c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
|
@@ -30,13 +31,12 @@ RSpec.configure do |c|
|
|
30
31
|
c.mock_with :rspec
|
31
32
|
c.example_status_persistence_file_path = '.rspec_persistence'
|
32
33
|
c.include Authorization
|
34
|
+
c.include ConfigurationHelper
|
33
35
|
|
34
36
|
c.before do
|
35
37
|
NexaasID.configure do |config|
|
36
|
-
# https://sandbox.id.nexaas.com/applications/89e9d504-e2a8-476e-ac94-c33e68399c7e
|
37
|
-
# Test application - luiz.buiatte+pw.api.test@nexaas.com
|
38
38
|
config.url = ENV['NEXAAS_ID_URL']
|
39
|
-
config.application_token
|
39
|
+
config.application_token = ENV['APPLICATION_TOKEN']
|
40
40
|
config.application_secret = ENV['APPLICATION_SECRET']
|
41
41
|
end
|
42
42
|
end
|
@@ -2,8 +2,8 @@ require 'faraday-cookie_jar'
|
|
2
2
|
|
3
3
|
module Authorization
|
4
4
|
|
5
|
-
def authorization_code
|
6
|
-
connection = Faraday.new(url:
|
5
|
+
def authorization_code(configuration)
|
6
|
+
connection = Faraday.new(url: configuration.url) do |builder|
|
7
7
|
builder.use :cookie_jar
|
8
8
|
builder.adapter Faraday.default_adapter
|
9
9
|
end
|
@@ -18,14 +18,14 @@ module Authorization
|
|
18
18
|
connection.post('/sign_in', URI.encode_www_form(data))
|
19
19
|
|
20
20
|
response = connection.get('oauth/authorize',
|
21
|
-
client_id:
|
21
|
+
client_id: configuration.application_token,
|
22
22
|
redirect_uri: 'urn:ietf:wg:oauth:2.0:oob',
|
23
23
|
response_type: 'code',
|
24
24
|
scope: 'profile invite')
|
25
25
|
|
26
26
|
if(response.headers['location'].nil? || response.headers['location'] == '')
|
27
27
|
data = {
|
28
|
-
client_id:
|
28
|
+
client_id: configuration.application_token,
|
29
29
|
commit: 'Authorize',
|
30
30
|
redirect_uri: 'urn:ietf:wg:oauth:2.0:oob',
|
31
31
|
response_type: 'code',
|
@@ -43,16 +43,19 @@ module Authorization
|
|
43
43
|
response.body.match(%r{name="authenticity_token" value="(.+?)"}).captures.first
|
44
44
|
end
|
45
45
|
|
46
|
-
def access_token
|
46
|
+
def access_token(configuration)
|
47
47
|
VCR.use_cassette('access_token') do
|
48
|
-
client = NexaasID::Client::OAuth.
|
49
|
-
client.auth_code.get_token(
|
48
|
+
client = NexaasID::Client::OAuth.new(configuration)
|
49
|
+
client.auth_code.get_token(
|
50
|
+
authorization_code(configuration),
|
51
|
+
redirect_uri: 'urn:ietf:wg:oauth:2.0:oob'
|
52
|
+
)
|
50
53
|
end
|
51
54
|
end
|
52
55
|
|
53
|
-
def user_credentials
|
56
|
+
def user_credentials(configuration)
|
54
57
|
OpenStruct.new.tap do |credentials|
|
55
|
-
token = access_token
|
58
|
+
token = access_token(configuration)
|
56
59
|
credentials.access_token = token.token
|
57
60
|
credentials.refresh_token = token.refresh_token
|
58
61
|
credentials.expires_in = token.expires_in
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module ConfigurationHelper
|
2
|
+
def default_configuration
|
3
|
+
NexaasID::Configuration.build do |config|
|
4
|
+
# https://sandbox.id.nexaas.com/applications/89e9d504-e2a8-476e-ac94-c33e68399c7e
|
5
|
+
# Test application - luiz.buiatte+pw.api.test@nexaas.com
|
6
|
+
config.url = ENV['NEXAAS_ID_URL']
|
7
|
+
config.application_token = ENV['APPLICATION_TOKEN']
|
8
|
+
config.application_secret = ENV['APPLICATION_SECRET']
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nexaas_id-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rodrigo Tassinari de Oliveira
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2018-10-
|
14
|
+
date: 2018-10-23 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: multi_json
|
@@ -262,6 +262,7 @@ files:
|
|
262
262
|
- lib/nexaas_id.rb
|
263
263
|
- lib/nexaas_id/client.rb
|
264
264
|
- lib/nexaas_id/client/application.rb
|
265
|
+
- lib/nexaas_id/client/base.rb
|
265
266
|
- lib/nexaas_id/client/exception.rb
|
266
267
|
- lib/nexaas_id/client/exception_wrapper.rb
|
267
268
|
- lib/nexaas_id/client/identity.rb
|
@@ -293,6 +294,7 @@ files:
|
|
293
294
|
- spec/nexaas_id_spec.rb
|
294
295
|
- spec/spec_helper.rb
|
295
296
|
- spec/support/authorization.rb
|
297
|
+
- spec/support/configuration_helper.rb
|
296
298
|
homepage: https://github.com/myfreecomm/nexaas-id-client-ruby
|
297
299
|
licenses:
|
298
300
|
- Apache-2.0
|
@@ -329,3 +331,4 @@ test_files:
|
|
329
331
|
- spec/nexaas_id_spec.rb
|
330
332
|
- spec/spec_helper.rb
|
331
333
|
- spec/support/authorization.rb
|
334
|
+
- spec/support/configuration_helper.rb
|