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.
- checksums.yaml +4 -4
- data/LICENSE.txt +3 -1
- data/README.md +14 -5
- data/app/controllers/devise/paranoid_verification_code_controller.rb +14 -12
- data/app/controllers/devise/password_expired_controller.rb +8 -4
- data/config/locales/bg.yml +1 -0
- data/config/locales/by.yml +1 -0
- data/config/locales/cs.yml +5 -0
- data/config/locales/de.yml +1 -0
- data/config/locales/es.yml +12 -0
- data/config/locales/fa.yml +1 -0
- data/config/locales/fr.yml +14 -2
- data/config/locales/hi.yml +1 -0
- data/config/locales/it.yml +1 -0
- data/config/locales/ja.yml +12 -0
- data/config/locales/nl.yml +1 -0
- data/config/locales/pt.yml +1 -0
- data/config/locales/ru.yml +1 -0
- data/config/locales/tr.yml +25 -1
- data/config/locales/uk.yml +1 -0
- data/config/locales/zh_CN.yml +1 -0
- data/config/locales/zh_TW.yml +1 -0
- data/lib/devise-security/controllers/helpers.rb +23 -11
- data/lib/devise-security/hooks/expirable.rb +3 -3
- data/lib/devise-security/hooks/paranoid_verification.rb +1 -3
- data/lib/devise-security/hooks/password_expirable.rb +1 -3
- data/lib/devise-security/hooks/session_limitable.rb +4 -4
- data/lib/devise-security/models/compatibility/active_record_patch.rb +4 -3
- data/lib/devise-security/models/compatibility/mongoid_patch.rb +3 -2
- data/lib/devise-security/models/database_authenticatable_patch.rb +12 -14
- data/lib/devise-security/models/expirable.rb +6 -5
- data/lib/devise-security/models/paranoid_verification.rb +2 -2
- data/lib/devise-security/models/password_archivable.rb +1 -1
- data/lib/devise-security/models/secure_validatable.rb +6 -5
- data/lib/devise-security/orm/mongoid.rb +1 -1
- data/lib/devise-security/patches.rb +14 -8
- data/lib/devise-security/routes.rb +2 -3
- data/lib/devise-security/version.rb +1 -1
- data/lib/devise-security.rb +2 -1
- data/lib/generators/devise_security/install_generator.rb +3 -5
- data/lib/generators/templates/devise_security.rb +3 -0
- data/test/controllers/test_paranoid_verification_code_controller.rb +70 -5
- data/test/controllers/test_password_expired_controller.rb +57 -41
- data/test/controllers/test_security_question_controller.rb +25 -19
- data/test/dummy/app/controllers/overrides/password_expired_controller.rb +10 -0
- data/test/dummy/app/models/user.rb +4 -3
- data/test/dummy/app/mongoid/user_without_email.rb +4 -1
- data/test/dummy/config/application.rb +0 -4
- data/test/dummy/config/environments/test.rb +1 -0
- data/test/dummy/config/initializers/devise.rb +1 -5
- data/test/dummy/config/routes.rb +1 -1
- data/test/dummy/config.ru +1 -1
- data/test/dummy/db/migrate/20120508165529_create_tables.rb +2 -2
- data/test/dummy/log/test.log +34100 -90393
- data/test/i18n_test.rb +22 -0
- data/test/integration/test_paranoid_verification_code_workflow.rb +53 -0
- data/test/integration/test_password_expirable_workflow.rb +2 -2
- data/test/integration/test_session_limitable_workflow.rb +3 -3
- data/test/support/integration_helpers.rb +18 -12
- data/test/test_complexity_validator.rb +42 -41
- data/test/test_database_authenticatable_patch.rb +3 -3
- data/test/test_paranoid_verification.rb +8 -8
- data/test/test_password_expirable.rb +1 -1
- data/test/test_secure_validatable.rb +5 -13
- data/test/test_session_limitable.rb +7 -7
- data/test/tmp/config/initializers/devise_security.rb +3 -0
- data/test/tmp/config/locales/devise.security_extension.by.yml +1 -0
- data/test/tmp/config/locales/devise.security_extension.cs.yml +5 -0
- data/test/tmp/config/locales/devise.security_extension.de.yml +1 -0
- data/test/tmp/config/locales/devise.security_extension.es.yml +12 -0
- data/test/tmp/config/locales/devise.security_extension.fa.yml +1 -0
- data/test/tmp/config/locales/devise.security_extension.fr.yml +14 -2
- data/test/tmp/config/locales/devise.security_extension.hi.yml +1 -0
- data/test/tmp/config/locales/devise.security_extension.it.yml +1 -0
- data/test/tmp/config/locales/devise.security_extension.ja.yml +12 -0
- data/test/tmp/config/locales/devise.security_extension.nl.yml +1 -0
- data/test/tmp/config/locales/devise.security_extension.pt.yml +1 -0
- data/test/tmp/config/locales/devise.security_extension.ru.yml +1 -0
- data/test/tmp/config/locales/devise.security_extension.tr.yml +25 -1
- data/test/tmp/config/locales/devise.security_extension.uk.yml +1 -0
- data/test/tmp/config/locales/devise.security_extension.zh_CN.yml +1 -0
- data/test/tmp/config/locales/devise.security_extension.zh_TW.yml +1 -0
- metadata +45 -27
- data/lib/devise-security/patches/confirmations_controller_captcha.rb +0 -23
- data/lib/devise-security/patches/confirmations_controller_security_question.rb +0 -26
- data/lib/devise-security/patches/passwords_controller_captcha.rb +0 -22
- data/lib/devise-security/patches/passwords_controller_security_question.rb +0 -25
- data/lib/devise-security/patches/registrations_controller_captcha.rb +0 -35
- data/lib/devise-security/patches/sessions_controller_captcha.rb +0 -26
- data/lib/devise-security/patches/unlocks_controller_captcha.rb +0 -22
- data/lib/devise-security/patches/unlocks_controller_security_question.rb +0 -25
- data/test/dummy/app/controllers/foos_controller.rb +0 -0
- data/test/dummy/lib/shared_user_without_email.rb +0 -29
- 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
|
|
13
|
-
other: doit contenir au moins %{count} lettres
|
|
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
|
|
@@ -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 @@ 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
|
-
|
|
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: Код підтвердження
|
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.
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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:
|
|
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
|
|
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
|
|
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.
|
|
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
|