devise_token_auth 0.1.43 → 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.

Potentially problematic release.


This version of devise_token_auth might be problematic. Click here for more details.

Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +40 -894
  3. data/Rakefile +2 -0
  4. data/app/controllers/devise_token_auth/application_controller.rb +6 -0
  5. data/app/controllers/devise_token_auth/concerns/resource_finder.rb +2 -0
  6. data/app/controllers/devise_token_auth/concerns/set_user_by_token.rb +9 -14
  7. data/app/controllers/devise_token_auth/confirmations_controller.rb +3 -1
  8. data/app/controllers/devise_token_auth/omniauth_callbacks_controller.rb +2 -0
  9. data/app/controllers/devise_token_auth/passwords_controller.rb +8 -14
  10. data/app/controllers/devise_token_auth/registrations_controller.rb +26 -21
  11. data/app/controllers/devise_token_auth/sessions_controller.rb +2 -0
  12. data/app/controllers/devise_token_auth/token_validations_controller.rb +2 -0
  13. data/app/controllers/devise_token_auth/unlocks_controller.rb +2 -0
  14. data/app/models/devise_token_auth/concerns/user.rb +41 -16
  15. data/app/models/devise_token_auth/concerns/user_omniauth_callbacks.rb +2 -0
  16. data/app/validators/email_validator.rb +3 -1
  17. data/config/initializers/devise.rb +2 -0
  18. data/config/locales/da-DK.yml +1 -1
  19. data/config/locales/sv.yml +50 -0
  20. data/lib/devise_token_auth.rb +3 -0
  21. data/lib/devise_token_auth/controllers/helpers.rb +2 -0
  22. data/lib/devise_token_auth/controllers/url_helpers.rb +2 -0
  23. data/lib/devise_token_auth/engine.rb +2 -0
  24. data/lib/devise_token_auth/errors.rb +7 -0
  25. data/lib/devise_token_auth/rails/routes.rb +2 -0
  26. data/lib/devise_token_auth/url.rb +2 -0
  27. data/lib/devise_token_auth/version.rb +3 -1
  28. data/lib/generators/devise_token_auth/USAGE +1 -1
  29. data/lib/generators/devise_token_auth/install_generator.rb +7 -5
  30. data/lib/generators/devise_token_auth/install_views_generator.rb +2 -0
  31. data/lib/generators/devise_token_auth/templates/devise_token_auth.rb +2 -0
  32. data/lib/generators/devise_token_auth/templates/devise_token_auth_create_users.rb.erb +8 -7
  33. data/lib/generators/devise_token_auth/templates/user.rb +3 -1
  34. data/lib/tasks/devise_token_auth_tasks.rake +2 -0
  35. data/test/controllers/custom/custom_confirmations_controller_test.rb +2 -0
  36. data/test/controllers/custom/custom_omniauth_callbacks_controller_test.rb +2 -0
  37. data/test/controllers/custom/custom_passwords_controller_test.rb +2 -0
  38. data/test/controllers/custom/custom_registrations_controller_test.rb +11 -0
  39. data/test/controllers/custom/custom_sessions_controller_test.rb +2 -0
  40. data/test/controllers/custom/custom_token_validations_controller_test.rb +2 -0
  41. data/test/controllers/demo_group_controller_test.rb +2 -0
  42. data/test/controllers/demo_mang_controller_test.rb +4 -1
  43. data/test/controllers/demo_user_controller_test.rb +47 -10
  44. data/test/controllers/devise_token_auth/confirmations_controller_test.rb +4 -6
  45. data/test/controllers/devise_token_auth/omniauth_callbacks_controller_test.rb +7 -4
  46. data/test/controllers/devise_token_auth/passwords_controller_test.rb +2 -0
  47. data/test/controllers/devise_token_auth/registrations_controller_test.rb +3 -1
  48. data/test/controllers/devise_token_auth/sessions_controller_test.rb +52 -0
  49. data/test/controllers/devise_token_auth/token_validations_controller_test.rb +2 -0
  50. data/test/controllers/devise_token_auth/unlocks_controller_test.rb +2 -0
  51. data/test/controllers/overrides/confirmations_controller_test.rb +2 -0
  52. data/test/controllers/overrides/omniauth_callbacks_controller_test.rb +2 -0
  53. data/test/controllers/overrides/passwords_controller_test.rb +2 -0
  54. data/test/controllers/overrides/registrations_controller_test.rb +31 -27
  55. data/test/controllers/overrides/sessions_controller_test.rb +2 -0
  56. data/test/controllers/overrides/token_validations_controller_test.rb +2 -0
  57. data/test/dummy/app/controllers/application_controller.rb +2 -0
  58. data/test/dummy/app/controllers/auth_origin_controller.rb +2 -0
  59. data/test/dummy/app/controllers/custom/confirmations_controller.rb +2 -0
  60. data/test/dummy/app/controllers/custom/omniauth_callbacks_controller.rb +2 -0
  61. data/test/dummy/app/controllers/custom/passwords_controller.rb +2 -0
  62. data/test/dummy/app/controllers/custom/registrations_controller.rb +2 -1
  63. data/test/dummy/app/controllers/custom/sessions_controller.rb +2 -0
  64. data/test/dummy/app/controllers/custom/token_validations_controller.rb +2 -0
  65. data/test/dummy/app/controllers/demo_group_controller.rb +2 -0
  66. data/test/dummy/app/controllers/demo_mang_controller.rb +2 -0
  67. data/test/dummy/app/controllers/demo_user_controller.rb +2 -0
  68. data/test/dummy/app/controllers/overrides/confirmations_controller.rb +2 -0
  69. data/test/dummy/app/controllers/overrides/omniauth_callbacks_controller.rb +2 -0
  70. data/test/dummy/app/controllers/overrides/passwords_controller.rb +2 -0
  71. data/test/dummy/app/controllers/overrides/registrations_controller.rb +2 -0
  72. data/test/dummy/app/controllers/overrides/sessions_controller.rb +2 -0
  73. data/test/dummy/app/controllers/overrides/token_validations_controller.rb +2 -0
  74. data/test/dummy/app/helpers/application_helper.rb +2 -0
  75. data/test/dummy/app/models/evil_user.rb +2 -0
  76. data/test/dummy/app/models/lockable_user.rb +2 -0
  77. data/test/dummy/app/models/mang.rb +2 -0
  78. data/test/dummy/app/models/nice_user.rb +2 -0
  79. data/test/dummy/app/models/only_email_user.rb +2 -0
  80. data/test/dummy/app/models/scoped_user.rb +2 -0
  81. data/test/dummy/app/models/unconfirmable_user.rb +2 -0
  82. data/test/dummy/app/models/unregisterable_user.rb +2 -0
  83. data/test/dummy/app/models/user.rb +2 -0
  84. data/test/dummy/config/application.rb +2 -0
  85. data/test/dummy/config/boot.rb +2 -0
  86. data/test/dummy/config/environment.rb +2 -0
  87. data/test/dummy/config/environments/development.rb +2 -0
  88. data/test/dummy/config/environments/production.rb +2 -0
  89. data/test/dummy/config/environments/test.rb +2 -0
  90. data/test/dummy/config/initializers/assets.rb +2 -0
  91. data/test/dummy/config/initializers/backtrace_silencers.rb +2 -0
  92. data/test/dummy/config/initializers/cookies_serializer.rb +3 -1
  93. data/test/dummy/config/initializers/devise.rb +2 -0
  94. data/test/dummy/config/initializers/devise_token_auth.rb +2 -0
  95. data/test/dummy/config/initializers/figaro.rb +2 -0
  96. data/test/dummy/config/initializers/filter_parameter_logging.rb +2 -0
  97. data/test/dummy/config/initializers/inflections.rb +2 -0
  98. data/test/dummy/config/initializers/mime_types.rb +2 -0
  99. data/test/dummy/config/initializers/omniauth.rb +2 -0
  100. data/test/dummy/config/initializers/session_store.rb +2 -0
  101. data/test/dummy/config/initializers/wrap_parameters.rb +2 -0
  102. data/test/dummy/config/routes.rb +2 -0
  103. data/test/dummy/config/spring.rb +2 -0
  104. data/test/dummy/db/migrate/20140715061447_devise_token_auth_create_users.rb +2 -0
  105. data/test/dummy/db/migrate/20140715061805_devise_token_auth_create_mangs.rb +2 -0
  106. data/test/dummy/db/migrate/20140829044006_add_operating_thetan_to_user.rb +2 -0
  107. data/test/dummy/db/migrate/20140916224624_add_favorite_color_to_mangs.rb +2 -0
  108. data/test/dummy/db/migrate/20140928231203_devise_token_auth_create_evil_users.rb +2 -0
  109. data/test/dummy/db/migrate/20141222035835_devise_token_auth_create_only_email_users.rb +2 -0
  110. data/test/dummy/db/migrate/20141222053502_devise_token_auth_create_unregisterable_users.rb +2 -0
  111. data/test/dummy/db/migrate/20150409095712_devise_token_auth_create_nice_users.rb +2 -0
  112. data/test/dummy/db/migrate/20150708104536_devise_token_auth_create_unconfirmable_users.rb +2 -0
  113. data/test/dummy/db/migrate/20160103235141_devise_token_auth_create_scoped_users.rb +2 -0
  114. data/test/dummy/db/migrate/20160629184441_devise_token_auth_create_lockable_users.rb +2 -0
  115. data/test/dummy/lib/migration_database_helper.rb +15 -1
  116. data/test/dummy/tmp/generators/app/models/user.rb +5 -5
  117. data/test/dummy/tmp/generators/config/initializers/devise_token_auth.rb +2 -0
  118. data/test/dummy/tmp/generators/db/migrate/{20171014052631_devise_token_auth_create_users.rb → 20180805205504_devise_token_auth_create_users.rb} +1 -0
  119. data/test/integration/navigation_test.rb +2 -0
  120. data/test/lib/devise_token_auth/url_test.rb +2 -0
  121. data/test/lib/generators/devise_token_auth/install_generator_test.rb +2 -0
  122. data/test/lib/generators/devise_token_auth/install_generator_with_namespace_test.rb +194 -0
  123. data/test/lib/generators/devise_token_auth/install_views_generator_test.rb +2 -0
  124. data/test/models/only_email_user_test.rb +2 -0
  125. data/test/models/user_test.rb +6 -4
  126. data/test/test_helper.rb +30 -14
  127. metadata +23 -5
