omniauth-google-oauth2 0.8.1 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +21 -0
- data/.travis.yml +7 -3
- data/CHANGELOG.md +44 -0
- data/README.md +5 -1
- data/examples/Gemfile +1 -0
- data/lib/omniauth/google_oauth2/version.rb +1 -1
- data/lib/omniauth/strategies/google_oauth2.rb +20 -5
- data/omniauth-google-oauth2.gemspec +2 -2
- data/spec/omniauth/strategies/google_oauth2_spec.rb +62 -3
- metadata +11 -10
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3b1fdc81978e86a4a1b0c493bc1d83f9e6fa1e613bfb69b2feee8af2a6869b99
|
4
|
+
data.tar.gz: 02efca2850b5e053630aa7da102a9162aca87d16d6ab9fb6408654fd98c145c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6f2c99c806cc6d08dadcc472474418cfbace26481e1d828aa90571d5bbf77e3e26c9b600fd6fd1d97c8a71d4e349d230f87a5e11a9106874d106a240f3cad9ec
|
7
|
+
data.tar.gz: a66acdde9fdda8ec2f00f861a0a1a2ca89f8faeae84388f44dca938db0e9f55ca6d166de2633c4e27ffe7cf44bcfcc5ef0c5f0a4bfbcc3990d13c89ff7ac322c
|
@@ -0,0 +1,21 @@
|
|
1
|
+
name: CI
|
2
|
+
|
3
|
+
on: [push, pull_request]
|
4
|
+
|
5
|
+
jobs:
|
6
|
+
test:
|
7
|
+
runs-on: ubuntu-latest
|
8
|
+
strategy:
|
9
|
+
matrix:
|
10
|
+
ruby-version: ['2.3', '2.4', '2.5', '2.6', '2.7', '3.0', '3.1']
|
11
|
+
|
12
|
+
steps:
|
13
|
+
- uses: actions/checkout@v2
|
14
|
+
- name: Set up Ruby ${{ matrix.ruby-version }}
|
15
|
+
uses: ruby/setup-ruby@v1
|
16
|
+
with:
|
17
|
+
ruby-version: ${{ matrix.ruby-version }}
|
18
|
+
bundler-cache: true # 'bundle install' and cache
|
19
|
+
- name: Run specs
|
20
|
+
run: |
|
21
|
+
bundle exec rake
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,49 @@
|
|
1
1
|
# Changelog
|
2
2
|
All notable changes to this project will be documented in this file.
|
3
3
|
|
4
|
+
## 1.0.1 - 2022-03-10
|
5
|
+
|
6
|
+
### Added
|
7
|
+
- Output granted scopes in credentials block of the auth hash.
|
8
|
+
- Migrated to GitHub actions.
|
9
|
+
|
10
|
+
### Deprecated
|
11
|
+
- Nothing.
|
12
|
+
|
13
|
+
### Removed
|
14
|
+
- Nothing.
|
15
|
+
|
16
|
+
### Fixed
|
17
|
+
- Overriding the `redirect_uri` via params or JSON request body.
|
18
|
+
|
19
|
+
## 1.0.0 - 2021-03-14
|
20
|
+
|
21
|
+
### Added
|
22
|
+
- Support for Omniauth 2.x!
|
23
|
+
|
24
|
+
### Deprecated
|
25
|
+
- Nothing.
|
26
|
+
|
27
|
+
### Removed
|
28
|
+
- Support for Omniauth 1.x.
|
29
|
+
|
30
|
+
### Fixed
|
31
|
+
- Nothing.
|
32
|
+
|
33
|
+
## 0.8.2 - 2021-03-14
|
34
|
+
|
35
|
+
### Added
|
36
|
+
- Constrains the version to Omniauth 1.x.
|
37
|
+
|
38
|
+
### Deprecated
|
39
|
+
- Nothing.
|
40
|
+
|
41
|
+
### Removed
|
42
|
+
- Nothing.
|
43
|
+
|
44
|
+
### Fixed
|
45
|
+
- Nothing.
|
46
|
+
|
4
47
|
## 0.8.1 - 2020-12-12
|
5
48
|
|
6
49
|
### Added
|
@@ -14,6 +57,7 @@ All notable changes to this project will be documented in this file.
|
|
14
57
|
|
15
58
|
### Fixed
|
16
59
|
- A few minor issues with .rubocop.yml.
|
60
|
+
- Issues with image resizing code when the image came with size information from Google.
|
17
61
|
|
18
62
|
## 0.8.0 - 2019-08-21
|
19
63
|
|
data/README.md
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
[![Gem Version](https://badge.fury.io/rb/omniauth-google-oauth2.svg)](https://badge.fury.io/rb/omniauth-google-oauth2)
|
2
|
-
[![Build Status](https://travis-ci.org/zquestz/omniauth-google-oauth2.svg)](https://travis-ci.org/zquestz/omniauth-google-oauth2)
|
3
2
|
|
4
3
|
# OmniAuth Google OAuth2 Strategy
|
5
4
|
|
@@ -34,6 +33,7 @@ Here's an example for adding the middleware to a Rails app in `config/initialize
|
|
34
33
|
Rails.application.config.middleware.use OmniAuth::Builder do
|
35
34
|
provider :google_oauth2, ENV['GOOGLE_CLIENT_ID'], ENV['GOOGLE_CLIENT_SECRET']
|
36
35
|
end
|
36
|
+
OmniAuth.config.allowed_request_methods = %i[get]
|
37
37
|
```
|
38
38
|
|
39
39
|
You can now access the OmniAuth Google OAuth2 URL: `/auth/google_oauth2`
|
@@ -217,6 +217,10 @@ end
|
|
217
217
|
For your views you can login using:
|
218
218
|
|
219
219
|
```erb
|
220
|
+
<%# omniauth-google-oauth2 1.0.x uses OmniAuth 2 and requires using HTTP Post to initiate authentication: %>
|
221
|
+
<%= link_to "Sign in with Google", user_google_oauth2_omniauth_authorize_path, method: :post %>
|
222
|
+
|
223
|
+
<%# omniauth-google-oauth2 prior 1.0.0: %>
|
220
224
|
<%= link_to "Sign in with Google", user_google_oauth2_omniauth_authorize_path %>
|
221
225
|
|
222
226
|
<%# Devise prior 4.1.0: %>
|
data/examples/Gemfile
CHANGED
@@ -60,6 +60,11 @@ module OmniAuth
|
|
60
60
|
)
|
61
61
|
end
|
62
62
|
|
63
|
+
credentials do
|
64
|
+
# Tokens and expiration will be used from OAuth2 strategy credentials block
|
65
|
+
prune!({ 'scope' => token_info(access_token.token)['scope'] })
|
66
|
+
end
|
67
|
+
|
63
68
|
extra do
|
64
69
|
hash = {}
|
65
70
|
hash[:id_token] = access_token['id_token']
|
@@ -102,7 +107,7 @@ module OmniAuth
|
|
102
107
|
private
|
103
108
|
|
104
109
|
def callback_url
|
105
|
-
options[:redirect_uri] || (full_host +
|
110
|
+
options[:redirect_uri] || (full_host + callback_path)
|
106
111
|
end
|
107
112
|
|
108
113
|
def get_access_token(request)
|
@@ -121,8 +126,9 @@ module OmniAuth
|
|
121
126
|
request.body.rewind # rewind request body for downstream middlewares
|
122
127
|
verifier = body && body['code']
|
123
128
|
access_token = body && body['access_token']
|
129
|
+
redirect_uri ||= body && body['redirect_uri']
|
124
130
|
if verifier
|
125
|
-
client_get_token(verifier, 'postmessage')
|
131
|
+
client_get_token(verifier, redirect_uri || 'postmessage')
|
126
132
|
elsif verify_token(access_token)
|
127
133
|
::OAuth2::AccessToken.from_hash(client, body.dup)
|
128
134
|
end
|
@@ -214,12 +220,21 @@ module OmniAuth
|
|
214
220
|
URI.encode_www_form(stripped_params)
|
215
221
|
end
|
216
222
|
|
223
|
+
def token_info(access_token)
|
224
|
+
return nil unless access_token
|
225
|
+
|
226
|
+
@token_info ||= Hash.new do |h, k|
|
227
|
+
h[k] = client.request(:get, 'https://www.googleapis.com/oauth2/v3/tokeninfo', params: { access_token: access_token }).parsed
|
228
|
+
end
|
229
|
+
|
230
|
+
@token_info[access_token]
|
231
|
+
end
|
232
|
+
|
217
233
|
def verify_token(access_token)
|
218
234
|
return false unless access_token
|
219
235
|
|
220
|
-
|
221
|
-
|
222
|
-
raw_response['aud'] == options.client_id || options.authorized_client_ids.include?(raw_response['aud'])
|
236
|
+
token_info = token_info(access_token)
|
237
|
+
token_info['aud'] == options.client_id || options.authorized_client_ids.include?(token_info['aud'])
|
223
238
|
end
|
224
239
|
|
225
240
|
def verify_hd(access_token)
|
@@ -22,8 +22,8 @@ Gem::Specification.new do |gem|
|
|
22
22
|
|
23
23
|
gem.add_runtime_dependency 'jwt', '>= 2.0'
|
24
24
|
gem.add_runtime_dependency 'oauth2', '~> 1.1'
|
25
|
-
gem.add_runtime_dependency 'omniauth', '
|
26
|
-
gem.add_runtime_dependency 'omniauth-oauth2', '
|
25
|
+
gem.add_runtime_dependency 'omniauth', '~> 2.0'
|
26
|
+
gem.add_runtime_dependency 'omniauth-oauth2', '~> 1.7.1'
|
27
27
|
|
28
28
|
gem.add_development_dependency 'rake', '~> 12.0'
|
29
29
|
gem.add_development_dependency 'rspec', '~> 3.6'
|
@@ -289,14 +289,26 @@ describe OmniAuth::Strategies::GoogleOauth2 do
|
|
289
289
|
end
|
290
290
|
end
|
291
291
|
|
292
|
-
describe '#
|
292
|
+
describe '#callback_url' do
|
293
|
+
let(:base_url) { 'https://example.com' }
|
294
|
+
|
293
295
|
it 'has the correct default callback path' do
|
294
|
-
|
296
|
+
allow(subject).to receive(:full_host) { base_url }
|
297
|
+
allow(subject).to receive(:script_name) { '' }
|
298
|
+
expect(subject.send(:callback_url)).to eq(base_url + '/auth/google_oauth2/callback')
|
299
|
+
end
|
300
|
+
|
301
|
+
it 'should set the callback path with script_name if present' do
|
302
|
+
allow(subject).to receive(:full_host) { base_url }
|
303
|
+
allow(subject).to receive(:script_name) { '/v1' }
|
304
|
+
expect(subject.send(:callback_url)).to eq(base_url + '/v1/auth/google_oauth2/callback')
|
295
305
|
end
|
296
306
|
|
297
307
|
it 'should set the callback_path parameter if present' do
|
298
308
|
@options = { callback_path: '/auth/foo/callback' }
|
299
|
-
|
309
|
+
allow(subject).to receive(:full_host) { base_url }
|
310
|
+
allow(subject).to receive(:script_name) { '' }
|
311
|
+
expect(subject.send(:callback_url)).to eq(base_url + '/auth/foo/callback')
|
300
312
|
end
|
301
313
|
end
|
302
314
|
|
@@ -335,6 +347,37 @@ describe OmniAuth::Strategies::GoogleOauth2 do
|
|
335
347
|
end
|
336
348
|
end
|
337
349
|
|
350
|
+
describe '#credentials' do
|
351
|
+
let(:client) { OAuth2::Client.new('abc', 'def') }
|
352
|
+
let(:access_token) { OAuth2::AccessToken.from_hash(client, access_token: 'valid_access_token', expires_at: 123_456_789, refresh_token: 'valid_refresh_token') }
|
353
|
+
before(:each) do
|
354
|
+
allow(subject).to receive(:access_token).and_return(access_token)
|
355
|
+
subject.options.client_options[:connection_build] = proc do |builder|
|
356
|
+
builder.request :url_encoded
|
357
|
+
builder.adapter :test do |stub|
|
358
|
+
stub.get('/oauth2/v3/tokeninfo?access_token=valid_access_token') do
|
359
|
+
[200, { 'Content-Type' => 'application/json; charset=UTF-8' }, JSON.dump(
|
360
|
+
aud: '000000000000.apps.googleusercontent.com',
|
361
|
+
sub: '123456789',
|
362
|
+
scope: 'profile email'
|
363
|
+
)]
|
364
|
+
end
|
365
|
+
end
|
366
|
+
end
|
367
|
+
end
|
368
|
+
|
369
|
+
it 'should return access token and (optionally) refresh token' do
|
370
|
+
expect(subject.credentials.to_h).to \
|
371
|
+
match(hash_including(
|
372
|
+
'token' => 'valid_access_token',
|
373
|
+
'refresh_token' => 'valid_refresh_token',
|
374
|
+
'scope' => 'profile email',
|
375
|
+
'expires_at' => 123_456_789,
|
376
|
+
'expires' => true
|
377
|
+
))
|
378
|
+
end
|
379
|
+
end
|
380
|
+
|
338
381
|
describe '#extra' do
|
339
382
|
let(:client) do
|
340
383
|
OAuth2::Client.new('abc', 'def') do |builder|
|
@@ -629,6 +672,22 @@ describe OmniAuth::Strategies::GoogleOauth2 do
|
|
629
672
|
subject.build_access_token
|
630
673
|
end
|
631
674
|
|
675
|
+
it 'reads the redirect uri from a json request body' do
|
676
|
+
body = StringIO.new(%({"code":"json_access_token", "redirect_uri":"sample"}))
|
677
|
+
client = double(:client)
|
678
|
+
auth_code = double(:auth_code)
|
679
|
+
|
680
|
+
allow(request).to receive(:xhr?).and_return(false)
|
681
|
+
allow(request).to receive(:content_type).and_return('application/json')
|
682
|
+
allow(request).to receive(:body).and_return(body)
|
683
|
+
allow(client).to receive(:auth_code).and_return(auth_code)
|
684
|
+
expect(subject).to receive(:client).and_return(client)
|
685
|
+
|
686
|
+
expect(auth_code).to receive(:get_token).with('json_access_token', { redirect_uri: 'sample' }, {})
|
687
|
+
|
688
|
+
subject.build_access_token
|
689
|
+
end
|
690
|
+
|
632
691
|
it 'reads the access token from a json request body' do
|
633
692
|
body = StringIO.new(%({"access_token":"valid_access_token"}))
|
634
693
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omniauth-google-oauth2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Josh Ellithorpe
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2022-03-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: jwt
|
@@ -43,30 +43,30 @@ dependencies:
|
|
43
43
|
name: omniauth
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - "
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
48
|
+
version: '2.0'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - "
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
55
|
+
version: '2.0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: omniauth-oauth2
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - "
|
60
|
+
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
62
|
+
version: 1.7.1
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - "
|
67
|
+
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
69
|
+
version: 1.7.1
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rake
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|
@@ -117,6 +117,7 @@ executables: []
|
|
117
117
|
extensions: []
|
118
118
|
extra_rdoc_files: []
|
119
119
|
files:
|
120
|
+
- ".github/workflows/ci.yml"
|
120
121
|
- ".gitignore"
|
121
122
|
- ".rubocop.yml"
|
122
123
|
- ".travis.yml"
|