devise-security 0.17.0 → 0.18.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 (94) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +3 -1
  3. data/README.md +14 -5
  4. data/app/controllers/devise/paranoid_verification_code_controller.rb +14 -12
  5. data/app/controllers/devise/password_expired_controller.rb +8 -4
  6. data/config/locales/bg.yml +1 -0
  7. data/config/locales/by.yml +1 -0
  8. data/config/locales/cs.yml +5 -0
  9. data/config/locales/de.yml +1 -0
  10. data/config/locales/es.yml +12 -0
  11. data/config/locales/fa.yml +1 -0
  12. data/config/locales/fr.yml +14 -2
  13. data/config/locales/hi.yml +1 -0
  14. data/config/locales/it.yml +1 -0
  15. data/config/locales/ja.yml +12 -0
  16. data/config/locales/nl.yml +1 -0
  17. data/config/locales/pt.yml +1 -0
  18. data/config/locales/ru.yml +1 -0
  19. data/config/locales/tr.yml +25 -1
  20. data/config/locales/uk.yml +1 -0
  21. data/config/locales/zh_CN.yml +1 -0
  22. data/config/locales/zh_TW.yml +1 -0
  23. data/lib/devise-security/controllers/helpers.rb +23 -11
  24. data/lib/devise-security/hooks/expirable.rb +3 -3
  25. data/lib/devise-security/hooks/paranoid_verification.rb +1 -3
  26. data/lib/devise-security/hooks/password_expirable.rb +1 -3
  27. data/lib/devise-security/hooks/session_limitable.rb +4 -4
  28. data/lib/devise-security/models/compatibility/active_record_patch.rb +4 -3
  29. data/lib/devise-security/models/compatibility/mongoid_patch.rb +3 -2
  30. data/lib/devise-security/models/database_authenticatable_patch.rb +12 -14
  31. data/lib/devise-security/models/expirable.rb +6 -5
  32. data/lib/devise-security/models/paranoid_verification.rb +2 -2
  33. data/lib/devise-security/models/password_archivable.rb +1 -1
  34. data/lib/devise-security/models/secure_validatable.rb +6 -5
  35. data/lib/devise-security/orm/mongoid.rb +1 -1
  36. data/lib/devise-security/patches.rb +14 -8
  37. data/lib/devise-security/routes.rb +2 -3
  38. data/lib/devise-security/version.rb +1 -1
  39. data/lib/devise-security.rb +2 -1
  40. data/lib/generators/devise_security/install_generator.rb +3 -5
  41. data/lib/generators/templates/devise_security.rb +3 -0
  42. data/test/controllers/test_paranoid_verification_code_controller.rb +70 -5
  43. data/test/controllers/test_password_expired_controller.rb +57 -41
  44. data/test/controllers/test_security_question_controller.rb +25 -19
  45. data/test/dummy/app/controllers/overrides/password_expired_controller.rb +10 -0
  46. data/test/dummy/app/models/user.rb +4 -3
  47. data/test/dummy/app/mongoid/user_without_email.rb +4 -1
  48. data/test/dummy/config/application.rb +0 -4
  49. data/test/dummy/config/environments/test.rb +1 -0
  50. data/test/dummy/config/initializers/devise.rb +1 -5
  51. data/test/dummy/config/routes.rb +1 -1
  52. data/test/dummy/config.ru +1 -1
  53. data/test/dummy/db/migrate/20120508165529_create_tables.rb +2 -2
  54. data/test/dummy/log/test.log +34100 -90393
  55. data/test/i18n_test.rb +22 -0
  56. data/test/integration/test_paranoid_verification_code_workflow.rb +53 -0
  57. data/test/integration/test_password_expirable_workflow.rb +2 -2
  58. data/test/integration/test_session_limitable_workflow.rb +3 -3
  59. data/test/support/integration_helpers.rb +18 -12
  60. data/test/test_complexity_validator.rb +42 -41
  61. data/test/test_database_authenticatable_patch.rb +3 -3
  62. data/test/test_paranoid_verification.rb +8 -8
  63. data/test/test_password_expirable.rb +1 -1
  64. data/test/test_secure_validatable.rb +5 -13
  65. data/test/test_session_limitable.rb +7 -7
  66. data/test/tmp/config/initializers/devise_security.rb +3 -0
  67. data/test/tmp/config/locales/devise.security_extension.by.yml +1 -0
  68. data/test/tmp/config/locales/devise.security_extension.cs.yml +5 -0
  69. data/test/tmp/config/locales/devise.security_extension.de.yml +1 -0
  70. data/test/tmp/config/locales/devise.security_extension.es.yml +12 -0
  71. data/test/tmp/config/locales/devise.security_extension.fa.yml +1 -0
  72. data/test/tmp/config/locales/devise.security_extension.fr.yml +14 -2
  73. data/test/tmp/config/locales/devise.security_extension.hi.yml +1 -0
  74. data/test/tmp/config/locales/devise.security_extension.it.yml +1 -0
  75. data/test/tmp/config/locales/devise.security_extension.ja.yml +12 -0
  76. data/test/tmp/config/locales/devise.security_extension.nl.yml +1 -0
  77. data/test/tmp/config/locales/devise.security_extension.pt.yml +1 -0
  78. data/test/tmp/config/locales/devise.security_extension.ru.yml +1 -0
  79. data/test/tmp/config/locales/devise.security_extension.tr.yml +25 -1
  80. data/test/tmp/config/locales/devise.security_extension.uk.yml +1 -0
  81. data/test/tmp/config/locales/devise.security_extension.zh_CN.yml +1 -0
  82. data/test/tmp/config/locales/devise.security_extension.zh_TW.yml +1 -0
  83. metadata +45 -27
  84. data/lib/devise-security/patches/confirmations_controller_captcha.rb +0 -23
  85. data/lib/devise-security/patches/confirmations_controller_security_question.rb +0 -26
  86. data/lib/devise-security/patches/passwords_controller_captcha.rb +0 -22
  87. data/lib/devise-security/patches/passwords_controller_security_question.rb +0 -25
  88. data/lib/devise-security/patches/registrations_controller_captcha.rb +0 -35
  89. data/lib/devise-security/patches/sessions_controller_captcha.rb +0 -26
  90. data/lib/devise-security/patches/unlocks_controller_captcha.rb +0 -22
  91. data/lib/devise-security/patches/unlocks_controller_security_question.rb +0 -25
  92. data/test/dummy/app/controllers/foos_controller.rb +0 -0
  93. data/test/dummy/lib/shared_user_without_email.rb +0 -29
  94. data/test/dummy/log/development.log +0 -0