@@ -1,8 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "devise"
2
4
  require "devise_token_auth/engine"
3
5
  require "devise_token_auth/controllers/helpers"
4
6
  require "devise_token_auth/controllers/url_helpers"
5
7
  require "devise_token_auth/url"
8
+ require "devise_token_auth/errors"
6
9
 
7
10
  module DeviseTokenAuth
8
11
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeviseTokenAuth
2
4
  module Controllers
3
5
  module Helpers
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeviseTokenAuth
2
4
  module Controllers
3
5
  module UrlHelpers
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'devise_token_auth/rails/routes'
2
4
 
3
5
  module DeviseTokenAuth
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DeviseTokenAuth
4
+ module Errors
5
+ class NoResourceDefinedError < StandardError ; end
6
+ end
7
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module ActionDispatch::Routing
2
4
  class Mapper
3
5
  def mount_devise_token_auth_for(resource, opts)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeviseTokenAuth::Url
2
4
 
3
5
  def self.generate(url, params = {})
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeviseTokenAuth
2
- VERSION = '0.1.43'
4
+ VERSION = '0.2.0'
3
5
  end
@@ -15,7 +15,7 @@ Example:
15
15
 
16
16
  This will create:
17
17
  config/initializers/devise_token_auth.rb
18
- db/migrate/<%= Time.now.utc.strftime("%Y%m%d%H%M%S") %>_create_devise_token_auth_create_users.rb
18
+ db/migrate/<%= Time.zone.now.utc.strftime("%Y%m%d%H%M%S") %>_create_devise_token_auth_create_users.rb
19
19
  app/models/user.rb
