omniauth-google-oauth2 0.1.6 → 0.1.7
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.
data/examples/config.ru
CHANGED
@@ -3,58 +3,62 @@ require 'omniauth/strategies/oauth2'
|
|
3
3
|
module OmniAuth
|
4
4
|
module Strategies
|
5
5
|
class GoogleOauth2 < OmniAuth::Strategies::OAuth2
|
6
|
+
|
7
|
+
# Possible scopes: userinfo.email,userinfo.profile,plus.me
|
8
|
+
DEFAULT_SCOPE = "userinfo.email,userinfo.profile"
|
9
|
+
|
6
10
|
option :name, 'google_oauth2'
|
7
11
|
|
8
12
|
option :client_options, {
|
9
|
-
:site
|
13
|
+
:site => 'https://accounts.google.com',
|
10
14
|
:authorize_url => '/o/oauth2/auth',
|
11
|
-
:token_url
|
15
|
+
:token_url => '/o/oauth2/token'
|
12
16
|
}
|
13
17
|
|
14
|
-
def
|
15
|
-
|
16
|
-
super
|
18
|
+
def authorize_params
|
19
|
+
base_scope_url = "https://www.googleapis.com/auth/"
|
20
|
+
super.tap do |params|
|
21
|
+
scopes = (params[:scope] || DEFAULT_SCOPE).split(",")
|
22
|
+
scopes.map! { |s| s =~ /^https?:\/\// ? s : "#{base_scope_url}#{s}" }
|
23
|
+
params[:scope] = scopes.join(' ')
|
24
|
+
end
|
17
25
|
end
|
18
26
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
:
|
24
|
-
:
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
options[:authorize_params] = opts.merge(options[:authorize_params])
|
27
|
+
uid{ raw_info['id'] || verified_email }
|
28
|
+
|
29
|
+
info do
|
30
|
+
prune!({
|
31
|
+
:name => raw_info['name'],
|
32
|
+
:email => verified_email,
|
33
|
+
:first_name => raw_info['given_name'],
|
34
|
+
:last_name => raw_info['family_name'],
|
35
|
+
:image => raw_info['picture']
|
36
|
+
})
|
30
37
|
end
|
31
38
|
|
32
|
-
|
33
|
-
|
34
|
-
'
|
35
|
-
'info' => info,
|
36
|
-
'credentials' => {'expires_at' => access_token.expires_at},
|
37
|
-
'extra' => {'user_hash' => user_data}
|
39
|
+
extra do
|
40
|
+
prune!({
|
41
|
+
'raw_info' => raw_info
|
38
42
|
})
|
39
43
|
end
|
40
44
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
else
|
45
|
-
email = nil
|
46
|
-
end
|
45
|
+
def raw_info
|
46
|
+
@raw_info ||= access_token.get('https://www.googleapis.com/oauth2/v1/userinfo').parsed
|
47
|
+
end
|
47
48
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
49
|
+
private
|
50
|
+
|
51
|
+
def prune!(hash)
|
52
|
+
hash.delete_if do |_, value|
|
53
|
+
prune!(value) if value.is_a?(Hash)
|
54
|
+
value.nil? || (value.respond_to?(:empty?) && value.empty?)
|
55
|
+
end
|
53
56
|
end
|
54
57
|
|
55
|
-
def
|
56
|
-
|
58
|
+
def verified_email
|
59
|
+
raw_info['verified_email'] ? raw_info['email'] : nil
|
57
60
|
end
|
61
|
+
|
58
62
|
end
|
59
63
|
end
|
60
64
|
end
|
@@ -22,34 +22,32 @@ describe OmniAuth::Strategies::GoogleOauth2 do
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
describe 'redirect_uri' do
|
26
|
-
before do
|
27
|
-
subject.stub(:callback_url).and_return('http://example.host/default')
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'should be callback_url by default' do
|
31
|
-
subject.request_phase
|
32
|
-
subject.options[:authorize_params][:redirect_uri].should eql('http://example.host/default')
|
33
|
-
end
|
34
|
-
|
35
|
-
it 'should be overriden by an option' do
|
36
|
-
subject.options[:redirect_uri] = 'http://example.host/override'
|
37
|
-
subject.request_phase
|
38
|
-
subject.options[:authorize_params][:redirect_uri].should eql('http://example.host/override')
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
25
|
describe '#callback_path' do
|
43
26
|
it "has the correct callback path" do
|
44
27
|
subject.callback_path.should eq('/auth/google_oauth2/callback')
|
45
28
|
end
|
46
29
|
end
|
47
30
|
|
48
|
-
# These are setup during the request_phase
|
49
|
-
# At init they are blank
|
50
31
|
describe '#authorize_params' do
|
51
|
-
it
|
52
|
-
|
32
|
+
it 'should expand scope shortcuts' do
|
33
|
+
@options = { :authorize_options => [:scope], :scope => 'userinfo.email'}
|
34
|
+
subject.authorize_params['scope'].should eq('https://www.googleapis.com/auth/userinfo.email')
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'should leave full scopes as is' do
|
38
|
+
@options = { :authorize_options => [:scope], :scope => 'https://www.googleapis.com/auth/userinfo.profile'}
|
39
|
+
subject.authorize_params['scope'].should eq('https://www.googleapis.com/auth/userinfo.profile')
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'should join scopes' do
|
43
|
+
@options = { :authorize_options => [:scope], :scope => 'userinfo.profile,userinfo.email'}
|
44
|
+
subject.authorize_params['scope'].should eq('https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email')
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'should set default scope to userinfo.email,userinfo.profile' do
|
48
|
+
@options = { :authorize_options => [:scope]}
|
49
|
+
subject.authorize_params['scope'].should eq('https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile')
|
53
50
|
end
|
54
51
|
end
|
52
|
+
|
55
53
|
end
|
@@ -15,8 +15,8 @@ shared_examples 'an oauth2 strategy' do
|
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'should include top-level options that are marked as :authorize_options' do
|
18
|
-
@options = { :authorize_options => [:scope, :foo], :scope => 'bar', :foo => 'baz' }
|
19
|
-
subject.authorize_params['scope'].should eq('bar')
|
18
|
+
@options = { :authorize_options => [:scope, :foo], :scope => 'http://bar', :foo => 'baz' }
|
19
|
+
subject.authorize_params['scope'].should eq('http://bar')
|
20
20
|
subject.authorize_params['foo'].should eq('baz')
|
21
21
|
end
|
22
22
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omniauth-google-oauth2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 7
|
10
|
+
version: 0.1.7
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Josh Ellithorpe
|
@@ -15,8 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-11-
|
19
|
-
default_executable:
|
18
|
+
date: 2011-11-24 00:00:00 Z
|
20
19
|
dependencies:
|
21
20
|
- !ruby/object:Gem::Dependency
|
22
21
|
name: omniauth
|
@@ -101,7 +100,6 @@ files:
|
|
101
100
|
- spec/omniauth/strategies/google_oauth2_spec.rb
|
102
101
|
- spec/spec_helper.rb
|
103
102
|
- spec/support/shared_examples.rb
|
104
|
-
has_rdoc: true
|
105
103
|
homepage: ""
|
106
104
|
licenses: []
|
107
105
|
|
@@ -131,7 +129,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
129
|
requirements: []
|
132
130
|
|
133
131
|
rubyforge_project:
|
134
|
-
rubygems_version: 1.
|
132
|
+
rubygems_version: 1.8.10
|
135
133
|
signing_key:
|
136
134
|
specification_version: 3
|
137
135
|
summary: A Google oauth2 strategy for OmniAuth 1.0
|