@@ -9,8 +9,8 @@ fr:
9
9
  one: doit contenir au moins un chiffre
10
10
  other: doit contenir au moins %{count} chiffres
11
11
  lower:
12
- one: doit contenir au moins une lettre miniscule
13
- other: doit contenir au moins %{count} lettres miniscules
12
+ one: doit contenir au moins une lettre minuscule
13
+ other: doit contenir au moins %{count} lettres minuscules
14
14
  symbol:
15
15
  one: doit contenir au moins un signe de ponctuation
16
16
  other: doit contenir au moins %{count} signes de ponctuation
@@ -22,9 +22,21 @@ fr:
22
22
  invalid_security_question: La réponse à la question de sécurité est invalide
23
23
  paranoid_verify:
24
24
  code_required: Veuillez entrer le code fourni par notre équipe de support
25
+ paranoid_verification_code:
26
+ updated: Code de vérification accepté
27
+ show:
28
+ submit_verification_code: Soumettre le code de vérification
29
+ verification_code: Code de vérification
30
+ submit: Soumettre
25
31
  password_expired:
26
32
  updated: Votre nouveau mot de passe est enregistré
27
33
  change_required: Votre mot de passe a expiré. Veuillez en choisir un autre
34
+ show:
35
+ renew_your_password: Renouveler votre mot de passe
36
+ current_password: Mot de passe actuel
37
+ new_password: Nouveau mot de passe
38
+ new_password_confirmation: Confirmer le nouveau mot de passe
39
+ change_my_password: Changer mon mot de passe
28
40
  failure:
29
41
  session_limited: Vos identifiants de connexion ont été utilisés dans un autre navigateur. Veuillez vous reconnecter pour continuer dans ce navigateur
30
42
  expired: Votre compte a expiré pour cause d'inactivité. Veuillez contacter l'administrateur du site
@@ -24,6 +24,7 @@ hi:
24
24
  paranoid_verify:
25
25
  code_required: सपोर्ट टीम द्वारा दिया गया कोड डाले
26
26
  paranoid_verification_code:
27
+ updated: सत्यापन कोड स्वीकार किया गया
27
28
  show:
28
29
  submit_verification_code: वेरिफिकेशन कोड डाले
29
30
  verification_code: वेरिफिकेशन कोड
@@ -23,6 +23,7 @@ it:
23
23
  paranoid_verify:
24
24
  code_required: 'Inserisci il codice fornito dal nostro team di supporto'
25
25
  paranoid_verification_code:
26
+ updated: Codice di verifica accettato
26
27
  show:
27
28
  submit_verification_code: Invia codice di verifica
28
29
  verification_code: Codice di verifica
@@ -22,9 +22,21 @@ ja:
22
22
  invalid_security_question: 'セキュリティ質問に対する回答が不正です。'
23
23
  paranoid_verify:
24
24
  code_required: 'サポートチームに提供された認証コードを入力してください。'
25
+ paranoid_verification_code:
26
+ updated: 確認コードを受け入れました
27
+ show:
28
+ submit_verification_code: 確認コードを送信する
29
+ verification_code: 検証コード
30
+ submit: 参加する
25
31
  password_expired:
26
32
  updated: '新しいパスワードが保存されました。'
27
33
  change_required: 'パスワードが期限切れです。パスワードを新しく設定してください。'
34
+ show:
35
+ renew_your_password: パスワードを更新する
36
+ current_password: 現在のパスワード
37
+ new_password: 新しいパスワード
38
+ new_password_confirmation: 新しいパスワードを確認
39
+ change_my_password: パスワードを変更する
28
40
  failure:
29
41
  session_limited: '他のブラウザでログインされました。このブラウザで続ける場合は、もう一度サインインしてください。'
30
42
  expired: '活動がなかったため、あなたのアカウントは期限切れとなりました。サイト管理者に連絡してください。'
@@ -23,6 +23,7 @@ nl:
23
23
  paranoid_verify:
24
24
  code_required: Voer de aangeleverde code in
25
25
  paranoid_verification_code:
26
+ updated: Verificatiecode geaccepteerd
26
27
  show:
27
28
  submit_verification_code: Verstuur verificatie code
28
29
  verification_code: Verificatie code
@@ -23,6 +23,7 @@ pt:
23
23
  paranoid_verify:
24
24
  code_required: 'Por favor entre o código que a equipe de suporte enviou'
25
25
  paranoid_verification_code:
26
+ updated: Código de verificação aceito
26
27
  show:
27
28
  submit_verification_code: Enviar código de verificação
28
29
  verification_code: Código de verificação
@@ -31,6 +31,7 @@ ru:
31
31
  paranoid_verify:
32
32
  code_required: 'Пожалуйста введите код, полученный от нашей команды поддержки'
33
33
  paranoid_verification_code:
34
+ updated: Код подтверждения принят
34
35
  show:
35
36
  submit_verification_code: Ввод кода подтверждения
36
37
  verification_code: Код подверждения
@@ -4,15 +4,39 @@ tr:
4
4
  taken_in_past: "daha önce kullanıldı."
5
5
  equal_to_current_password: "mevcut paroladan farklı olmalı."
6
6
  equal_to_email: "e-postadan farklı olmalı."
7
- password_format: "büyük, küçük harfler ve sayılar içermeli."
7
+ password_complexity:
8
+ digit:
9
+ one: en az bir rakam içermelidir
10
+ other: en az %{count} basamak içermelidir
11
+ lower:
12
+ one: en az bir küçük harf içermelidir
13
+ other: en az %{count} küçük harf içermelidir
14
+ symbol:
15
+ one: en az bir noktalama işareti veya sembolü içermelidir
16
+ other: en az %{count} noktalama işareti veya sembolü içermelidir
17
+ upper:
18
+ one: en az bir büyük harf içermelidir
19
+ other: en az %{count} büyük harf içermelidir
8
20
  devise:
9
21
  invalid_captcha: "Captcha hatalı."
10
22
  invalid_security_question: "Güvenlik sorusunun cevabı yanlış."
11
23
  paranoid_verify:
12
24
  code_required: "Destek ekibimizden aldığınız kodu girin."
25
+ paranoid_verification_code:
26
+ updated: Doğrulama kodu kabul edildi
27
+ show:
28
+ submit_verification_code: Doğrulama kodunu gönder
29
+ verification_code: Doğrulama kodu
30
+ submit: Gönder
13
31
  password_expired:
14
32
  updated: "Yeni parolanız kaydedildi."
