omniauth-google-oauth2 0.2.1 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ Nzk0NDc2ZmZhYjJiOTI1OWI5NDY1NDcwZTNlNWE2NTI0OTk1OWQwNQ==
5
+ data.tar.gz: !binary |-
6
+ NmMzNzgxNzg3NDAxYTE5NGI1ODc5MzA1MDY3YmI1MGNlZjc5ODlkYQ==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ NWEzNjllMDY0ODRkMTY1ZTljMGYwOGQzZWI4YjE3ZWUxMGY1YWUwMjQxMjVh
10
+ NDhjNTRlYzVlOWFiYWU2ZjZhYWQwMThlNzU0NmI1NzE0MTc1NGRlOTYwMjk2
11
+ NTY5ZWE0Mjk4MjNiZTNkN2NmYWQ5ZmJlOWRhYWE2YjUxZDA3YWY=
12
+ data.tar.gz: !binary |-
13
+ NTFhODFlZDlkZDVmMTY4NzJkMzc4YzJmZGMzZjc4NTA2ZGE0Y2NhMDY0MTEx
14
+ YTg5ZmU5NGZhOWFjNWIzOThiNjMxMzlkMzljMjFlZTFlNDVhYTY5NzZhY2Iz
15
+ YWU5YzA4MDFiOWY5NDEyNWUxMDQxZWEzNDAzOTYwM2RlMDkzMjM=
data/.ruby-gemset ADDED
@@ -0,0 +1 @@
1
+ omniauth-google-oauth2
data/.ruby-version CHANGED
@@ -1 +1 @@
1
- ruby-1.9.3
1
+ 1.9.3-p484
data/.travis.yml CHANGED
@@ -1,6 +1,8 @@
1
+ before_install:
2
+ - gem update --system 2.1.11
1
3
  language: ruby
2
4
  rvm:
3
5
  - "1.8.7"
4
6
  - "1.9.2"
5
7
  - "1.9.3"
6
- - "2.0.0"
8
+ - "2.0.0"
data/README.md CHANGED
@@ -28,7 +28,7 @@ end
28
28
 
29
29
  You can now access the OmniAuth Google OAuth2 URL: `/auth/google_oauth2`
30
30
 
31
- Fore more examples please check out `examples/omni_auth.rb`
31
+ For more examples please check out `examples/omni_auth.rb`
32
32
 
33
33
  ## Configuration
34
34
 
@@ -36,7 +36,7 @@ You can configure several options, which you pass in to the `provider` method vi
36
36
 