20
20
 
21
21
  If 'app/models/user.rb' already exists, the following line will be inserted
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeviseTokenAuth
2
4
  class InstallGenerator < Rails::Generators::Base
3
5
  include Rails::Generators::Migration
@@ -12,12 +14,12 @@ module DeviseTokenAuth
12
14
  end
13
15
 
14
16
  def copy_migrations
15
- if self.class.migration_exists?("db/migrate", "devise_token_auth_create_#{ user_class.underscore }")
16
- say_status("skipped", "Migration 'devise_token_auth_create_#{ user_class.underscore }' already exists")
17
+ if self.class.migration_exists?("db/migrate", "devise_token_auth_create_#{ user_class.pluralize.gsub("::","").underscore }")
18
+ say_status("skipped", "Migration 'devise_token_auth_create_#{ user_class.pluralize.gsub("::","").underscore }' already exists")
17
19
  else
18
20
  migration_template(
19
21
  "devise_token_auth_create_users.rb.erb",
20
- "db/migrate/devise_token_auth_create_#{ user_class.pluralize.underscore }.rb"
22
+ "db/migrate/devise_token_auth_create_#{ user_class.pluralize.gsub("::","").underscore }.rb"
21
23
  )
22
24
  end
23
25
  end
@@ -29,7 +31,7 @@ module DeviseTokenAuth
29
31
  else