15
33
  change_required: "Parolanızın geçerlilik süresi dolmuş. Lütfen parolanızı yenileyin."
34
+ show:
35
+ renew_your_password: Şifrenizi yenileyin
36
+ current_password: Mevcut Şifre
37
+ new_password: Yeni Şifre
38
+ new_password_confirmation: Yeni şifreyi onayla
39
+ change_my_password: Şifremi Değiştir
16
40
  failure:
17
41
  session_limited: 'Hesabınıza başka bir tarayıcıdan giriş yapılmış. Lütfen devam etmek için yeniden giriş yapın.'
18
42
  expired: 'Hesabınız aktif olarak kullanılmadığı için artık geçerli değil. Lütfen yönetici ile irtibata geçin.'
@@ -31,6 +31,7 @@ uk:
31
31
  paranoid_verify:
32
32
  code_required: 'Введіть, будь ласка, код від нашої команди підтримки'
33
33
  paranoid_verification_code:
34
+ updated: Код підтвердження прийнято
34
35
  show:
35
36
  submit_verification_code: Відправити код підтвердження
36
37
  verification_code: Код підтвердження
@@ -23,6 +23,7 @@ zh_CN:
23
23
  paranoid_verify:
24
24
  code_required: '请输入我们支持团队提供的代码'
25
25
  paranoid_verification_code:
26
+ updated: 接受验证码
26
27
  show:
27
28
  submit_verification_code: 提交验证码
28
29
  verification_code: 验证码
@@ -23,6 +23,7 @@ zh_TW:
23
23
  paranoid_verify:
24
24
  code_required: '請輸入由我們客服團隊提供的代碼'
25
25
  paranoid_verification_code:
26
+ updated: 接受驗證碼
26
27
  show:
27
28
  submit_verification_code: 送出驗證碼
28
29
  verification_code: 驗證碼
metadata CHANGED
@@ -1,18 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise-security
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.0
4
+ version: 0.18.0
5
5
  platform: ruby
6
6
  authors:
7
- - Marco Scholl
8
7
  - Alexander Dreher
9
- - Nate Bird
10
8
  - Dillon Welch
11
9
  - Kevin Olbrich
10
+ - Marco Scholl
11
+ - Nate Bird
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2021-12-29 00:00:00.000000000 Z
15
+ date: 2023-04-15 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: devise
@@ -56,6 +56,20 @@ dependencies:
56
56
  - - ">="
57
57
  - !ruby/object:Gem::Version
58
58
  version: '0'
59
+ - !ruby/object:Gem::Dependency
60
+ name: byebug
61
+ requirement: !ruby/object:Gem::Requirement
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
59
73
  - !ruby/object:Gem::Dependency
60
74
  name: database_cleaner
61
75
  requirement: !ruby/object:Gem::Requirement
@@ -85,7 +99,7 @@ dependencies:
85
99
  - !ruby/object:Gem::Version
86
100
  version: '0'
87
101
  - !ruby/object:Gem::Dependency
88
- name: m
102
+ name: i18n-tasks
89
103
  requirement: !ruby/object:Gem::Requirement
90
104
  requirements:
91
105
  - - ">="
@@ -99,7 +113,7 @@ dependencies:
99
113
  - !ruby/object:Gem::Version
100
114
  version: '0'
101
115
  - !ruby/object:Gem::Dependency
102
- name: minitest
116
+ name: m
103
117
  requirement: !ruby/object:Gem::Requirement
104
118
  requirements:
105
119
  - - ">="
@@ -113,7 +127,7 @@ dependencies:
113
127
  - !ruby/object:Gem::Version
114
128
  version: '0'
115
129
  - !ruby/object:Gem::Dependency
116
- name: omniauth
130
+ name: minitest
117
131
  requirement: !ruby/object:Gem::Requirement
118
132
  requirements:
119
133
  - - ">="
@@ -127,7 +141,7 @@ dependencies:
127
141
  - !ruby/object:Gem::Version
128
142
  version: '0'
129
143
  - !ruby/object:Gem::Dependency
130
- name: pry-byebug
144
+ name: omniauth
131
145
  requirement: !ruby/object:Gem::Requirement
132
146
  requirements:
133
147
  - - ">="
@@ -172,16 +186,30 @@ dependencies:
172
186
  name: rubocop
173
187
  requirement: !ruby/object:Gem::Requirement
174
188
  requirements:
175
- - - "~>"
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ type: :development
193
+ prerelease: false
194
+ version_requirements: !ruby/object:Gem::Requirement
195
+ requirements:
196
+ - - ">="
197
+ - !ruby/object:Gem::Version
198
+ version: '0'
199
+ - !ruby/object:Gem::Dependency
200
+ name: rubocop-minitest
201
+ requirement: !ruby/object:Gem::Requirement
202
+ requirements:
203
+ - - ">="
176
204
  - !ruby/object:Gem::Version
177
- version: 0.83.0
205
+ version: '0'
178
206
  type: :development
179
207
  prerelease: false
180
208
  version_requirements: !ruby/object:Gem::Requirement
181
209
  requirements:
182
- - - "~>"
210
+ - - ">="
183
211
  - !ruby/object:Gem::Version
184
- version: 0.83.0
212
+ version: '0'
185
213
  - !ruby/object:Gem::Dependency
186
214
  name: rubocop-rails
187
215
  requirement: !ruby/object:Gem::Requirement
@@ -289,16 +317,8 @@ files:
289
317
  - lib/devise-security/models/session_limitable.rb
290
318
  - lib/devise-security/orm/mongoid.rb
291
319
  - lib/devise-security/patches.rb
292
- - lib/devise-security/patches/confirmations_controller_captcha.rb
293
- - lib/devise-security/patches/confirmations_controller_security_question.rb
294
320
  - lib/devise-security/patches/controller_captcha.rb
295
321
  - lib/devise-security/patches/controller_security_question.rb
296
- - lib/devise-security/patches/passwords_controller_captcha.rb
297
- - lib/devise-security/patches/passwords_controller_security_question.rb
298
- - lib/devise-security/patches/registrations_controller_captcha.rb
299
- - lib/devise-security/patches/sessions_controller_captcha.rb
300
- - lib/devise-security/patches/unlocks_controller_captcha.rb
301
- - lib/devise-security/patches/unlocks_controller_security_question.rb
302
322
  - lib/devise-security/rails.rb
303
323
  - lib/devise-security/routes.rb
304
324
  - lib/devise-security/validators/password_complexity_validator.rb
@@ -313,7 +333,6 @@ files:
313
333
  - test/dummy/app/assets/config/manifest.js
314
334
  - test/dummy/app/controllers/application_controller.rb
315
335
  - test/dummy/app/controllers/captcha/sessions_controller.rb
316
- - test/dummy/app/controllers/foos_controller.rb
317
336
  - test/dummy/app/controllers/overrides/paranoid_verification_code_controller.rb
318
337
  - test/dummy/app/controllers/overrides/password_expired_controller.rb
319
338
  - test/dummy/app/controllers/security_question/unlocks_controller.rb
@@ -377,11 +396,11 @@ files:
377
396
  - test/dummy/lib/shared_security_questions_fields.rb
378
397
  - test/dummy/lib/shared_user.rb
379
398
  - test/dummy/lib/shared_user_with_password_verification.rb
380
- - test/dummy/lib/shared_user_without_email.rb
381
399
  - test/dummy/lib/shared_user_without_omniauth.rb
382
400
  - test/dummy/lib/shared_verification_fields.rb
383
- - test/dummy/log/development.log
384
401
  - test/dummy/log/test.log
402
+ - test/i18n_test.rb
403
+ - test/integration/test_paranoid_verification_code_workflow.rb
385
404
  - test/integration/test_password_expirable_workflow.rb
386
405
  - test/integration/test_session_limitable_workflow.rb
387
406
  - test/orm/active_record.rb
@@ -436,7 +455,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
436
455
  - !ruby/object:Gem::Version
437
456
  version: '0'
438
457
  requirements: []
439
- rubygems_version: 3.3.0
458
+ rubygems_version: 3.1.6
440
459
  signing_key:
441
460
  specification_version: 4
442
461
  summary: Security extension for devise
@@ -479,7 +498,6 @@ test_files:
479
498
  - test/dummy/app/controllers/overrides/paranoid_verification_code_controller.rb
480
499
  - test/dummy/app/controllers/application_controller.rb
481
500
  - test/dummy/app/controllers/captcha/sessions_controller.rb
482
- - test/dummy/app/controllers/foos_controller.rb
483
501
  - test/dummy/app/controllers/widgets_controller.rb
484
502
  - test/dummy/app/controllers/security_question/unlocks_controller.rb