37
37
  * `scope`: A comma-separated list of permissions you want to request from the user. See the [Google OAuth 2.0 Playground](https://developers.google.com/oauthplayground/) for a full list of available permissions. Caveats:
38
38
  * The `userinfo.email` and `userinfo.profile` scopes are used by default. By defining your own `scope`, you override these defaults. If you need these scopes, don't forget to add them yourself!
39
- * Scopes starting with `https://www.googleapis.com/auth/` do not need that prefix specified. So while you should use the smaller scope `books` since that permission starts with the mentioned prefix, you should use the full scope URL `https://docs.google.com/feeds/` to access a user's docs, for example.
39
+ * Scopes starting with `https://www.googleapis.com/auth/` do not need that prefix specified. So while you can use the smaller scope `books` since that permission starts with the mentioned prefix, you should use the full scope URL `https://docs.google.com/feeds/` to access a user's docs, for example.
40
40
  * `prompt`: A space-delimited list of string values that determines whether the user is re-prompted for authentication and/or consent. Possible values are:
41
41
  * `none`: No authentication or consent pages will be displayed; it will return an error if the user is not already authenticated and has not pre-configured consent for the requested scopes. This can be used as a method to check for existing authentication and/or consent.
42
42
  * `consent`: The user will always be prompted for consent, even if he has previously allowed access a given set of scopes.
@@ -50,16 +50,19 @@ You can configure several options, which you pass in to the `provider` method vi
50
50
 
51
51
  Defaults to `original`.
52
52
 
53
- * `image_size`: The size of the user's profile picture. The image returned will have width equal to the given value and variable height, according to the `image_aspect_ratio` chosen. Additionally, a picture with specific width and height can be request by setting this option to a hash with `:width` and `:height` as keys. If only `:width` or `:height` is specified, a picture whose width or height is closest to the requested size and requested aspect ratio will be returned. Defaults to the original width and height of the picture.
53
+ * `image_size`: The size of the user's profile picture. The image returned will have width equal to the given value and variable height, according to the `image_aspect_ratio` chosen. Additionally, a picture with specific width and height can be requested by setting this option to a hash with `width` and `height` as keys. If only `width` or `height` is specified, a picture whose width or height is closest to the requested size and requested aspect ratio will be returned. Defaults to the original width and height of the picture.
54
54
 
55
- * `access_type`: Defaults to `offline`, so a refresh token is sent to be used when the user is not present at the browser. Can be set to `online`.
55
+ * `name`: The name of the strategy. The default name is `google_oauth2` but it can be changed to any value, for example `google`. The OmniAuth URL will thus change to `/auth/google` and the `provider` key in the auth hash will then return `google`.
56
56
 
57
- Here's an example of a possible configuration where the user is asked for extra permissions, the user is always prompted to select his account when logging in and the user's profile picture is returned as a thumbnail:
57
+ * `access_type`: Defaults to `offline`, so a refresh token is sent to be used when the user is not present at the browser. Can be set to `online`. Note that if you need a refresh token, google requires you to also to specify the option `prompt: 'consent'`, which is not a default.
58
+
59
+ Here's an example of a possible configuration where the strategy name is changed, the user is asked for extra permissions, the user is always prompted to select his account when logging in and the user's profile picture is returned as a thumbnail:
58
60
 
59
61
  ```ruby
60
62
  Rails.application.config.middleware.use OmniAuth::Builder do
61
63
  provider :google_oauth2, ENV["GOOGLE_KEY"], ENV["GOOGLE_SECRET"],
62
64
  {
65
+ :name => "google",
63
66
  :scope => "userinfo.email, userinfo.profile, plus.me, http://gdata.youtube.com",
64
67
  :prompt => "select_account",
65
68
  :image_aspect_ratio => "square",
@@ -1,5 +1,5 @@
1
1
  module OmniAuth
2
2
  module GoogleOauth2
3
- VERSION = "0.2.1"
3
+ VERSION = "0.2.2"
4
4
  end
5
5
  end
@@ -8,7 +8,9 @@ module OmniAuth
8
8
 
9
9
  option :name, 'google_oauth2'
10
10
 
11
- option :authorize_options, [:access_type, :hd, :login_hint, :prompt, :scope, :state, :redirect_uri]
11
+ option :skip_friends, true
12
+
13
+ option :authorize_options, [:access_type, :hd, :login_hint, :prompt, :request_visible_actions, :scope, :state, :redirect_uri]
12
14
 
13
15
  option :client_options, {
14
16
  :site => 'https://accounts.google.com',
@@ -49,7 +51,9 @@ module OmniAuth
49
51
 
50
52
  extra do
51
53
  hash = {}
54
+ hash[:id_token] = access_token['id_token']
52
55
  hash[:raw_info] = raw_info unless skip_info?
56
+ hash[:raw_friend_info] = raw_friend_info(raw_info['id']) unless skip_info? || options[:skip_friends]
53
57
  prune! hash
54
58
  end
55
59
 
@@ -57,6 +61,10 @@ module OmniAuth
57
61
  @raw_info ||= access_token.get('https://www.googleapis.com/oauth2/v1/userinfo').parsed
58
62
  end
59
63
 
64
+ def raw_friend_info(id)
65
+ @raw_friend_info ||= access_token.get("https://www.googleapis.com/plus/v1/people/#{id}/people/visible").parsed
66
+ end
67
+
60
68
  def custom_build_access_token
61
69
  if verify_token(request.params['id_token'], request.params['access_token'])
62
70
  ::OAuth2::AccessToken.from_hash(client, request.params.dup)
@@ -121,6 +121,17 @@ describe OmniAuth::Strategies::GoogleOauth2 do
121
121
  end
122
122
  end
123
123
 
124
+ describe 'request_visible_actions' do
125
+ it "should default to nil" do
126
+ subject.authorize_params['request_visible_actions'].should eq(nil)
127
+ end
128
+
129
+ it 'should set the request_visible_actions parameter if present' do
130
+ @options = {:request_visible_actions => 'something'}
131
+ subject.authorize_params['request_visible_actions'].should eq('something')
132
+ end
133
+ end
134
+
124
135
  describe 'scope' do
125
136
  it 'should expand scope shortcuts' do
126
137
  @options = {:scope => 'userinfo.email'}
@@ -238,15 +249,82 @@ describe OmniAuth::Strategies::GoogleOauth2 do
238
249
  end
239
250
  end
240
251
 
241
- describe 'raw info' do
242
- it 'should include raw_info in extras hash by default' do
243
- subject.stub(:raw_info) { {:foo => 'bar'} }
244
- subject.extra[:raw_info].should eq({:foo => 'bar'})
252
+ describe '#extra' do
253
+ let(:client) do
254
+ OAuth2::Client.new('abc', 'def') do |builder|
255
+ builder.request :url_encoded
256
+ builder.adapter :test do |stub|
257
+ stub.get('/oauth2/v1/userinfo') {|env| [200, {'content-type' => 'application/json'}, '{"id": "12345"}']}
258
+ stub.get('/plus/v1/people/12345/people/visible') {|env| [200, {'content-type' => 'application/json'}, '[{"foo":"bar"}]']}
259
+ end
260
+ end
261
+ end
262
+ let(:access_token) { OAuth2::AccessToken.from_hash(client, {}) }
263
+
264
+ before { subject.stub(:access_token => access_token) }
265
+
266
+ describe 'id_token' do
267
+ context 'when the id_token is passed into the access token' do
268
+ let(:access_token) { OAuth2::AccessToken.from_hash(client, {'id_token' => 'xyz'}) }
269
+
270
+ it 'should include id_token when set on the access_token' do
271
+ subject.extra.should include(:id_token => 'xyz')
272
+ end
273
+ end
274
+
275
+ context 'when the id_token is missing' do
276
+ it 'should not include id_token' do
277
+ subject.extra.should_not have_key(:id_token)
278
+ end
279
+ end
280
+ end
281
+
282
+ describe 'raw_info' do
283
+ context 'when skip_info is true' do
284
+ before { subject.options[:skip_info] = true }
285
+
286
+ it 'should not include raw_info' do
287
+ subject.extra.should_not have_key(:raw_info)
288
+ end
289
+ end
290
+
291
+ context 'when skip_info is false' do
292
+ before { subject.options[:skip_info] = false }
293
+
294
+ it 'should include raw_info' do
295
+ subject.extra[:raw_info].should eq('id' => '12345')
296
+ end
297
+ end
245
298
  end
246
299
 
247
- it 'should not include raw_info in extras hash when skip_info is specified' do
248
- @options = {:skip_info => true}
249
- subject.extra.should_not have_key(:raw_info)
300
+ describe 'raw_friend_info' do
301
+ context 'when skip_info is true' do
302
+ before { subject.options[:skip_info] = true }
303
+
304
+ it 'should not include raw_friend_info' do
305
+ subject.extra.should_not have_key(:raw_friend_info)
306
+ end
307
+ end
308
+
309
+ context 'when skip_info is false' do
310
+ before { subject.options[:skip_info] = false }
311
+
312
+ context 'when skip_friends is true' do
313
+ before { subject.options[:skip_friends] = true }
314
+
315
+ it 'should not include raw_friend_info' do
316
+ subject.extra.should_not have_key(:raw_friend_info)
317
+ end
318
+ end
319
+
320
+ context 'when skip_friends is false' do
321
+ before { subject.options[:skip_friends] = false }
322
+
323
+ it 'should not include raw_friend_info' do
324
+ subject.extra[:raw_friend_info].should eq([{'foo' => 'bar'}])
325
+ end
326
+ end
327
+ end
250
328
  end
251
329
  end
252
330
 
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-google-oauth2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
5
- prerelease:
4
+ version: 0.2.2
6
5
  platform: ruby
7
6
  authors:
8
7
  - Josh Ellithorpe
@@ -10,12 +9,11 @@ authors:
10
9
  autorequire:
11
10
  bindir: bin
12
11
  cert_chain: []
13
- date: 2013-08-16 00:00:00.000000000 Z
12
+ date: 2013-12-31 00:00:00.000000000 Z
14
13
  dependencies:
15
14
  - !ruby/object:Gem::Dependency
16
15
  name: omniauth
17
16
  requirement: !ruby/object:Gem::Requirement
18
- none: false
19
17
  requirements:
20
18
  - - ~>
21
19
  - !ruby/object:Gem::Version
@@ -23,7 +21,6 @@ dependencies:
23
21
  type: :runtime
24
22
  prerelease: false
25
23
  version_requirements: !ruby/object:Gem::Requirement
26
- none: false
27
24
  requirements:
28
25
  - - ~>
29
26
  - !ruby/object:Gem::Version
@@ -31,7 +28,6 @@ dependencies:
31
28
  - !ruby/object:Gem::Dependency
32
29
  name: omniauth-oauth2
33
30
  requirement: !ruby/object:Gem::Requirement
34
- none: false
35
31
  requirements:
36
32
  - - ! '>='
37
33
  - !ruby/object:Gem::Version
@@ -39,7 +35,6 @@ dependencies:
39
35
  type: :runtime
40
36
  prerelease: false
41
37
  version_requirements: !ruby/object:Gem::Requirement
42
- none: false
43
38
  requirements:
44
39
  - - ! '>='
45
40
  - !ruby/object:Gem::Version
@@ -47,7 +42,6 @@ dependencies:
47
42
  - !ruby/object:Gem::Dependency
48
43
  name: rspec
49
44
  requirement: !ruby/object:Gem::Requirement
50
- none: false
51
45
  requirements:
52
46
  - - ~>
53
47
  - !ruby/object:Gem::Version
@@ -55,7 +49,6 @@ dependencies:
55
49
  type: :development
56
50
  prerelease: false
57
51
  version_requirements: !ruby/object:Gem::Requirement
58
- none: false
59
52
  requirements:
60
53
  - - ~>
61
54
  - !ruby/object:Gem::Version
@@ -63,7 +56,6 @@ dependencies:
63
56
  - !ruby/object:Gem::Dependency
64
57
  name: rake
65
58
  requirement: !ruby/object:Gem::Requirement
66
- none: false
67
59
  requirements:
68
60
  - - ! '>='
69
61
  - !ruby/object:Gem::Version
@@ -71,7 +63,6 @@ dependencies:
71
63
  type: :development
72
64
  prerelease: false
73
65
  version_requirements: !ruby/object:Gem::Requirement
74
- none: false
75
66
  requirements:
76
67
  - - ! '>='
77
68
  - !ruby/object:Gem::Version
@@ -84,6 +75,7 @@ extensions: []
84
75
  extra_rdoc_files: []
85
76
  files:
86
77
  - .gitignore
78
+ - .ruby-gemset
87
79
  - .ruby-version
88
80
  - .rvmrc
89
81
  - .travis.yml
@@ -101,32 +93,25 @@ files:
101
93
  - spec/spec_helper.rb
102
94
  homepage: ''
103
95
  licenses: []
96
+ metadata: {}
104
97
  post_install_message:
105
98
  rdoc_options: []
106
99
  require_paths:
107
100
  - lib
108
101
  required_ruby_version: !ruby/object:Gem::Requirement
109
- none: false
110
102
  requirements:
111
103
  - - ! '>='
112
104
  - !ruby/object:Gem::Version
113
105
  version: '0'
114
- segments:
115
- - 0
116
- hash: -775688096927888860
117
106
  required_rubygems_version: !ruby/object:Gem::Requirement
118
- none: false
119
107
  requirements:
120
108
  - - ! '>='
121
109
  - !ruby/object:Gem::Version
122
110
  version: '0'
123
- segments:
124
- - 0
125
- hash: -775688096927888860
126
111
  requirements: []
127
112
  rubyforge_project:
128
- rubygems_version: 1.8.25
113
+ rubygems_version: 2.0.7
129
114
  signing_key:
130
- specification_version: 3
115
+ specification_version: 4
131
116
  summary: A Google OAuth2 strategy for OmniAuth 1.x
132
117
  test_files: []