30
32
  inclusion = "include DeviseTokenAuth::Concerns::User"
31
33
  unless parse_file_for_line(fname, inclusion)
32
-
34
+
33
35
  active_record_needle = (Rails::VERSION::MAJOR == 5) ? 'ApplicationRecord' : 'ActiveRecord::Base'
34
36
  inject_into_file fname, after: "class #{user_class} < #{active_record_needle}\n" do <<-'RUBY'
35
37
  # Include default devise modules.
@@ -101,7 +103,7 @@ module DeviseTokenAuth
101
103
  private
102
104
 
103
105
  def self.next_migration_number(path)
104
- Time.now.utc.strftime("%Y%m%d%H%M%S")
106
+ Time.zone.now.utc.strftime("%Y%m%d%H%M%S")
105
107
  end
106
108
 
107
109
  def insert_after_line(filename, line, str)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module DeviseTokenAuth
2
4
  class InstallViewsGenerator < Rails::Generators::Base
3
5
  source_root File.expand_path('../../../../app/views/devise/mailer', __FILE__)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  DeviseTokenAuth.setup do |config|
2
4
  # By default the authorization headers will change after each request. The
3
5
  # client is responsible for keeping track of the changing tokens. Change
@@ -1,6 +1,7 @@
1
- class DeviseTokenAuthCreate<%= user_class.pluralize %> < ActiveRecord::Migration<%= "[#{Rails::VERSION::STRING[0..2]}]" if Rails::VERSION::MAJOR > 4 %>
1
+ class DeviseTokenAuthCreate<%= user_class.pluralize.gsub("::","") %> < ActiveRecord::Migration<%= "[#{Rails::VERSION::STRING[0..2]}]" if Rails::VERSION::MAJOR > 4 %>
2
2
  def change
3
- create_table(:<%= user_class.pluralize.underscore %>) do |t|
3
+ <% table_name = @user_class.pluralize.gsub("::","").underscore %>
4
+ create_table(:<%= table_name %>) do |t|
4
5
  ## Required