485
503
  - test/dummy/app/views/foos/index.html.erb
@@ -499,7 +517,6 @@ test_files:
499
517
  - test/dummy/Rakefile
500
518
  - test/dummy/lib/shared_verification_fields.rb
501
519
  - test/dummy/lib/shared_user.rb
502
- - test/dummy/lib/shared_user_without_email.rb
503
520
  - test/dummy/lib/shared_user_without_omniauth.rb
504
521
  - test/dummy/lib/shared_user_with_password_verification.rb
505
522
  - test/dummy/lib/shared_expirable_columns.rb
@@ -514,12 +531,13 @@ test_files:
514
531
  - test/dummy/db/migrate/20150407162345_add_verification_attempt_column.rb
515
532
  - test/dummy/db/migrate/20180318105329_add_confirmable_columns.rb
516
533
  - test/dummy/log/test.log
517
- - test/dummy/log/development.log
518
534
  - test/test_install_generator.rb
519
535
  - test/test_secure_validatable_overrides.rb
536
+ - test/i18n_test.rb
520
537
  - test/test_paranoid_verification.rb
521
538
  - test/integration/test_session_limitable_workflow.rb
522
539
  - test/integration/test_password_expirable_workflow.rb
540
+ - test/integration/test_paranoid_verification_code_workflow.rb
523
541
  - test/test_database_authenticatable_patch.rb
524
542
  - test/test_secure_validatable.rb
