devise-otp 1.1.0 → 2.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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/.erb_lint.yml +30 -0
  3. data/.github/workflows/ci.yml +4 -2
  4. data/.rubocop.yml +18 -0
  5. data/Appraisals +4 -17
  6. data/CHANGELOG.md +59 -1
  7. data/Gemfile +7 -1
  8. data/README.md +37 -14
  9. data/app/controllers/devise_otp/devise/otp_credentials_controller.rb +30 -7
  10. data/app/controllers/devise_otp/devise/otp_persistence_controller.rb +60 -0
  11. data/app/controllers/devise_otp/devise/otp_tokens_controller.rb +2 -37
  12. data/app/views/devise/otp_credentials/refresh.html.erb +6 -6
  13. data/app/views/devise/otp_credentials/show.html.erb +10 -13
  14. data/app/views/devise/otp_tokens/_token_secret.html.erb +9 -9
  15. data/app/views/devise/otp_tokens/_trusted_devices.html.erb +7 -7
  16. data/app/views/devise/otp_tokens/edit.html.erb +9 -9
  17. data/app/views/devise/otp_tokens/recovery.html.erb +8 -6
  18. data/app/views/devise/otp_tokens/show.html.erb +6 -6
  19. data/bin/appraisal +16 -0
  20. data/bin/erb_lint +16 -0
  21. data/bin/rake +16 -0
  22. data/bin/rubocop +16 -0
  23. data/config/locales/{en.yml → devise-otp.en.yml} +10 -8
  24. data/devise-otp.gemspec +2 -2
  25. data/gemfiles/rails_8.0.gemfile +5 -1
  26. data/gemfiles/{rails_7.1.gemfile → rails_8.1.gemfile} +7 -7
  27. data/lib/devise/strategies/database_authenticatable.rb +4 -17
  28. data/lib/devise-otp/version.rb +1 -1
  29. data/lib/devise-otp.rb +1 -2
  30. data/lib/devise_otp_authenticatable/controllers/helpers.rb +1 -2
  31. data/lib/devise_otp_authenticatable/controllers/public_helpers.rb +1 -2
  32. data/lib/devise_otp_authenticatable/controllers/url_helpers.rb +7 -2
  33. data/lib/devise_otp_authenticatable/hooks/refreshable.rb +0 -1
  34. data/lib/devise_otp_authenticatable/models/otp_authenticatable.rb +18 -12
  35. data/lib/devise_otp_authenticatable/routes.rb +7 -7
  36. data/test/dummy/app/assets/stylesheets/application.css +15 -1
  37. data/test/dummy/app/controllers/admin_posts_controller.rb +0 -1
  38. data/test/dummy/app/controllers/base_controller.rb +0 -2
  39. data/test/dummy/app/controllers/non_otp_posts_controller.rb +0 -1
  40. data/test/dummy/app/models/admin.rb +0 -1
  41. data/test/dummy/app/models/lockable_user.rb +8 -0
  42. data/test/dummy/app/models/non_otp_user.rb +0 -1
  43. data/test/dummy/app/models/rememberable_user.rb +8 -0
  44. data/test/dummy/app/views/layouts/application.html.erb +4 -2
  45. data/test/dummy/app/views/posts/show.html.erb +0 -1
  46. data/test/dummy/app/views/shared/_navbar.html.erb +23 -0
  47. data/test/dummy/config/application.rb +3 -0
  48. data/test/dummy/config/initializers/devise.rb +2 -2
  49. data/test/dummy/config/routes.rb +3 -0
  50. data/test/dummy/db/migrate/20250731000001_create_lockable_users.rb +9 -0
  51. data/test/dummy/db/migrate/20250731000002_add_devise_to_lockable_users.rb +52 -0
  52. data/test/dummy/db/migrate/20250731000003_devise_otp_add_to_lockable_users.rb +28 -0
  53. data/test/dummy/db/migrate/20250817221304_create_rememberable_users.rb +50 -0
  54. data/test/dummy/db/migrate/20250818030305_add_devise_otp_to_rememberable_users.rb +28 -0
  55. data/test/dummy/db/schema.rb +110 -44
  56. data/test/integration/disable_token_test.rb +0 -2
  57. data/test/integration/enable_otp_form_test.rb +12 -1
  58. data/test/integration/lockable_test.rb +143 -0
  59. data/test/integration/non_otp_user_models_test.rb +0 -2
  60. data/test/integration/otp_drift_test.rb +35 -0
  61. data/test/integration/persistence_test.rb +96 -5
  62. data/test/integration/refresh_test.rb +23 -14
  63. data/test/integration/rememberable_test.rb +143 -0
  64. data/test/integration/reset_token_test.rb +0 -2
  65. data/test/integration/sign_in_test.rb +15 -8
  66. data/test/integration/trackable_test.rb +0 -2
  67. data/test/integration_tests_helper.rb +22 -1
  68. data/test/models/otp_authenticatable_test.rb +48 -11
  69. data/test/test_helper.rb +1 -0
  70. metadata +26 -9
  71. data/gemfiles/rails_7.2.gemfile +0 -17
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise-otp
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lele Forzani
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2025-07-20 00:00:00.000000000 Z
13
+ date: 2026-08-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
@@ -35,7 +35,7 @@ dependencies:
35
35
  version: 4.8.0