5
6
  t.string :provider, :null => false, :default => "email"
6
7
  t.string :uid, :null => false, :default => ""
@@ -46,10 +47,10 @@ class DeviseTokenAuthCreate<%= user_class.pluralize %> < ActiveRecord::Migration
46
47
  t.timestamps
47
48
  end
48
49
 
49
- add_index :<%= user_class.pluralize.underscore %>, :email, unique: true
50
- add_index :<%= user_class.pluralize.underscore %>, [:uid, :provider], unique: true
51
- add_index :<%= user_class.pluralize.underscore %>, :reset_password_token, unique: true
52
- add_index :<%= user_class.pluralize.underscore %>, :confirmation_token, unique: true
53
- # add_index :<%= user_class.pluralize.underscore %>, :unlock_token, unique: true
50
+ add_index :<%= table_name %>, :email, unique: true
51
+ add_index :<%= table_name %>, [:uid, :provider], unique: true
52
+ add_index :<%= table_name %>, :reset_password_token, unique: true
53
+ add_index :<%= table_name %>, :confirmation_token, unique: true
54
+ # add_index :<%= table_name %>, :unlock_token, unique: true
54
55
  end
55
56
  end
@@ -1,4 +1,6 @@
1
- class <%= user_class.capitalize %> < ActiveRecord::Base
1
+ # frozen_string_literal: true
2
+
3
+ class <%= user_class %> < ActiveRecord::Base
2
4
  # Include default devise modules. Others available are:
3
5
  # :confirmable, :lockable, :timeoutable and :omniauthable
4
6
  devise :database_authenticatable, :registerable,
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # desc "Explaining what the task does"
2
4
  # task :devise_token_auth do
3
5
  # # Task goes here
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class Custom::ConfirmationsControllerTest < ActionController::TestCase
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class Custom::OmniauthCallbacksControllerTest < ActionDispatch::IntegrationTest
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class Custom::PasswordsControllerTest < ActionController::TestCase
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class Custom::RegistrationsControllerTest < ActionDispatch::IntegrationTest
@@ -50,5 +52,14 @@ class Custom::RegistrationsControllerTest < ActionDispatch::IntegrationTest
50
52
  assert @controller.destroy_block_called?,
51
53
  'destroy failed to yield resource to provided block'
52
54
  end
55
+
56
+ describe 'when overriding #build_resource' do
57
+ test 'it fails' do
58
+ Custom::RegistrationsController.any_instance.stubs(:build_resource).returns(nil)
59
+ assert_raises DeviseTokenAuth::Errors::NoResourceDefinedError do
60
+ post '/nice_user_auth', params: @create_params
61
+ end
62
+ end
63
+ end
53
64
  end
54
65
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class Custom::SessionsControllerTest < ActionController::TestCase
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class Custom::TokenValidationsControllerTest < ActionDispatch::IntegrationTest
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  # was the web request successful?
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  # was the web request successful?
@@ -214,7 +216,7 @@ class DemoMangControllerTest < ActionDispatch::IntegrationTest
214
216
  end
215
217
 
216
218
  it 'should not return auth headers for second (batched) requests' do
217
- assert_equal ' ', @second_access_token
219
+ refute @second_access_token
218
220
  end
219
221
  end
220
222
 
@@ -282,3 +284,4 @@ class DemoMangControllerTest < ActionDispatch::IntegrationTest
282
284
  end
283
285
  end
284
286
  end
287
+
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  # was the web request successful?
@@ -215,7 +217,7 @@ class DemoUserControllerTest < ActionDispatch::IntegrationTest
215
217
  end
216
218
 
217
219
  it 'should not return auth headers for second (batched) requests' do
218
- assert_equal ' ', @second_access_token
220
+ refute @second_access_token
219
221
  end
220
222
  end
221
223
 
@@ -407,6 +409,50 @@ class DemoUserControllerTest < ActionDispatch::IntegrationTest
407
409
  DeviseTokenAuth.headers_names[:'access-token'] = 'access-token'
