omniauth-g5 0.1.0 → 0.2.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 +4 -4
- data/.ruby-version +1 -1
- data/.travis.yml +9 -0
- data/CHANGELOG.md +9 -3
- data/README.md +67 -1
- data/lib/omniauth-g5/version.rb +1 -1
- data/lib/omniauth/strategies/g5.rb +22 -1
- data/omniauth-g5.gemspec +2 -1
- data/spec/omniauth/strategies/g5_spec.rb +111 -13
- data/spec/spec_helper.rb +1 -1
- metadata +20 -7
- data/.ruby-gemset +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c725fd3953602794351ab2800883220afc39466
|
4
|
+
data.tar.gz: 8fc1bede6057617700b3f76643257af2cb676e38
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e6c228bccc9af1fb6a4073d1370e51d0379f481efc6293994f0b8909a20523998d129cac00bbe777667dab694548f859735c742d903cb44b34928d5129b8ea67
|
7
|
+
data.tar.gz: e44cbdc3809ba2f2f513ecae13d4ebe6e78ae5a5a95155b1a9b90e7935ec0e4deacd64c7d31ada5a8af2403b330aaf63d300ac7efea88420cfacf536d6d337e3
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.2.0
|
data/.travis.yml
ADDED
data/CHANGELOG.md
CHANGED
@@ -1,10 +1,16 @@
|
|
1
|
-
|
1
|
+
## v0.2.0 (2015-05-20)
|
2
|
+
|
3
|
+
* Added new fields to auth hash for user name, phone, title, and organization.
|
4
|
+
* Added user roles to the auth hash
|
5
|
+
([#8](https://github.com/G5/omniauth-g5/pull/8))
|
6
|
+
|
7
|
+
## v0.1.0 (2014-03-12)
|
2
8
|
|
3
9
|
* Moved `rake g5:export_users` task to
|
4
10
|
[devise_g5_authenticatable](https://github.com/G5/devise_g5_authenticatable)
|
5
11
|
* First open source release to [RubyGems](https://rubygems.org)
|
6
12
|
|
7
|
-
|
13
|
+
## v0.0.2 (2013-11-06)
|
8
14
|
|
9
15
|
* Changed `rake g5:export_users` task to read default argument values
|
10
16
|
from environment variables:
|
@@ -19,6 +25,6 @@
|
|
19
25
|
* Renamed any references to the client callback URL to redirect URI, to
|
20
26
|
maintain terminology consistent with the OAuth 2.0 specification.
|
21
27
|
|
22
|
-
|
28
|
+
## v0.0.1 (2013-07-25)
|
23
29
|
|
24
30
|
* Initial release
|
data/README.md
CHANGED
@@ -8,7 +8,7 @@ This is the [OmniAuth][omniauth] strategy for authenticating to G5 via
|
|
8
8
|
|
9
9
|
## Current version
|
10
10
|
|
11
|
-
0.
|
11
|
+
0.2.0
|
12
12
|
|
13
13
|
## Requirements
|
14
14
|
|
@@ -36,6 +36,8 @@ $ gem install omniauth-g5
|
|
36
36
|
|
37
37
|
## Usage
|
38
38
|
|
39
|
+
### Configuration
|
40
|
+
|
39
41
|
The strategy must be initialized with a valid client application ID and secret
|
40
42
|
provided by the G5 auth service. For example, to use the G5 strategy with
|
41
43
|
[devise][devise]:
|
@@ -52,6 +54,70 @@ For more general information about setting up and using OmniAuth, see the
|
|
52
54
|
[devise]: https://github.com/plataformatec/devise
|
53
55
|
[omniauth-wiki]: https://github.com/intridea/omniauth/wiki
|
54
56
|
|
57
|
+
### Auth Hash
|
58
|
+
|
59
|
+
After authenticating, OmniAuth returns a hash of information in the Rack
|
60
|
+
environment under the key `omniauth.auth`. The G5 OmniAuth strategy
|
61
|
+
specifically uses the following subset of the full
|
62
|
+
[auth hash schema](https://github.com/intridea/omniauth/wiki/Auth-Hash-Schema):
|
63
|
+
|
64
|
+
* `provider` - this will always be set to the symbol `:g5`
|
65
|
+
* `uid` - the unique identifier for the authenticated user
|
66
|
+
* `info` - a hash containing information about the user
|
67
|
+
* `email` - the email address of the authenticated user
|
68
|
+
* `name` - the display name for the user (concatenated first and last names,
|
69
|
+
or an empty string if no name fields have been populated)
|
70
|
+
* `first_name` - the user's first name (may be nil)
|
71
|
+
* `last_name` - the user's last name (may be nil)
|
72
|
+
* `phone` - the user's phone number (may be nil; no specific formatting is
|
73
|
+
enforced)
|
74
|
+
* `credentials` - information about the user's access token
|
75
|
+
* `token` - the access token string
|
76
|
+
* `expires` - boolean indicating whether the access token has an expiry date
|
77
|
+
(always set to true for G5)
|
78
|
+
* `expires_at` - timestamp of the expiry time
|
79
|
+
* `extra` - extra information returned from the auth server, including the raw
|
80
|
+
user data and custom fields specific to G5
|
81
|
+
* `title` - the user's job title (may be nil)
|
82
|
+
* `organization_name` - the user's organization name (may be nil). This does
|
83
|
+
not necessarily match the G5 client name. For example, it could be the name
|
84
|
+
of a department or business unit within the client's organization.
|
85
|
+
* `roles` - the array of roles assigned to the user (may be empty)
|
86
|
+
* `uid` - the unique identifier of the role on the auth server
|
87
|
+
* `name` - the name of the role in snakecase
|
88
|
+
* `raw_info` - a hash representation of the full JSON response from the G5
|
89
|
+
auth server
|
90
|
+
|
91
|
+
For example:
|
92
|
+
|
93
|
+
```ruby
|
94
|
+
{"provider"=>:g5,
|
95
|
+
"uid"=>42,
|
96
|
+
"info"=>
|
97
|
+
{"email"=>"test.user@test.host",
|
98
|
+
"name"=>"Test User",
|
99
|
+
"first_name"=>"Test",
|
100
|
+
"last_name"=>"User",
|
101
|
+
"phone"=>"(555) 555-5555"},
|
102
|
+
"credentials"=>
|
103
|
+
{"token"=>"abc123",
|
104
|
+
"expires_at"=>1430170866,
|
105
|
+
"expires"=>true},
|
106
|
+
"extra"=>
|
107
|
+
{"raw_info"=>
|
108
|
+
{"id"=>42,
|
109
|
+
"email"=>"test.user@test.host",
|
110
|
+
"first_name"=>"Test",
|
111
|
+
"last_name"=>"User",
|
112
|
+
"phone_number"=>"(555) 555-5555",
|
113
|
+
"organization_name"=>"Test Org",
|
114
|
+
"title"=>"Tester",
|
115
|
+
"roles"=>[{"id"=>4,"name"=>"viewer"}]},
|
116
|
+
"title"=>"Tester",
|
117
|
+
"organization_name"=>"Test Org",
|
118
|
+
"roles" => [{"uid"=>4,"name"=>"viewer"}]}}
|
119
|
+
```
|
120
|
+
|
55
121
|
## Authors
|
56
122
|
|
57
123
|
* Maeve Revels / [@maeve](https://github.com/maeve)
|
data/lib/omniauth-g5/version.rb
CHANGED
@@ -14,12 +14,33 @@ module OmniAuth
|
|
14
14
|
uid { raw_info['id'] }
|
15
15
|
|
16
16
|
info do
|
17
|
-
{:email => raw_info['email']
|
17
|
+
{:email => raw_info['email'],
|
18
|
+
:name => display_name,
|
19
|
+
:first_name => raw_info['first_name'],
|
20
|
+
:last_name => raw_info['last_name'],
|
21
|
+
:phone => raw_info['phone_number']}
|
22
|
+
end
|
23
|
+
|
24
|
+
extra do
|
25
|
+
{:raw_info => raw_info,
|
26
|
+
:title => raw_info['title'],
|
27
|
+
:organization_name => raw_info['organization_name'],
|
28
|
+
:roles => roles}
|
18
29
|
end
|
19
30
|
|
20
31
|
def raw_info
|
21
32
|
@raw_info ||= access_token.get('/v1/me.json').parsed
|
22
33
|
end
|
34
|
+
|
35
|
+
def display_name
|
36
|
+
"#{raw_info['first_name']} #{raw_info['last_name']}".strip
|
37
|
+
end
|
38
|
+
|
39
|
+
def roles
|
40
|
+
[raw_info['roles']].flatten.collect do |role|
|
41
|
+
{:name => role['name']}
|
42
|
+
end
|
43
|
+
end
|
23
44
|
end
|
24
45
|
end
|
25
46
|
end
|
data/omniauth-g5.gemspec
CHANGED
@@ -19,7 +19,8 @@ Gem::Specification.new do |gem|
|
|
19
19
|
|
20
20
|
gem.add_dependency('omniauth-oauth2', '~> 1.1')
|
21
21
|
|
22
|
-
gem.add_development_dependency('rspec', '~> 2
|
22
|
+
gem.add_development_dependency('rspec', '~> 3.2')
|
23
|
+
gem.add_development_dependency('rspec-its')
|
23
24
|
gem.add_development_dependency('simplecov', '~> 0.7')
|
24
25
|
gem.add_development_dependency('codeclimate-test-reporter')
|
25
26
|
gem.add_development_dependency('pry')
|
@@ -12,9 +12,9 @@ describe OmniAuth::Strategies::G5 do
|
|
12
12
|
let(:access_token) { double(:access_token, :get => response) }
|
13
13
|
let(:response) { double(:response, :parsed => parsed_response) }
|
14
14
|
let(:parsed_response) { double(:parsed_response) }
|
15
|
-
before { strategy.
|
15
|
+
before { allow(strategy).to receive(:access_token).and_return(access_token) }
|
16
16
|
|
17
|
-
its(:name) {
|
17
|
+
its(:name) { is_expected.to eq(:g5) }
|
18
18
|
|
19
19
|
it 'should have the correct client id' do
|
20
20
|
expect(strategy.options[:client_id]).to eq(app_id)
|
@@ -28,9 +28,9 @@ describe OmniAuth::Strategies::G5 do
|
|
28
28
|
subject(:client_options) { strategy.options.client_options }
|
29
29
|
|
30
30
|
context 'with default options' do
|
31
|
-
its(:site) {
|
32
|
-
its(:authorize_url) {
|
33
|
-
its(:token_url) {
|
31
|
+
its(:site) { is_expected.to eq('https://auth.g5search.com') }
|
32
|
+
its(:authorize_url) { is_expected.to eq('/oauth/authorize') }
|
33
|
+
its(:token_url) { is_expected.to eq('/oauth/token') }
|
34
34
|
end
|
35
35
|
|
36
36
|
context 'with partially overridden options' do
|
@@ -38,9 +38,9 @@ describe OmniAuth::Strategies::G5 do
|
|
38
38
|
{:client_options => {:site => 'https://custom.app.com'}}
|
39
39
|
end
|
40
40
|
|
41
|
-
its(:site) {
|
42
|
-
its(:authorize_url) {
|
43
|
-
its(:token_url) {
|
41
|
+
its(:site) { is_expected.to eq('https://custom.app.com') }
|
42
|
+
its(:authorize_url) { is_expected.to eq('/oauth/authorize') }
|
43
|
+
its(:token_url) { is_expected.to eq('/oauth/token') }
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
@@ -48,11 +48,11 @@ describe OmniAuth::Strategies::G5 do
|
|
48
48
|
subject(:raw_info) { strategy.raw_info }
|
49
49
|
|
50
50
|
it 'should retrieve the user info from the server' do
|
51
|
-
access_token.
|
51
|
+
expect(access_token).to receive(:get).with('/v1/me.json').and_return(response)
|
52
52
|
raw_info
|
53
53
|
end
|
54
54
|
|
55
|
-
it {
|
55
|
+
it { is_expected.to eq(parsed_response) }
|
56
56
|
end
|
57
57
|
|
58
58
|
describe '#uid' do
|
@@ -61,15 +61,113 @@ describe OmniAuth::Strategies::G5 do
|
|
61
61
|
{'id' => 123}
|
62
62
|
end
|
63
63
|
|
64
|
-
it {
|
64
|
+
it { is_expected.to eq(123) }
|
65
65
|
end
|
66
66
|
|
67
67
|
describe '#info' do
|
68
68
|
subject(:info) { strategy.info }
|
69
69
|
let(:parsed_response) do
|
70
|
-
{'email' =>
|
70
|
+
{'email' => email,
|
71
|
+
'first_name' => first_name,
|
72
|
+
'last_name' => last_name,
|
73
|
+
'phone_number' => phone_number}
|
71
74
|
end
|
72
75
|
|
73
|
-
|
76
|
+
let(:email) { 'test@test.com' }
|
77
|
+
let(:first_name) { 'Test' }
|
78
|
+
let(:last_name) { 'User' }
|
79
|
+
let(:phone_number) { '(555) 555-5555' }
|
80
|
+
|
81
|
+
its([:email]) { is_expected.to eq(email) }
|
82
|
+
its([:name]) { is_expected.to eq("#{first_name} #{last_name}") }
|
83
|
+
its([:first_name]) { is_expected.to eq(first_name)}
|
84
|
+
its([:last_name]) { is_expected.to eq(last_name) }
|
85
|
+
its([:phone]) { is_expected.to eq(phone_number) }
|
86
|
+
end
|
87
|
+
|
88
|
+
describe '#extra' do
|
89
|
+
subject(:extra) { strategy.extra }
|
90
|
+
let(:parsed_response) do
|
91
|
+
{'title' => title,
|
92
|
+
'organization_name' => org_name,
|
93
|
+
'roles' => roles}
|
94
|
+
end
|
95
|
+
|
96
|
+
let(:title) { 'Grand Poobah' }
|
97
|
+
let(:org_name) { 'Test Org' }
|
98
|
+
let(:roles) { [{'name' => 'viewer'}] }
|
99
|
+
|
100
|
+
its([:raw_info]) { is_expected.to eq(parsed_response) }
|
101
|
+
its([:title]) { is_expected.to eq(title) }
|
102
|
+
its([:organization_name]) { is_expected.to eq(org_name) }
|
103
|
+
its([:roles]) { is_expected.to eq(strategy.roles) }
|
104
|
+
end
|
105
|
+
|
106
|
+
describe '#display_name' do
|
107
|
+
subject(:display_name) { strategy.display_name }
|
108
|
+
let(:parsed_response) do
|
109
|
+
{'first_name' => first_name,
|
110
|
+
'last_name' => last_name}
|
111
|
+
end
|
112
|
+
|
113
|
+
let(:first_name) {}
|
114
|
+
let(:last_name) {}
|
115
|
+
|
116
|
+
context 'with first and last name' do
|
117
|
+
let(:first_name) { 'Test' }
|
118
|
+
let(:last_name) { 'User' }
|
119
|
+
|
120
|
+
it { is_expected.to eq("#{first_name} #{last_name}")}
|
121
|
+
end
|
122
|
+
|
123
|
+
context 'with first name only' do
|
124
|
+
let(:first_name) { 'Test'}
|
125
|
+
|
126
|
+
it { is_expected.to eq(first_name) }
|
127
|
+
end
|
128
|
+
|
129
|
+
context 'with last name only' do
|
130
|
+
let(:last_name) { 'User' }
|
131
|
+
|
132
|
+
it { is_expected.to eq(last_name) }
|
133
|
+
end
|
134
|
+
|
135
|
+
context 'without name fields' do
|
136
|
+
it { is_expected.to eq('') }
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
describe '#roles' do
|
141
|
+
subject(:roles) { strategy.roles }
|
142
|
+
let(:parsed_response) do
|
143
|
+
{'roles' => role_data}
|
144
|
+
end
|
145
|
+
|
146
|
+
context 'when roles are empty' do
|
147
|
+
let(:role_data) { [] }
|
148
|
+
|
149
|
+
it { is_expected.to be_empty }
|
150
|
+
end
|
151
|
+
|
152
|
+
context 'when there is one role' do
|
153
|
+
let(:role_data) { [{'name' => 'viewer'}] }
|
154
|
+
|
155
|
+
its(:count) { is_expected.to eq(1) }
|
156
|
+
|
157
|
+
it 'should return the role name' do
|
158
|
+
expect(roles.first[:name]).to eq(role_data.first['name'])
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
context 'when there are two roles' do
|
163
|
+
let(:role_data) do
|
164
|
+
[{'name' => 'super_admin'},
|
165
|
+
{'name' => 'editor'}]
|
166
|
+
end
|
167
|
+
|
168
|
+
its(:count) { is_expected.to eq(2) }
|
169
|
+
it { is_expected.to include({name: 'super_admin'}) }
|
170
|
+
it { is_expected.to include({name: 'editor'}) }
|
171
|
+
end
|
74
172
|
end
|
75
173
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -4,6 +4,7 @@ SimpleCov.start 'test_frameworks'
|
|
4
4
|
require 'codeclimate-test-reporter'
|
5
5
|
CodeClimate::TestReporter.start
|
6
6
|
|
7
|
+
require 'rspec/its'
|
7
8
|
require 'pry'
|
8
9
|
require 'omniauth-g5'
|
9
10
|
|
@@ -13,7 +14,6 @@ require 'webmock/rspec'
|
|
13
14
|
|
14
15
|
# See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
|
15
16
|
RSpec.configure do |config|
|
16
|
-
config.treat_symbols_as_metadata_keys_with_true_values = true
|
17
17
|
config.run_all_when_everything_filtered = true
|
18
18
|
config.filter_run :focus
|
19
19
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omniauth-g5
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Maeve Revels
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2015-05-20 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: omniauth-oauth2
|
@@ -31,14 +31,28 @@ dependencies:
|
|
31
31
|
requirements:
|
32
32
|
- - "~>"
|
33
33
|
- !ruby/object:Gem::Version
|
34
|
-
version: '2
|
34
|
+
version: '3.2'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '2
|
41
|
+
version: '3.2'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rspec-its
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ">="
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
42
56
|
- !ruby/object:Gem::Dependency
|
43
57
|
name: simplecov
|
44
58
|
requirement: !ruby/object:Gem::Requirement
|
@@ -105,8 +119,8 @@ extra_rdoc_files: []
|
|
105
119
|
files:
|
106
120
|
- ".gitignore"
|
107
121
|
- ".rspec"
|
108
|
-
- ".ruby-gemset"
|
109
122
|
- ".ruby-version"
|
123
|
+
- ".travis.yml"
|
110
124
|
- CHANGELOG.md
|
111
125
|
- Gemfile
|
112
126
|
- LICENSE
|
@@ -138,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
138
152
|
version: '0'
|
139
153
|
requirements: []
|
140
154
|
rubyforge_project:
|
141
|
-
rubygems_version: 2.
|
155
|
+
rubygems_version: 2.4.5
|
142
156
|
signing_key:
|
143
157
|
specification_version: 4
|
144
158
|
summary: OmniAuth strategy for G5
|
@@ -146,4 +160,3 @@ test_files:
|
|
146
160
|
- spec/omniauth/strategies/g5_spec.rb
|
147
161
|
- spec/spec_helper.rb
|
148
162
|
- spec/support/.gitkeep
|
149
|
-
has_rdoc:
|
data/.ruby-gemset
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
g5_omniauth
|