36
36
  - - "<"
37
37
  - !ruby/object:Gem::Version
38
- version: '5.0'
38
+ version: '6.0'
39
39
  type: :runtime
40
40
  prerelease: false
41
41
  version_requirements: !ruby/object:Gem::Requirement
@@ -45,7 +45,7 @@ dependencies:
45
45
  version: 4.8.0
46
46
  - - "<"
47
47
  - !ruby/object:Gem::Version
48
- version: '5.0'
48
+ version: '6.0'
49
49
  - !ruby/object:Gem::Dependency
50
50
  name: rotp
51
51
  requirement: !ruby/object:Gem::Requirement
@@ -66,14 +66,14 @@ dependencies:
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '2.0'
69
+ version: '3.0'
70
70
  type: :runtime
71
71
  prerelease: false
72
72
  version_requirements: !ruby/object:Gem::Requirement
73
73
  requirements:
74
74
  - - "~>"
75
75
  - !ruby/object:Gem::Version
76
- version: '2.0'
76
+ version: '3.0'
77
77
  description: OTP authentication for Devise
78
78
  email:
79
79
  - lele@windmill.it
@@ -83,8 +83,10 @@ executables: []
83
83
  extensions: []
84
84
  extra_rdoc_files: []
85
85
  files:
86
+ - ".erb_lint.yml"
86
87
  - ".github/workflows/ci.yml"
87
88
  - ".gitignore"
89
+ - ".rubocop.yml"
88
90
  - Appraisals
89
91
  - CHANGELOG.md
90
92
  - Gemfile
@@ -93,6 +95,7 @@ files:
93
95
  - Rakefile
94
96
  - app/assets/stylesheets/devise-otp.css
95
97
  - app/controllers/devise_otp/devise/otp_credentials_controller.rb
98
+ - app/controllers/devise_otp/devise/otp_persistence_controller.rb
96
99
  - app/controllers/devise_otp/devise/otp_tokens_controller.rb
97
100
  - app/views/devise/otp_credentials/refresh.html.erb
98
101
  - app/views/devise/otp_credentials/show.html.erb
@@ -102,11 +105,14 @@ files:
102
105
  - app/views/devise/otp_tokens/recovery.html.erb
103
106
  - app/views/devise/otp_tokens/recovery_codes.text.erb
104
107
  - app/views/devise/otp_tokens/show.html.erb