408
410
  end
409
411
  end
412
+
413
+ describe 'maximum concurrent devices per user' do
414
+ before do
415
+ # Set the max_number_of_devices to a lower number
416
+ # to expedite tests! (Default is 10)
417
+ DeviseTokenAuth.max_number_of_devices = 5
418
+ end
419
+
420
+ it 'should limit the maximum number of concurrent devices' do
421
+ # increment the number of devices until the maximum is exceeded
422
+ 1.upto(DeviseTokenAuth.max_number_of_devices + 1).each do |n|
423
+
424
+ assert_equal(
425
+ [n, DeviseTokenAuth.max_number_of_devices].min,
426
+ @resource.reload.tokens.length
427
+ )
428
+
429
+ # Add a new device (and token) ahead of the next iteration
430
+ @resource.create_new_auth_token
431
+
432
+ end
433
+ end
434
+
435
+ it 'should drop the oldest token when the maximum number of devices is exceeded' do
436
+ # create the maximum number of tokens
437
+ 1.upto(DeviseTokenAuth.max_number_of_devices).each do
438
+ @resource.create_new_auth_token
439
+ end
440
+
441
+ # get the oldest token client_id
442
+ oldest_client_id, = @resource.reload.tokens.min_by do |cid, v|
443
+ v[:expiry] || v["expiry"]
444
+ end # => [ 'CLIENT_ID', {token: ...} ]
445
+
446
+ # create another token, thereby dropping the oldest token
447
+ @resource.create_new_auth_token
448
+
449
+ assert_not_includes @resource.reload.tokens.keys, oldest_client_id
450
+ end
451
+
452
+ after do
453
+ DeviseTokenAuth.max_number_of_devices = 10
454
+ end
455
+ end
410
456
  end
411
457
 
412
458
  describe 'bypass_sign_in' do
@@ -503,17 +549,8 @@ class DemoUserControllerTest < ActionDispatch::IntegrationTest
503
549
  refute_equal @resource, @controller.current_mang
504
550
  end
505
551
 
506
- it 'should increase the number of tokens by a factor of 2 up to 11' do
507
- @first_token = @resource.tokens.keys.first
508
552
 
509
- DeviseTokenAuth.max_number_of_devices = 11
510
- (1..10).each do |n|
511
- assert_equal [11, 2 * n].min, @resource.reload.tokens.keys.length
512
- get '/demo/members_only', params: {}, headers: nil
513
- end
514
553
 
515
- assert_not_includes @resource.reload.tokens.keys, @first_token
516
- end
517
554
  end
518
555
 
519
556
  it 'should return success status' do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  # was the web request successful?
@@ -55,18 +57,14 @@ class DeviseTokenAuth::ConfirmationsControllerTest < ActionController::TestCase
55
57
  test 'the sign_in_count should be 1' do
56
58
  assert @resource.sign_in_count == 1
57
59
  end
60
+
58
61
  test 'User shoud have the signed in info filled' do
59
62
  assert @resource.current_sign_in_at?
60
63
  end
64
+
61
65
  test 'User shoud have the Last checkin filled' do
62
66
  assert @resource.last_sign_in_at?
63
67
  end
64
-
65
- test 'user already confirmed' do
66
- assert @resource.sign_in_count > 0 do
67
- assert expiry == (Time.now + Time.now + 1.second).to_i
68
- end
69
- end
70
68
  end
71
69
 
72
70
  describe 'failure' do
@@ -1,6 +1,6 @@
1
- require 'test_helper'
2
- require 'mocha/test_unit'
1
+ # frozen_string_literal: true
3
2
 
3
+ require 'test_helper'
4
4
  # was the web request successful?
5
5
  # was the user redirected to the right page?
6
6
  # was the user successfully authenticated?
@@ -57,7 +57,7 @@ class OmniauthTest < ActionDispatch::IntegrationTest
57
57
  expiry = controller.auth_params[:expiry]
