omniauth-seznam-cz 0.0.1 → 0.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f009f7470aef979d8104389d3beb5e477bd09fa974da325913c22dbaafa84959
4
- data.tar.gz: 495f8ce948f74219cda3be1df8eb6465a3bd3b5be36b72405f712242c73cc8ca
3
+ metadata.gz: c648d155cac9a61f968db43ea6fc26ff6d665921fec222a48b66211673f9b7ad
4
+ data.tar.gz: 6c9334d0ff6cea90af56f1f2f24203ce9b655f7548f2aa76f6b0bcaabe2f9c9c
5
5
  SHA512:
6
- metadata.gz: '09c096615acd0f366d707812bc2e1faf78277b57636db68dd2f31e1b9fe3dc1a06931e32c6a40f59fc2f0f6a32a769365ccc0fc58075482ae911b69c5516fed4'
7
- data.tar.gz: ab3cb2cb209b02e19f7e7d39aa8a9cc3e283f1de54b446f5f6ef2bd4acbd06ee67025fa96aa2156519b90eeaf20d6f5be2e73f20f5c299fd86c5658ab54961ae
6
+ metadata.gz: ca5180f1309200a762c9fd2c1fdad9d346730b96c2b43a4f4c186e8b8675c35edb689ca27cae35e91ae95fa55052b71a0e5eaad576685b92cd2beabfe0e2d8ea
7
+ data.tar.gz: 6651969510ae8717ed2e8018d2585198ed09ede87dfbdbeda4691094e00b4b5ca86573eafee8feb549831bd3e13917ea53ad3f5a746687e331ac1b8c91057341
data/.gitignore CHANGED
@@ -1,22 +1,13 @@
1
1
  *.gem
2
- *.rbc
3
2
  .bundle
4
3
  .config
5
- .yardoc
6
4
  .ruby-gemset
7
5
  .ruby-version
8
6
  .rvmrc
9
- Gemfile.lock
10
- InstalledFiles
11
- _yardoc
12
- coverage
13
- doc/
14
- lib/bundler/man
15
- pkg
16
7
  rdoc
17
8
  spec/reports
18
9
  test/tmp
19
10
  test/version_tmp
20
11
  tmp
21
- .powenv
22
12
  .idea/
13
+ Gemfile.lock
data/.travis.yml CHANGED
@@ -1,6 +1,5 @@
1
1
  language: ruby
2
2
  cache: bundler
3
3
  rvm:
4
- - '2.7.2'
5
- - '2.7.6'
4
+ - '2.7.4'
6
5
  - '3.0.0'
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  [![Gem Version](https://badge.fury.io/rb/omniauth-seznam-cz.svg)](https://badge.fury.io/rb/omniauth-seznam-cz)
2
- [![Build Status](https://travis-ci.com/zquestz/omniauth-seznam-cz.svg)](https://travis-ci.com/zquestz/omniauth-seznam-cz)
2
+ [![Build Status](https://app.travis-ci.com/honzasterba/omniauth-seznam-cz.svg?branch=main)](https://app.travis-ci.com/honzasterba/omniauth-seznam-cz)
3
3
 
4
4
  # OmniAuth Seznam.cz Strategy
5
5
 
@@ -0,0 +1,5 @@
1
+ #!/bin/bash
2
+
3
+ rm *.gem
4
+ gem build omniauth-seznam-cz.gemspec
5
+ gem push omniauth-seznam-cz-*.gem
@@ -2,6 +2,6 @@
2
2
 
3
3
  module OmniAuth
4
4
  module SeznamCz
5
- VERSION = '0.0.1'
5
+ VERSION = '0.1.0'
6
6
  end
7
7
  end
@@ -6,23 +6,22 @@ require 'uri'
6
6
 
7
7
  module OmniAuth
8
8
  module Strategies
9
- # Main class for Seznam.cz strategy.
10
9
  class SeznamCz < OmniAuth::Strategies::OAuth2
11
10
  ALLOWED_ISSUERS = ['login.szn.cz'].freeze
12
11
  BASE_SCOPES = %w[identity contact-phone avatar].freeze
13
12
  DEFAULT_SCOPE = 'identity'
14
13
  USER_INFO_URL = 'https://login.szn.cz/api/v1/user'
15
- IMAGE_SIZE_REGEXP = /(s\d+(-c)?)|(w\d+-h\d+(-c)?)|(w\d+(-c)?)|(h\d+(-c)?)|c/
16
14
 
17
15
  option :name, 'seznam_cz'
18
16
  option :skip_image_info, true
19
- option :authorize_options, %i[redirect_uri]
17
+ option :authorize_options, %i[scope state redirect_uri]
20
18
  option :authorized_client_ids, []
21
19
 
22
20
  option :client_options,
23
- site: 'https://login.szn.cz/api/v1/oauth',
24
- authorize_url: 'https://login.szn.cz/api/v1/oauth/auth',
25
- token_url: '/token'
21
+ site: 'https://login.szn.cz',
22
+ authorize_url: '/api/v1/oauth/auth',
23
+ token_url: '/api/v1/oauth/token',
24
+ auth_scheme: :request_body
26
25
 
27
26
  def authorize_params
28
27
  super.tap do |params|
@@ -31,15 +31,15 @@ describe OmniAuth::Strategies::SeznamCz do
31
31
 
32
32
  describe '#client_options' do
33
33
  it 'has correct site' do
34
- expect(subject.client.site).to eq('https://oauth2.googleapis.com')
34
+ expect(subject.client.site).to eq('https://login.szn.cz')
35
35
  end
36
36
 
37
37
  it 'has correct authorize_url' do
38
- expect(subject.client.options[:authorize_url]).to eq('https://accounts.google.com/o/oauth2/auth')
38
+ expect(subject.client.options[:authorize_url]).to eq('/api/v1/oauth/auth')
39
39
  end
40
40
 
41
41
  it 'has correct token_url' do
42
- expect(subject.client.options[:token_url]).to eq('/token')
42
+ expect(subject.client.options[:token_url]).to eq('/api/v1/oauth/token')
43
43
  end
44
44
 
45
45
  describe 'overrides' do
@@ -80,13 +80,6 @@ describe OmniAuth::Strategies::SeznamCz do
80
80
  end
81
81
 
82
82
  describe '#authorize_options' do
83
- %i[access_type hd login_hint prompt scope state device_id device_name].each do |k|
84
- it "should support #{k}" do
85
- @options = { k => 'http://someval' }
86
- expect(subject.authorize_params[k.to_s]).to eq('http://someval')
87
- end
88
- end
89
-
90
83
  describe 'redirect_uri' do
91
84
  it 'should default to nil' do
92
85
  @options = {}
@@ -99,116 +92,24 @@ describe OmniAuth::Strategies::SeznamCz do
99
92
  end
100
93
  end
101
94
 
102
- describe 'access_type' do
103
- it 'should default to "offline"' do
104
- @options = {}
105
- expect(subject.authorize_params['access_type']).to eq('offline')
106
- end
107
-
108
- it 'should set the access_type parameter if present' do
109
- @options = { access_type: 'online' }
110
- expect(subject.authorize_params['access_type']).to eq('online')
111
- end
112
- end
113
-
114
- describe 'hd' do
115
- it 'should default to nil' do
116
- expect(subject.authorize_params['hd']).to eq(nil)
117
- end
118
-
119
- it 'should set the hd (hosted domain) parameter if present' do
120
- @options = { hd: 'example.com' }
121
- expect(subject.authorize_params['hd']).to eq('example.com')
122
- end
123
-
124
- it 'should set the hd parameter and work with nil hd (gmail)' do
125
- @options = { hd: nil }
126
- expect(subject.authorize_params['hd']).to eq(nil)
127
- end
128
-
129
- it 'should set the hd parameter to * if set (only allows G Suite emails)' do
130
- @options = { hd: '*' }
131
- expect(subject.authorize_params['hd']).to eq('*')
132
- end
133
- end
134
-
135
- describe 'login_hint' do
136
- it 'should default to nil' do
137
- expect(subject.authorize_params['login_hint']).to eq(nil)
138
- end
139
-
140
- it 'should set the login_hint parameter if present' do
141
- @options = { login_hint: 'john@example.com' }
142
- expect(subject.authorize_params['login_hint']).to eq('john@example.com')
143
- end
144
- end
145
-
146
- describe 'prompt' do
147
- it 'should default to nil' do
148
- expect(subject.authorize_params['prompt']).to eq(nil)
149
- end
150
-
151
- it 'should set the prompt parameter if present' do
152
- @options = { prompt: 'consent select_account' }
153
- expect(subject.authorize_params['prompt']).to eq('consent select_account')
154
- end
155
- end
156
-
157
- describe 'request_visible_actions' do
158
- it 'should default to nil' do
159
- expect(subject.authorize_params['request_visible_actions']).to eq(nil)
160
- end
161
-
162
- it 'should set the request_visible_actions parameter if present' do
163
- @options = { request_visible_actions: 'something' }
164
- expect(subject.authorize_params['request_visible_actions']).to eq('something')
165
- end
166
- end
167
-
168
- describe 'include_granted_scopes' do
169
- it 'should default to nil' do
170
- expect(subject.authorize_params['include_granted_scopes']).to eq(nil)
171
- end
172
-
173
- it 'should set the include_granted_scopes parameter if present' do
174
- @options = { include_granted_scopes: 'true' }
175
- expect(subject.authorize_params['include_granted_scopes']).to eq('true')
176
- end
177
- end
178
-
179
95
  describe 'scope' do
180
- it 'should expand scope shortcuts' do
181
- @options = { scope: 'calendar' }
182
- expect(subject.authorize_params['scope']).to eq('https://www.googleapis.com/auth/calendar')
183
- end
184
-
185
- it 'should leave base scopes as is' do
186
- @options = { scope: 'profile' }
187
- expect(subject.authorize_params['scope']).to eq('profile')
188
- end
189
-
190
96
  it 'should join scopes' do
191
97
  @options = { scope: 'profile,email' }
192
- expect(subject.authorize_params['scope']).to eq('profile email')
98
+ expect(subject.authorize_params['scope']).to eq('profile,email')
193
99
  end
194
100
 
195
101
  it 'should deal with whitespace when joining scopes' do
196
102
  @options = { scope: 'profile, email' }
197
- expect(subject.authorize_params['scope']).to eq('profile email')
103
+ expect(subject.authorize_params['scope']).to eq('profile,email')
198
104
  end
199
105
 
200
- it 'should set default scope to email,profile' do
201
- expect(subject.authorize_params['scope']).to eq('email profile')
106
+ it 'should set default scope to identity' do
107
+ expect(subject.authorize_params['scope']).to eq('identity')
202
108
  end
203
109
 
204
110
  it 'should support space delimited scopes' do
205
111
  @options = { scope: 'profile email' }
206
- expect(subject.authorize_params['scope']).to eq('profile email')
207
- end
208
-
209
- it 'should support extremely badly formed scopes' do
210
- @options = { scope: 'profile email,foo,steve yeah http://example.com' }
211
- expect(subject.authorize_params['scope']).to eq('profile email https://www.googleapis.com/auth/foo https://www.googleapis.com/auth/steve https://www.googleapis.com/auth/yeah http://example.com')
112
+ expect(subject.authorize_params['scope']).to eq('profile,email')
212
113
  end
213
114
  end
214
115
 
@@ -238,7 +139,7 @@ describe OmniAuth::Strategies::SeznamCz do
238
139
  end
239
140
 
240
141
  describe 'request overrides' do
241
- %i[access_type hd login_hint prompt scope state].each do |k|
142
+ %i[scope state].each do |k|
242
143
  context "authorize option #{k}" do
243
144
  let(:request) { double('Request', params: { k.to_s => 'http://example.com' }, cookies: {}, env: {}) }
244
145
 
@@ -267,7 +168,6 @@ describe OmniAuth::Strategies::SeznamCz do
267
168
  expect(subject.authorize_params['request_visible_actions']).to eq('something')
268
169
  expect(subject.authorize_params['foo']).to eq('bar')
269
170
  expect(subject.authorize_params['baz']).to eq('zip')
270
- expect(subject.authorize_params['hd']).to eq('wow')
271
171
  expect(subject.authorize_params['bad']).to eq(nil)
272
172
  end
273
173
  end
@@ -288,138 +188,4 @@ describe OmniAuth::Strategies::SeznamCz do
288
188
  expect(subject.token_params['bad']).to eq(nil)
289
189
  end
290
190
  end
291
-
292
- describe '#callback_url' do
293
- let(:base_url) { 'https://example.com' }
294
-
295
- it 'has the correct default callback path' do
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')
305
- end
306
-
307
- it 'should set the callback_path parameter if present' do
308
- @options = { callback_path: '/auth/foo/callback' }
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')
312
- end
313
- end
314
-
315
- describe '#info' do
316
- let(:client) do
317
- OAuth2::Client.new('abc', 'def') do |builder|
318
- builder.request :url_encoded
319
- builder.adapter :test do |stub|
320
- stub.get('/oauth2/v3/userinfo') { [200, { 'content-type' => 'application/json' }, response_hash.to_json] }
321
- end
322
- end
323
- end
324
- let(:access_token) { OAuth2::AccessToken.from_hash(client, {}) }
325
- before { allow(subject).to receive(:access_token).and_return(access_token) }
326
-
327
- context 'with verified email' do
328
- let(:response_hash) do
329
- { email: 'something@domain.invalid', email_verified: true }
330
- end
331
-
332
- it 'should return equal email and unverified_email' do
333
- expect(subject.info[:email]).to eq('something@domain.invalid')
334
- expect(subject.info[:unverified_email]).to eq('something@domain.invalid')
335
- end
336
- end
337
-
338
- context 'with unverified email' do
339
- let(:response_hash) do
340
- { email: 'something@domain.invalid', email_verified: false }
341
- end
342
-
343
- it 'should return nil email, and correct unverified email' do
344
- expect(subject.info[:email]).to eq(nil)
345
- expect(subject.info[:unverified_email]).to eq('something@domain.invalid')
346
- end
347
- end
348
- end
349
-
350
- describe '#extra' do
351
- let(:client) do
352
- OAuth2::Client.new('abc', 'def') do |builder|
353
- builder.request :url_encoded
354
- builder.adapter :test do |stub|
355
- stub.get('/oauth2/v3/userinfo') { [200, { 'content-type' => 'application/json' }, '{"sub": "12345"}'] }
356
- end
357
- end
358
- end
359
- let(:access_token) { OAuth2::AccessToken.from_hash(client, {}) }
360
-
361
- before { allow(subject).to receive(:access_token).and_return(access_token) }
362
-
363
- describe 'id_token' do
364
- shared_examples 'id_token issued by valid issuer' do |issuer|
365
- context 'when the id_token is passed into the access token' do
366
- let(:token_info) do
367
- {
368
- 'abc' => 'xyz',
369
- 'exp' => Time.now.to_i + 3600,
370
- 'nbf' => Time.now.to_i - 60,
371
- 'iat' => Time.now.to_i,
372
- 'aud' => 'appid',
373
- 'iss' => issuer
374
- }
375
- end
376
- let(:id_token) { JWT.encode(token_info, 'secret') }
377
- let(:access_token) { OAuth2::AccessToken.from_hash(client, 'id_token' => id_token) }
378
-
379
- it 'should include id_token when set on the access_token' do
380
- expect(subject.extra).to include(id_token: id_token)
381
- end
382
-
383
-
384
-
385
- it 'should include id_info when id_token is set on the access_token by default' do
386
- expect(subject.extra).to include(id_info: token_info)
387
- end
388
- end
389
- end
390
-
391
- it_behaves_like 'id_token issued by valid issuer', 'accounts.google.com'
392
- it_behaves_like 'id_token issued by valid issuer', 'https://accounts.google.com'
393
-
394
- context 'when the id_token is missing' do
395
- it 'should not include id_token' do
396
- expect(subject.extra).not_to have_key(:id_token)
397
- end
398
-
399
- it 'should not include id_info' do
400
- expect(subject.extra).not_to have_key(:id_info)
401
- end
402
- end
403
- end
404
-
405
- describe 'raw_info' do
406
- context 'when skip_info is true' do
407
- before { subject.options[:skip_info] = true }
408
-
409
- it 'should not include raw_info' do
410
- expect(subject.extra).not_to have_key(:raw_info)
411
- end
412
- end
413
-
414
- context 'when skip_info is false' do
415
- before { subject.options[:skip_info] = false }
416
-
417
- it 'should include raw_info' do
418
- expect(subject.extra[:raw_info]).to eq('sub' => '12345')
419
- end
420
- end
421
- end
422
- end
423
-
424
-
425
191
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-seznam-cz
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Sterba
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-02 00:00:00.000000000 Z
11
+ date: 2022-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oauth2
@@ -109,6 +109,7 @@ files:
109
109
  - Gemfile
110
110
  - README.md
111
111
  - Rakefile
112
+ - bin/publish-gem.sh
112
113
  - lib/omniauth-seznam-cz.rb
113
114
  - lib/omniauth/seznam_cz.rb
114
115
  - lib/omniauth/seznam_cz/version.rb