105
- - config/locales/en.yml
108
+ - bin/appraisal
109
+ - bin/erb_lint
110
+ - bin/rake
111
+ - bin/rubocop
112
+ - config/locales/devise-otp.en.yml
106
113
  - devise-otp.gemspec
107
- - gemfiles/rails_7.1.gemfile
108
- - gemfiles/rails_7.2.gemfile
109
114
  - gemfiles/rails_8.0.gemfile
115
+ - gemfiles/rails_8.1.gemfile
110
116
  - lib/devise-otp.rb
111
117
  - lib/devise-otp/version.rb
112
118
  - lib/devise/strategies/database_authenticatable.rb
@@ -136,8 +142,10 @@ files:
136
142
  - test/dummy/app/helpers/posts_helper.rb
137
143
  - test/dummy/app/mailers/.gitkeep
138
144
  - test/dummy/app/models/admin.rb
145
+ - test/dummy/app/models/lockable_user.rb
139
146
  - test/dummy/app/models/non_otp_user.rb
140
147
  - test/dummy/app/models/post.rb
148
+ - test/dummy/app/models/rememberable_user.rb
141
149
  - test/dummy/app/models/user.rb
142
150
  - test/dummy/app/views/admin_posts/index.html.erb
143
151
  - test/dummy/app/views/base/home.html.erb
@@ -148,6 +156,7 @@ files:
148
156
  - test/dummy/app/views/posts/index.html.erb
149
157
  - test/dummy/app/views/posts/new.html.erb
150
158
  - test/dummy/app/views/posts/show.html.erb
159
+ - test/dummy/app/views/shared/_navbar.html.erb
151
160
  - test/dummy/config.ru
152
161
  - test/dummy/config/application.rb
153
162
  - test/dummy/config/boot.rb
@@ -174,6 +183,11 @@ files:
174
183
  - test/dummy/db/migrate/20240604000003_devise_otp_add_to_admins.rb
175
184
  - test/dummy/db/migrate/20250718092451_create_non_otp_users.rb
176
185
  - test/dummy/db/migrate/20250718092536_add_devise_to_non_otp_users.rb
186
+ - test/dummy/db/migrate/20250731000001_create_lockable_users.rb
187
+ - test/dummy/db/migrate/20250731000002_add_devise_to_lockable_users.rb
188
+ - test/dummy/db/migrate/20250731000003_devise_otp_add_to_lockable_users.rb
189
+ - test/dummy/db/migrate/20250817221304_create_rememberable_users.rb
190
+ - test/dummy/db/migrate/20250818030305_add_devise_otp_to_rememberable_users.rb
177
191
  - test/dummy/db/schema.rb
178
192
  - test/dummy/db/seeds.rb
179
193
  - test/dummy/lib/assets/.gitkeep
@@ -184,9 +198,12 @@ files:
184
198
  - test/dummy/script/rails
185
199
  - test/integration/disable_token_test.rb
186
200
  - test/integration/enable_otp_form_test.rb
201
+ - test/integration/lockable_test.rb
187
202
  - test/integration/non_otp_user_models_test.rb
203
+ - test/integration/otp_drift_test.rb
188
204
  - test/integration/persistence_test.rb
189
205
  - test/integration/refresh_test.rb
206
+ - test/integration/rememberable_test.rb
190
207
  - test/integration/reset_token_test.rb
191
208
  - test/integration/sign_in_test.rb
192
209
  - test/integration/trackable_test.rb
@@ -1,17 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "appraisal", git: "https://github.com/thoughtbot/appraisal.git"
6
- gem "capybara"
7
- gem "minitest-reporters", ">= 0.5.0"
8
- gem "puma"
9
- gem "rake"
10
- gem "rdoc"
11
- gem "shoulda"
12
- gem "sprockets-rails"
13
- gem "sqlite3", "~> 1.5.0"
14
- gem "standardrb"
15
- gem "rails", "~> 7.2.0"
16
-
17
- gemspec path: "../"