58
58
 
59
59
  # the expiry should have been set
60
- assert_equal expiry, @resource.tokens[client_id]['expiry']
60
+ assert_equal expiry, @resource.tokens[client_id]['expiry'] || @resource.tokens[client_id][:expiry]
61
61
 
62
62
  # the token sent down to the client should now be valid
63
63
  assert @resource.valid_token?(token, client_id)
@@ -70,7 +70,10 @@ class OmniauthTest < ActionDispatch::IntegrationTest
70
70
  end
71
71
 
72
72
  test 'sign_in was called' do
73
- User.any_instance.expects(:sign_in)
73
+ DeviseTokenAuth::OmniauthCallbacksController.any_instance\
74
+ .expects(:sign_in).with(
75
+ :user, instance_of(User), has_entries(store: false, bypass: false)
76
+ )
74
77
  get_success
75
78
  end
76
79
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  # was the web request successful?
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  # was the web request successful?
@@ -177,7 +179,7 @@ class DeviseTokenAuth::RegistrationsControllerTest < ActionDispatch::Integration
177
179
  @resource = assigns(:resource)
178
180
  @data = JSON.parse(response.body)
179
181
  @mail = ActionMailer::Base.deliveries.last
180
- @sent_redirect_url = URI.decode(@mail.body.match(/redirect_url=([^&]*)(&|\")/)[1])
182
+ @sent_redirect_url = CGI.unescape(@mail.body.match(/redirect_url=([^&]*)(&|\")/)[1])
181
183
  end
182
184
 
183
185
  teardown do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  # was the web request successful?
@@ -72,6 +74,56 @@ class DeviseTokenAuth::SessionsControllerTest < ActionController::TestCase
72
74
  assert_equal '0.0.0.0', @new_last_sign_in_ip
73
75
  end
74
76
  end
77
+
78
+ describe "with multiple clients and headers don't change in each request" do
79
+ before do
80
+ # Set the max_number_of_devices to a lower number
81
+ # to expedite tests! (Default is 10)
82
+ DeviseTokenAuth.max_number_of_devices = 2
83
+ DeviseTokenAuth.change_headers_on_each_request = false
84
+
85
+ @user_session_params = {
86
+ email: @existing_user.email,
87
+ password: 'secret123'
88
+ }
89
+ end
90
+
91
+ test 'should limit the maximum number of concurrent devices' do
92
+ # increment the number of devices until the maximum is exceeded
93
+ 1.upto(DeviseTokenAuth.max_number_of_devices + 1).each do |n|
94
+ initial_tokens = @existing_user.reload.tokens
95
+
96
+ assert_equal(
97
+ [n, DeviseTokenAuth.max_number_of_devices].min,
98
+ @existing_user.reload.tokens.length
99
+ )
100
+
101
+ # Already have the max number of devices
102
+ post :create, params: @user_session_params
103
+
104
+ # A session for a new device maintains the max number of concurrent devices
105
+ refute_equal initial_tokens, @existing_user.reload.tokens
106
+ end
107
+ end
108
+
109
+ test 'should drop old tokens when max number of devices is exceeded' do
110
+ 1.upto(DeviseTokenAuth.max_number_of_devices).each do |n|
111
+ post :create, params: @user_session_params
112
+ end
113
+
114
+ oldest_token, _ = @existing_user.reload.tokens \
115
+ .min_by { |cid, v| v[:expiry] || v["expiry"] }
116
+
117
+ post :create, params: @user_session_params
118
+
119
+ assert_not_includes @existing_user.reload.tokens.keys, oldest_token
120
+ end
121
+
122
+ after do
123
+ DeviseTokenAuth.max_number_of_devices = 10
124
+ DeviseTokenAuth.change_headers_on_each_request = true
125
+ end
126
+ end
75
127
  end
76
128
 
77
129
  describe 'get sign_in is not supported' do