525
543
  - test/test_session_limitable.rb
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module DeviseSecurity::Patches
4
- module ConfirmationsControllerCaptcha
5
- extend ActiveSupport::Concern
6
- included do
7
- define_method :create do
8
- if valid_captcha_if_defined?(params[:captcha])
9
- self.resource = resource_class.send_confirmation_instructions(params[resource_name])
10
-
11
- if successfully_sent?(resource)
12
- respond_with({}, location: after_resending_confirmation_instructions_path_for(resource_name))
13
- else
14
- respond_with(resource)
15
- end
16
- else
17
- flash[:alert] = t('devise.invalid_captcha') if is_navigational_format?
18
- respond_with({}, location: new_confirmation_path(resource_name))
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module DeviseSecurity::Patches
4
- module ConfirmationsControllerSecurityQuestion
5
- extend ActiveSupport::Concern
6
- included do
7
- define_method :create do
8
- # only find via email, not login
9
- resource = resource_class.find_or_initialize_with_error_by(:email, params[resource_name][:email], :not_found)
10
-
11
- if valid_captcha_or_security_question?(resource, params)
12
- self.resource = resource_class.send_confirmation_instructions(params[resource_name])
13
-
14
- if successfully_sent?(resource)
15
- respond_with({}, location: after_resending_confirmation_instructions_path_for(resource_name))
16
- else
17
- respond_with(resource)
18
- end
19
- else
20
- flash[:alert] = t('devise.invalid_security_question') if is_navigational_format?
21
- respond_with({}, location: new_confirmation_path(resource_name))
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module DeviseSecurity::Patches
4
- module PasswordsControllerCaptcha
5
- extend ActiveSupport::Concern
6
- included do
7
- define_method :create do
8
- if valid_captcha_if_defined?(params[:captcha])
9
- self.resource = resource_class.send_reset_password_instructions(params[resource_name])
10
- if successfully_sent?(resource)
11
- respond_with({}, location: new_session_path(resource_name))
12
- else
13
- respond_with(resource)
14
- end
15
- else
16
- flash[:alert] = t('devise.invalid_captcha') if is_navigational_format?
17
- respond_with({}, location: new_password_path(resource_name))
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module DeviseSecurity::Patches
4
- module PasswordsControllerSecurityQuestion
5
- extend ActiveSupport::Concern
6
- included do
7
- define_method :create do
8
- # only find via email, not login
9
- resource = resource_class.find_or_initialize_with_error_by(:email, params[resource_name][:email], :not_found)
10
-
11
- if valid_captcha_or_security_question?(resource, params)
12
- self.resource = resource_class.send_reset_password_instructions(params[resource_name])
13
- if successfully_sent?(resource)
14
- respond_with({}, location: new_session_path(resource_name))
15
- else
16
- respond_with(resource)
17
- end
18
- else
19
- flash[:alert] = t('devise.invalid_security_question') if is_navigational_format?
20
- respond_with({}, location: new_password_path(resource_name))
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module DeviseSecurity::Patches
4
- module RegistrationsControllerCaptcha
5
- extend ActiveSupport::Concern
6
- included do
7
- define_method :create do |&block|
8
- build_resource(sign_up_params)
9
-
10
- if valid_captcha_if_defined?(params[:captcha])
11
- if resource.save
12
- block.call(resource) if block
13
- if resource.active_for_authentication?
14
- set_flash_message :notice, :signed_up if is_flashing_format?
15
- sign_up(resource_name, resource)
16
- respond_with resource, location: after_sign_up_path_for(resource)
17
- else
18
- set_flash_message :notice, :"signed_up_but_#{resource.inactive_message}" if is_flashing_format?
19
- expire_data_after_sign_in!
20
- respond_with resource, location: after_inactive_sign_up_path_for(resource)
21
- end
22
- else
23
- clean_up_passwords resource
24
- respond_with resource
25
- end
26
-
27
- else
28
- resource.errors.add :base, t('devise.invalid_captcha')
29
- clean_up_passwords resource
30
- respond_with resource
31
- end
32
- end
33
- end
34
- end
35
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module DeviseSecurity::Patches
4
- module SessionsControllerCaptcha
5
- extend ActiveSupport::Concern
6
- included do
7
- define_method :create do |&block|
8
- if valid_captcha_if_defined?(params[:captcha])
9
- self.resource = warden.authenticate!(auth_options)
10
- set_flash_message(:notice, :signed_in) if is_flashing_format?
11
- sign_in(resource_name, resource)
12
- block.call(resource) if block
13
- respond_with resource, location: after_sign_in_path_for(resource)
14
- else
15
- flash[:alert] = t('devise.invalid_captcha') if is_flashing_format?
16
- respond_with({}, location: new_session_path(resource_name))
17
- end
18
- end
19
-
20
- # for bad protected use in controller
21
- define_method :auth_options do
22
- { scope: resource_name, recall: "#{controller_path}#new" }
23
- end
24
- end
25
- end
26
- end
@@ -1,22 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module DeviseSecurity::Patches
4
- module UnlocksControllerCaptcha
5
- extend ActiveSupport::Concern
6
- included do
7
- define_method :create do
8
- if valid_captcha_if_defined?(params[:captcha])
9
- self.resource = resource_class.send_unlock_instructions(params[resource_name])
10
- if successfully_sent?(resource)
11
- respond_with({}, location: new_session_path(resource_name))
12
- else
13
- respond_with(resource)
14
- end
15
- else
16
- flash[:alert] = t('devise.invalid_captcha') if is_navigational_format?
17
- respond_with({}, location: new_unlock_path(resource_name))
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module DeviseSecurity::Patches
4
- module UnlocksControllerSecurityQuestion
5
- extend ActiveSupport::Concern
6
- included do
7
- define_method :create do
8
- # only find via email, not login
9
- resource = resource_class.find_or_initialize_with_error_by(:email, params[resource_name][:email], :not_found)
10
-
11
- if valid_captcha_or_security_question?(resource, params)
12
- self.resource = resource_class.send_unlock_instructions(params[resource_name])
13
- if successfully_sent?(resource)
14
- respond_with({}, location: new_session_path(resource_name))
15
- else
16
- respond_with(resource)
17
- end
18
- else
19
- flash[:alert] = t('devise.invalid_security_question') if is_navigational_format?
20
- respond_with({}, location: new_unlock_path(resource_name))
21
- end
22
- end
23
- end
24
- end
25
- end
File without changes
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SharedUserWithoutEmail
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
- # NOTE: This is missing :validatable and :confirmable, as they both require
8
- # an email field at the moment. It is also missing :omniauthable because that
9
- # adds unnecessary complexity to the setup
10
- devise :database_authenticatable, :lockable, :recoverable,
11
- :registerable, :rememberable, :timeoutable,
12
- :trackable
13
- end
14
-
15
- # This test stub is a bit rubbish because it's tied very closely to the
16
- # implementation where we care about this one case. However, completely
17
- # removing the email field breaks "recoverable" tests completely, so we are
18
- # just taking the approach here that "email" is something that is a not an
19
- # ActiveRecord field.
20
- def email_changed?
21
- raise NoMethodError
22
- end
23
-
24
- def respond_to?(method_name, include_all = false)
25
- return false if method_name.to_sym == :email_changed?
26
-
27
- super(method_name, include_all)
28
- end
29
- end
File without changes