devise-security 0.14.0.rc1 → 0.15.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 (86) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +116 -60
  3. data/app/controllers/devise/password_expired_controller.rb +10 -1
  4. data/app/views/devise/paranoid_verification_code/show.html.erb +3 -3
  5. data/app/views/devise/password_expired/show.html.erb +5 -5
  6. data/config/locales/by.yml +48 -0
  7. data/config/locales/cs.yml +40 -0
  8. data/config/locales/de.yml +12 -2
  9. data/config/locales/en.yml +12 -1
  10. data/config/locales/es.yml +9 -9
  11. data/config/locales/fa.yml +40 -0
  12. data/config/locales/hi.yml +41 -0
  13. data/config/locales/it.yml +34 -4
  14. data/config/locales/ja.yml +1 -1
  15. data/config/locales/nl.yml +40 -0
  16. data/config/locales/pt.yml +40 -0
  17. data/config/locales/ru.yml +48 -0
  18. data/config/locales/uk.yml +48 -0
  19. data/config/locales/zh_CN.yml +40 -0
  20. data/config/locales/zh_TW.yml +40 -0
  21. data/lib/devise-security.rb +1 -0
  22. data/lib/devise-security/controllers/helpers.rb +59 -50
  23. data/lib/devise-security/hooks/password_expirable.rb +2 -0
  24. data/lib/devise-security/hooks/session_limitable.rb +21 -10
  25. data/lib/devise-security/models/compatibility.rb +2 -2
  26. data/lib/devise-security/models/compatibility/{active_record.rb → active_record_patch.rb} +12 -1
  27. data/lib/devise-security/models/compatibility/{mongoid.rb → mongoid_patch.rb} +11 -1
  28. data/lib/devise-security/models/mongoid/old_password.rb +1 -1
  29. data/lib/devise-security/models/password_expirable.rb +5 -1
  30. data/lib/devise-security/models/session_limitable.rb +17 -2
  31. data/lib/devise-security/schema.rb +1 -1
  32. data/lib/devise-security/validators/password_complexity_validator.rb +4 -2
  33. data/lib/devise-security/version.rb +1 -1
  34. data/lib/generators/devise_security/install_generator.rb +2 -2
  35. data/test/{test_captcha_controller.rb → controllers/test_captcha_controller.rb} +0 -0
  36. data/test/controllers/test_password_expired_controller.rb +141 -0
  37. data/test/{test_security_question_controller.rb → controllers/test_security_question_controller.rb} +0 -0
  38. data/test/dummy/app/assets/config/manifest.js +3 -0
  39. data/test/dummy/app/controllers/widgets_controller.rb +6 -0
  40. data/test/dummy/app/models/user.rb +8 -0
  41. data/test/dummy/config/application.rb +1 -0
  42. data/test/dummy/config/routes.rb +4 -3
  43. data/test/dummy/db/migrate/20120508165529_create_tables.rb +11 -2
  44. data/test/dummy/log/test.log +1799 -0
  45. data/test/integration/test_password_expirable_workflow.rb +57 -0
  46. data/test/integration/test_session_limitable_workflow.rb +67 -0
  47. data/test/orm/active_record.rb +4 -1
  48. data/test/support/integration_helpers.rb +47 -0
  49. data/test/test_compatibility.rb +13 -0
  50. data/test/test_complexity_validator.rb +12 -0
  51. data/test/test_helper.rb +21 -6
  52. data/test/test_install_generator.rb +10 -0
  53. data/test/test_session_limitable.rb +57 -0
  54. data/test/tmp/config/initializers/devise-security.rb +44 -0
  55. data/test/tmp/config/locales/devise.security_extension.de.yml +38 -0
  56. data/test/tmp/config/locales/devise.security_extension.en.yml +40 -0
  57. data/test/tmp/config/locales/devise.security_extension.es.yml +29 -0
  58. data/test/tmp/config/locales/devise.security_extension.fa.yml +40 -0
  59. data/test/tmp/config/locales/devise.security_extension.fr.yml +29 -0
  60. data/test/tmp/config/locales/devise.security_extension.it.yml +40 -0
  61. data/test/tmp/config/locales/devise.security_extension.ja.yml +29 -0
  62. data/test/tmp/config/locales/devise.security_extension.nl.yml +40 -0
  63. data/test/tmp/config/locales/devise.security_extension.pt.yml +40 -0
  64. data/test/tmp/config/locales/devise.security_extension.ru.yml +48 -0
  65. data/test/tmp/config/locales/devise.security_extension.tr.yml +17 -0
  66. data/test/tmp/config/locales/devise.security_extension.uk.yml +48 -0
  67. data/test/tmp/config/locales/devise.security_extension.zh_CN.yml +40 -0
  68. metadata +165 -121
  69. data/.codeclimate.yml +0 -63
  70. data/.document +0 -5
  71. data/.gitignore +0 -43
  72. data/.mdlrc +0 -1
  73. data/.rubocop.yml +0 -64
  74. data/.ruby-version +0 -1
  75. data/.travis.yml +0 -41
  76. data/Appraisals +0 -35
  77. data/Gemfile +0 -10
  78. data/Rakefile +0 -28
  79. data/devise-security.gemspec +0 -50
  80. data/gemfiles/rails_4.2_stable.gemfile +0 -16
  81. data/gemfiles/rails_5.0_stable.gemfile +0 -15
  82. data/gemfiles/rails_5.1_stable.gemfile +0 -15
  83. data/gemfiles/rails_5.2_stable.gemfile +0 -15
  84. data/gemfiles/rails_6.0_beta.gemfile +0 -15
  85. data/test/dummy/app/models/.gitkeep +0 -0
  86. data/test/test_password_expired_controller.rb +0 -46
@@ -0,0 +1,29 @@
1
+ es:
2
+ errors:
3
+ messages:
4
+ taken_in_past: 'la contraseña fue usada previamente, favor elegir otra.'
5
+ equal_to_current_password: 'tiene que ser diferente a la contraseña actual.'
6
+ password_complexity:
7
+ digit:
8
+ one: tiene que contener al menos un digito
9
+ other: tiene que contener al menos %{count} digitos
10
+ lower:
11
+ one: tiene que contener al menos un minúscula
12
+ other: tiene que contener al menos %{count} minúsculas
13
+ symbol:
14
+ one: tiene que contener al menos un signo de puntuación
15
+ other: tiene que contener al menos %{count} signos de puntuación
16
+ upper:
17
+ one: tiene que contener al menos un mayúscula
18
+ other: tiene que contener al menos %{count} mayúsculas
19
+ devise:
20
+ invalid_captcha: 'El captcha ingresado es inválido.'
21
+ invalid_security_question: 'La respuesta a la pregunta de suguridad fue incorrecta.'
22
+ paranoid_verify:
23
+ code_required: 'Por favor ingrese el código provisto por nuestro equipo de soporte'
24
+ password_expired:
25
+ updated: 'Su nueva contraña ha sido guardada.'
26
+ change_required: 'Su contraña ha expirado. Por favor renueve su contraseña.'
27
+ failure:
28
+ session_limited: 'Sus credenciales de inicio de sesión fueron usadas en otro navegador. Por favor inicie sesión nuevamente para continuar en éste navegador.'
29
+ expired: 'Su cuenta ha expirado debido a inactividad. Por favor contacte al administrador de la aplicación.'
@@ -0,0 +1,40 @@
1
+ fa:
2
+ errors:
3
+ messages:
4
+ taken_in_past: 'قبلا استفاده شده است'
5
+ equal_to_current_password: 'باید متفاوت با رمز عبور فعلی باشد'
6
+ password_complexity:
7
+ digit:
8
+ one: باید حداقل یک رقم داشته باشد
9
+ other: باید حداقل %{count} عدد داشته باشد
10
+ lower:
11
+ one: باید حداقل شامل یک حرف کوچک باشد
12
+ other: باید حداقل %{count} حروف کوچک داشته باشد
13
+ symbol:
14
+ one: باید حداقل دارای یک علامت یا کارکتر خاص باشد
15
+ other: باید حداقل دارای %{count} علائم یا کارکتر های خاص باشد
16
+ upper:
17
+ one: باید حداقل یک حرف بزرگ داشته باشد
18
+ other: باید حداقل %{count} حروف بزرگ داشته باشد
19
+ devise:
20
+ invalid_captcha: 'اطلاعات وارد شده در کپچا نامعتبر بود'
21
+ invalid_security_question: 'پاسخ سوال امنیتی نامعتبر بود'
22
+ paranoid_verify:
23
+ code_required: 'لطفاً کدی را که تیم پشتیبانی ما ارائه کرده است وارد کنید'
24
+ paranoid_verification_code:
25
+ show:
26
+ submit_verification_code: ارسال کد تاییدیه
27
+ verification_code: کد تاییدیه
28
+ submit: ارسال
29
+ password_expired:
30
+ updated: 'رمز جدید شما ذخیره شده است'
31
+ change_required: 'رمز عبور شما منقضی شده است ،لطفاً رمز خود را تمدید کنید'
32
+ show:
33
+ renew_your_password: ساختن رمز عبور جدید
34
+ current_password: رمز عبور جاری
35
+ new_password: رمز عبور جدید
36
+ new_password_confirmation: تکرار رمز جدید
37
+ change_my_password: تغییر رمز عبور
38
+ failure:
39
+ session_limited: 'از اطلاعات ورود شما در مرورگر دیگری استفاده شده است، برای ادامه در این مرورگر لطفاً دوباره وارد سیستم شوید'
40
+ expired: 'حساب شما به دلیل عدم فعالیت منقضی شده است، لطفاً با مدیر سایت تماس بگیرید.'
@@ -0,0 +1,29 @@
1
+ fr:
2
+ errors:
3
+ messages:
4
+ taken_in_past: a été utilisé trop récemment. Veuillez en choisir un autre
5
+ equal_to_current_password: doit être différent de l'actuel
6
+ password_complexity:
7
+ digit:
8
+ one: doit contenir au moins un chiffre
9
+ other: doit contenir au moins %{count} chiffres
10
+ lower:
11
+ one: doit contenir au moins une lettre miniscule
12
+ other: doit contenir au moins %{count} lettres miniscules
13
+ symbol:
14
+ one: doit contenir au moins un signe de ponctuation
15
+ other: doit contenir au moins %{count} signes de ponctuation
16
+ upper:
17
+ one: doit contenir au moins une lettre majuscule
18
+ other: doit contenir au moins %{count} lettres majuscules
19
+ devise:
20
+ invalid_captcha: Le captcha n'est pas valide
21
+ invalid_security_question: La réponse à la question de sécurité est invalide
22
+ paranoid_verify:
23
+ code_required: Veuillez entrer le code fourni par notre équipe de support
24
+ password_expired:
25
+ updated: Votre nouveau mot de passe est enregistré
26
+ change_required: Votre mot de passe a expiré. Veuillez en choisir un autre
27
+ failure:
28
+ session_limited: Vos identifiants de connexion ont été utilisés dans un autre navigateur. Veuillez vous reconnecter pour continuer dans ce navigateur
29
+ expired: Votre compte a expiré pour cause d'inactivité. Veuillez contacter l'administrateur du site
@@ -0,0 +1,40 @@
1
+ it:
2
+ errors:
3
+ messages:
4
+ taken_in_past: "è stata gia' utilizzata in passato!"
5
+ equal_to_current_password: " deve essere differente dalla password corrente!"
6
+ password_complexity:
7
+ digit:
8
+ one: deve contenere almeno una cifra
9
+ other: deve contenere almeno %{count} cifre
10
+ lower:
11
+ one: deve contenere almeno una lettera minuscola
12
+ other: deve contenere almeno %{count} lettere minuscole
13
+ symbol:
14
+ one: deve contenere almeno un simbolo di punteggiatura o un simbolo speciale
15
+ other: deve contenere almeno %{count} tra simboli di punteggiatura e simboli speciali
16
+ upper:
17
+ one: deve contenere almeno una lettera maiuscola
18
+ other: deve contenere almeno %{count} lettere maiuscole
19
+ devise:
20
+ invalid_captcha: "Il captcha inserito non è valido!"
21
+ invalid_security_question: 'La risposta alla domanda di sicurezza non è valida.'
22
+ paranoid_verify:
23
+ code_required: 'Inserisci il codice fornito dal nostro team di supporto'
24
+ paranoid_verification_code:
25
+ show:
26
+ submit_verification_code: Invia codice di verifica
27
+ verification_code: Codice di verifica
28
+ submit: Invia
29
+ password_expired:
30
+ updated: "La tua nuova password è stata salvata."
31
+ change_required: "La tua password è scaduta. Si prega di rinnovarla!"
32
+ show:
33
+ renew_your_password: Rinnova la tua password
34
+ current_password: Password attuale
35
+ new_password: Nuova password
36
+ new_password_confirmation: Conferma nuova password
37
+ change_my_password: Cambia la mia password
38
+ failure:
39
+ session_limited: "Hai effettuato l accesso in un altro browser. Fai nuovamente l accesso per connetterti in questo."
40
+ expired: 'Il tuo account è stato bloccato per inattività. Contatta l amministratore del sito.'
@@ -0,0 +1,29 @@
1
+ ja:
2
+ errors:
3
+ messages:
4
+ taken_in_past: 'は既に使われています。'
5
+ equal_to_current_password: 'は現在のパスワードと異なるものである必要があります。'
6
+ password_complexity:
7
+ digit:
8
+ one: は最低1つの数字を含む必要があります。
9
+ other: は最低%{count}つの数字を含む必要があります。
10
+ lower:
11
+ one: は最低1つの小文字英字を含む必要があります。
12
+ other: は最低%{count}つの小文字英字を含む必要があります。
13
+ symbol:
14
+ one: は最低1つの記号を含む必要があります。
15
+ other: は最低%{count}つの記号を含む必要があります。
16
+ upper:
17
+ one: は最低1つの大文字英字を含む必要があります。
18
+ other: は最低%{count}つの大文字英字を含む必要があります。
19
+ devise:
20
+ invalid_captcha: 'キャプチャ入力が不正です。'
21
+ invalid_security_question: 'セキュリティ質問に対する回答が不正です。'
22
+ paranoid_verify:
23
+ code_required: 'サポートチームに提供された認証コードを入力してください。'
24
+ password_expired:
25
+ updated: '新しいパスワードが保存されました。'
26
+ change_required: 'パスワードが期限切れです。パスワードを新しく設定してください。'
27
+ failure:
28
+ session_limited: '他のブラウザでログインされました。このブラウザで続ける場合は、もう一度サインインしてください。'
29
+ expired: '活動がなかったため、あなたのアカウントは期限切れとなりました。サイト管理者に連絡してください。'
@@ -0,0 +1,40 @@
1
+ nl:
2
+ errors:
3
+ messages:
4
+ taken_in_past: is eerder gebruikt.
5
+ equal_to_current_password: moet verschillen van het huidige wachtwoord.
6
+ password_complexity:
7
+ digit:
8
+ one: moet minimaal 1 cijfer bevatten
9
+ other: moet minimaal %{count} cijfers bevatten
10
+ lower:
11
+ one: moet minimaal 1 kleine letter bevatten
12
+ other: moet minimaal %{count} kleine letters bevatten
13
+ symbol:
14
+ one: moet minimaal 1 leesteken of symbool bevatten
15
+ other: moet minimaal %{count} leestekens of symbolen bevatten
16
+ upper:
17
+ one: moet minimaal 1 hoofdletter bevatten
18
+ other: moet minimaal %{count} hoofdletters bevatten
19
+ devise:
20
+ invalid_captcha: De captcha invoer was ongeldig.
21
+ invalid_security_question: Het antwoord op de beveiligingsvraag was niet correct.
22
+ paranoid_verify:
23
+ code_required: Voer de aangeleverde code in
24
+ paranoid_verification_code:
25
+ show:
26
+ submit_verification_code: Verstuur verificatie code
27
+ verification_code: Verificatie code
28
+ submit: Verstuur
29
+ password_expired:
30
+ updated: Het nieuwe wachtwoord is opgeslagen.
31
+ change_required: Het wachtwoord is verlopen. Vernieuw je wachtwoord.
32
+ show:
33
+ renew_your_password: Vernieuw je wachtwoord
34
+ current_password: Huidig wachtwoord
35
+ new_password: Nieuw wachtwoord
36
+ new_password_confirmation: Bevestig het nieuwe wachtwoord
37
+ change_my_password: Verander mijn wachtwoord
38
+ failure:
39
+ session_limited: Je login is in een andere browser gebruikt. Log hier opnieuw in.
40
+ expired: Je account is verlopen. Neem contact op met de site beheerder.
@@ -0,0 +1,40 @@
1
+ pt:
2
+ errors:
3
+ messages:
4
+ taken_in_past: 'foi usada anteriormente.'
5
+ equal_to_current_password: 'deve ser diferente da senha atual.'
6
+ password_complexity:
7
+ digit:
8
+ one: deve conter ao menos um dígito
9
+ other: deve conter ao menos %{count} dígitos
10
+ lower:
11
+ one: deve conter ao menos uma letra minúscula
12
+ other: deve conter ao menos %{count} letras minúsculas
13
+ symbol:
14
+ one: deve conter ao menos um símbolo
15
+ other: deve conter ao menos %{count} símbolos
16
+ upper:
17
+ one: deve conter ao menos uma letra maiúscula
18
+ other: deve conter ao menos %{count} letras maiúsculas
19
+ devise:
20
+ invalid_captcha: 'O captcha está errado.'
21
+ invalid_security_question: 'A resposta da pergunta de segurança está errada.'
22
+ paranoid_verify:
23
+ code_required: 'Por favor entre o código que a equipe de suporte enviou'
24
+ paranoid_verification_code:
25
+ show:
26
+ submit_verification_code: Enviar código de verificação
27
+ verification_code: Código de verificação
28
+ submit: Enviar
29
+ password_expired:
30
+ updated: 'A nova senha foi salva.'
31
+ change_required: 'Sua senha expirou. Renove sua senha por favor.'
32
+ show:
33
+ renew_your_password: Renove sua senha
34
+ current_password: Senha atual
35
+ new_password: Senha nova
36
+ new_password_confirmation: Confirmar senha nova
37
+ change_my_password: Mudar minha senha
38
+ failure:
39
+ session_limited: 'Seu login foi utilizado em outro local. Faça o login novamente para continuar.'
40
+ expired: 'Sua conta expirou por inatividade. Por favor contate o administrador do site.'
@@ -0,0 +1,48 @@
1
+ ru:
2
+ errors:
3
+ messages:
4
+ taken_in_past: 'уже ранее использовался.'
5
+ equal_to_current_password: 'должен отличаться от текущего пароля.'
6
+ password_complexity:
7
+ digit:
8
+ one: 'должен содержать хотя бы одну цифру'
9
+ few: 'должен содержать хотя бы %{count} цифры'
10
+ many: 'должен содержать хотя бы %{count} цифр'
11
+ other: 'должен содержать хотя бы %{count} цифры'
12
+ lower:
13
+ one: 'должен содержать хотя бы одну строчную букву'
14
+ few: 'должен содержать хотя бы %{count} строчные буквы'
15
+ many: 'должен содержать хотя бы %{count} строчных букв'
16
+ other: 'должен содержать хотя бы %{count} строчных букв'
17
+ symbol:
18
+ one: 'должен содержать хотя бы один знак пунктуации или символ'
19
+ few: 'должен содержать хотя бы %{count} знака пунктуации или символа'
20
+ many: 'должен содержать хотя бы %{count} знаков пунктуации или символов'
21
+ other: 'должен содержать хотя бы %{count} знаков пунктуации или символов'
22
+ upper:
23
+ one: 'должен содержать хотя бы одну прописную букву'
24
+ few: 'должен содержать хотя бы %{count} прописные буквы'
25
+ many: 'должен содержать хотя бы %{count} прописных букв'
26
+ other: 'должен содержать хотя бы %{count} прописных букв'
27
+ devise:
28
+ invalid_captcha: 'Введен неправильный код капчи.'
29
+ invalid_security_question: 'Ответ на секретный вопрос был неверным.'
30
+ paranoid_verify:
31
+ code_required: 'Пожалуйста введите код, полученный от нашей команды поддержки'
32
+ paranoid_verification_code:
33
+ show:
34
+ submit_verification_code: Ввод кода подтверждения
35
+ verification_code: Код подверждения
36
+ submit: Отправить
37
+ password_expired:
38
+ updated: 'Ваш новый пароль сохранен.'
39
+ change_required: 'Ваш пароль устарел. Пожалуйста, установите новый.'
40
+ show:
41
+ renew_your_password: Смена пароля
42
+ current_password: Текущий пароль
43
+ new_password: Новый пароль
44
+ new_password_confirmation: Подтвердите новый пароль
45
+ change_my_password: Поменять пароль
46
+ failure:
47
+ session_limited: 'Ваши параметры входа используются в другом браузере. Пожалуйста, авторизуйтесь снова, чтобы продолжить в этом браузере.'
48
+ expired: 'Ваш аккаунт устарел из-за неактивности. Пожалуйста, свяжитесь с администратором.'
@@ -0,0 +1,17 @@
1
+ tr:
2
+ errors:
3
+ messages:
4
+ taken_in_past: "daha önce kullanıldı."
5
+ equal_to_current_password: "mevcut paroladan farklı olmalı."
6
+ password_format: "büyük, küçük harfler ve sayılar içermeli."
7
+ devise:
8
+ invalid_captcha: "Captcha hatalı."
9
+ invalid_security_question: "Güvenlik sorusunun cevabı yanlış."
10
+ paranoid_verify:
11
+ code_required: "Destek ekibimizden aldığınız kodu girin."
12
+ password_expired:
13
+ updated: "Yeni parolanız kaydedildi."
14
+ change_required: "Parolanızın geçerlilik süresi dolmuş. Lütfen parolanızı yenileyin."
15
+ failure:
16
+ session_limited: 'Hesabınıza başka bir tarayıcıdan giriş yapılmış. Lütfen devam etmek için yeniden giriş yapın.'
17
+ expired: 'Hesabınız aktif olarak kullanılmadığı için artık geçerli değil. Lütfen yönetici ile irtibata geçin.'
@@ -0,0 +1,48 @@
1
+ uk:
2
+ errors:
3
+ messages:
4
+ taken_in_past: 'раніше використовувався.'
5
+ equal_to_current_password: 'має відрізнятися від поточного паролю.'
6
+ password_complexity:
7
+ digit:
8
+ one: 'повинен включати хоча б одну цифру'
9
+ few: 'повинен включати хоча б %{count} цифри'
10
+ many: 'повинен включати хоча б %{count} цифр'
11
+ other: 'повинен включати хоча б %{count} цифри'
12
+ lower:
13
+ one: 'повинен включати хоча б одну малу букву'
14
+ few: 'повинен включати хоча б %{count} малі букви'
15
+ many: 'повинен включати хоча б %{count} малих букв'
16
+ other: 'повинен включати хоча б %{count} малі букви'
17
+ symbol:
18
+ one: 'повинен включати хоча б один розділовий знак або символ'
19
+ few: 'повинен включати хоча б %{count} розділові знаки або символи'
20
+ many: 'повинен включати хоча б %{count} розділових знаків або символів'
21
+ other: 'повинен включати хоча б %{count} розділові знаки або символи'
22
+ upper:
23
+ one: 'повинен включати хоча б одну прописну букву'
24
+ few: 'повинен включати хоча б %{count} прописні букви'
25
+ many: 'повинен включати хоча б %{count} прописних букв'
26
+ other: 'повинен включати хоча б %{count} прописні букви'
27
+ devise:
28
+ invalid_captcha: 'Введення капчі недійсне.'
29
+ invalid_security_question: 'Неправильна відповідь на секретне питання.'
30
+ paranoid_verify:
31
+ code_required: 'Введіть, будь ласка, код від нашої команди підтримки'
32
+ paranoid_verification_code:
33
+ show:
34
+ submit_verification_code: Відправити код підтвердження
35
+ verification_code: Код підтвердження
36
+ submit: Відправити
37
+ password_expired:
38
+ updated: 'Ваш новий пароль збережено.'
39
+ change_required: 'Ваш пароль застарілий. Будь ласка, оновіть пароль.'
40
+ show:
41
+ renew_your_password: Оновити свій пароль
42
+ current_password: Теперішній пароль
43
+ new_password: Новий пароль
44
+ new_password_confirmation: Підтвердити новий пароль
45
+ change_my_password: Змінити пароль
46
+ failure:
47
+ session_limited: 'Ваші облікові дані були використані в іншому браузері. Будь ласка, авторизуйтесь знову щоб продовжити в цьому браузері.'
48
+ expired: "Ваш аккаунт застарів через неактивність. Будь ласка, зв'яжіться з адміністратором."
@@ -0,0 +1,40 @@
1
+ zh_CN:
2
+ errors:
3
+ messages:
4
+ taken_in_past: '曾被使用过。'
5
+ equal_to_current_password: '必须与当前密码不同。'
6
+ password_complexity:
7
+ digit:
8
+ one: 必须包含至少1个数字
9
+ other: 必须包含至少%{count}个数字
10
+ lower:
11
+ one: 必须包含至少1个小写字母
12
+ other: 必须包含至少%{count}个小写字母
13
+ symbol:
14
+ one: 必须包含至少1个特殊符号(!"#$%&'()*+,-./:;<=>?@[\]^_‘{|}~)
15
+ other: 必须包含至少%{count}个特殊符号(!"#$%&'()*+,-./:;<=>?@[\]^_‘{|}~)
16
+ upper:
17
+ one: 必须包含至少1个大写字母
18
+ other: 必须包含至少%{count}个大写字母
19
+ devise:
20
+ invalid_captcha: '验证码无效。'
21
+ invalid_security_question: '安全问题答案无效。'
22
+ paranoid_verify:
23
+ code_required: '请输入我们支持团队提供的代码'
24
+ paranoid_verification_code:
25
+ show:
26
+ submit_verification_code: 提交验证码
27
+ verification_code: 验证码
28
+ submit: 提交
29
+ password_expired:
30
+ updated: '你的新密码已保存。'
31
+ change_required: '你的密码已过期,请更新密码。'
32
+ show:
33
+ renew_your_password: 更新你的密码
34
+ current_password: 当前密码
35
+ new_password: 新密码
36
+ new_password_confirmation: 确认新密码
37
+ change_my_password: 更改密码
38
+ failure:
39
+ session_limited: '你的登录凭据已在另一个浏览器上被使用。请重新登录以在此浏览器继续。'
40
+ expired: '由于不活跃,你的账户已过期。请联系站点管理员。'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise-security
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.14.0.rc1
4
+ version: 0.15.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marco Scholl
@@ -9,53 +9,47 @@ authors:
9
9
  - Nate Bird
10
10
  - Dillon Welch
11
11
  - Kevin Olbrich
12
- autorequire:
12
+ autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2019-03-07 00:00:00.000000000 Z
15
+ date: 2021-01-13 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
- name: railties
18
+ name: devise
19
19
  requirement: !ruby/object:Gem::Requirement
20
20
  requirements:
21
21
  - - ">="
22
22
  - !ruby/object:Gem::Version
23
- version: 4.2.0
23
+ version: 4.3.0
24
24
  - - "<"
25
25
  - !ruby/object:Gem::Version
26
- version: '6.0'
26
+ version: '5.0'
27
27
  type: :runtime
28
28
  prerelease: false
29
29
  version_requirements: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 4.2.0
33
+ version: 4.3.0
34
34
  - - "<"
35
35
  - !ruby/object:Gem::Version
36
- version: '6.0'
36
+ version: '5.0'
37
37
  - !ruby/object:Gem::Dependency
38
- name: devise
38
+ name: appraisal
39
39
  requirement: !ruby/object:Gem::Requirement
40
40
  requirements:
41
41
  - - ">="
42
42
  - !ruby/object:Gem::Version
43
- version: 4.3.0
44
- - - "<"
45
- - !ruby/object:Gem::Version
46
- version: '5.0'
47
- type: :runtime
43
+ version: '0'
44
+ type: :development
48
45
  prerelease: false
49
46
  version_requirements: !ruby/object:Gem::Requirement
50
47
  requirements:
51
48
  - - ">="
52
49
  - !ruby/object:Gem::Version
53
- version: 4.3.0
54
- - - "<"
55
- - !ruby/object:Gem::Version
56
- version: '5.0'
50
+ version: '0'
57
51
  - !ruby/object:Gem::Dependency
58
- name: appraisal
52
+ name: bundler
59
53
  requirement: !ruby/object:Gem::Requirement
60
54
  requirements:
61
55
  - - ">="
@@ -69,7 +63,7 @@ dependencies:
69
63
  - !ruby/object:Gem::Version
70
64
  version: '0'
71
65
  - !ruby/object:Gem::Dependency
72
- name: bundler
66
+ name: database_cleaner
73
67
  requirement: !ruby/object:Gem::Requirement
74
68
  requirements:
75
69
  - - ">="
@@ -83,7 +77,7 @@ dependencies:
83
77
  - !ruby/object:Gem::Version
84
78
  version: '0'
85
79
  - !ruby/object:Gem::Dependency
86
- name: coveralls
80
+ name: easy_captcha
87
81
  requirement: !ruby/object:Gem::Requirement
88
82
  requirements:
89
83
  - - ">="
@@ -97,7 +91,7 @@ dependencies:
97
91
  - !ruby/object:Gem::Version
98
92
  version: '0'
99
93
  - !ruby/object:Gem::Dependency
100
- name: database_cleaner
94
+ name: m
101
95
  requirement: !ruby/object:Gem::Requirement
102
96
  requirements:
103
97
  - - ">="
@@ -111,7 +105,7 @@ dependencies:
111
105
  - !ruby/object:Gem::Version
112
106
  version: '0'
113
107
  - !ruby/object:Gem::Dependency
114
- name: easy_captcha
108
+ name: minitest
115
109
  requirement: !ruby/object:Gem::Requirement
116
110
  requirements:
117
111
  - - ">="
@@ -125,7 +119,7 @@ dependencies:
125
119
  - !ruby/object:Gem::Version
126
120
  version: '0'
127
121
  - !ruby/object:Gem::Dependency
128
- name: m
122
+ name: omniauth
129
123
  requirement: !ruby/object:Gem::Requirement
130
124
  requirements:
131
125
  - - ">="
@@ -139,7 +133,7 @@ dependencies:
139
133
  - !ruby/object:Gem::Version
140
134
  version: '0'
141
135
  - !ruby/object:Gem::Dependency
142
- name: minitest
136
+ name: pry-byebug
143
137
  requirement: !ruby/object:Gem::Requirement
144
138
  requirements:
145
139
  - - ">="
@@ -153,7 +147,7 @@ dependencies:
153
147
  - !ruby/object:Gem::Version
154
148
  version: '0'
155
149
  - !ruby/object:Gem::Dependency
156
- name: omniauth
150
+ name: pry-rescue
157
151
  requirement: !ruby/object:Gem::Requirement
158
152
  requirements:
159
153
  - - ">="
@@ -167,7 +161,7 @@ dependencies:
167
161
  - !ruby/object:Gem::Version
168
162
  version: '0'
169
163
  - !ruby/object:Gem::Dependency
170
- name: pry-byebug
164
+ name: rails_email_validator
171
165
  requirement: !ruby/object:Gem::Requirement
172
166
  requirements:
173
167
  - - ">="
@@ -181,7 +175,21 @@ dependencies:
181
175
  - !ruby/object:Gem::Version
182
176
  version: '0'
183
177
  - !ruby/object:Gem::Dependency
184
- name: pry-rescue
178
+ name: rubocop
179
+ requirement: !ruby/object:Gem::Requirement
180
+ requirements:
181
+ - - "~>"
182
+ - !ruby/object:Gem::Version
183
+ version: 0.80.0
184
+ type: :development
185
+ prerelease: false
186
+ version_requirements: !ruby/object:Gem::Requirement
187
+ requirements:
188
+ - - "~>"
189
+ - !ruby/object:Gem::Version
190
+ version: 0.80.0
191
+ - !ruby/object:Gem::Dependency
192
+ name: rubocop-rails
185
193
  requirement: !ruby/object:Gem::Requirement
186
194
  requirements:
187
195
  - - ">="
@@ -195,7 +203,7 @@ dependencies:
195
203
  - !ruby/object:Gem::Version
196
204
  version: '0'
197
205
  - !ruby/object:Gem::Dependency
198
- name: rails_email_validator
206
+ name: simplecov-lcov
199
207
  requirement: !ruby/object:Gem::Requirement
200
208
  requirements:
201
209
  - - ">="
@@ -209,19 +217,19 @@ dependencies:
209
217
  - !ruby/object:Gem::Version
210
218
  version: '0'
211
219
  - !ruby/object:Gem::Dependency
212
- name: rubocop
220
+ name: solargraph
213
221
  requirement: !ruby/object:Gem::Requirement
214
222
  requirements:
215
- - - "~>"
223
+ - - ">="
216
224
  - !ruby/object:Gem::Version
217
- version: 0.59.2
225
+ version: '0'
218
226
  type: :development
219
227
  prerelease: false
220
228
  version_requirements: !ruby/object:Gem::Requirement
221
229
  requirements:
222
- - - "~>"
230
+ - - ">="
223
231
  - !ruby/object:Gem::Version
224
- version: 0.59.2
232
+ version: '0'
225
233
  - !ruby/object:Gem::Dependency
226
234
  name: sqlite3
227
235
  requirement: !ruby/object:Gem::Requirement
@@ -256,35 +264,29 @@ executables: []
256
264
  extensions: []
257
265
  extra_rdoc_files: []
258
266
  files:
259
- - ".codeclimate.yml"
260
- - ".document"
261
- - ".gitignore"
262
- - ".mdlrc"
263
- - ".rubocop.yml"
264
- - ".ruby-version"
265
- - ".travis.yml"
266
- - Appraisals
267
- - Gemfile
268
267
  - LICENSE.txt
269
268
  - README.md
270
- - Rakefile
271
269
  - app/controllers/devise/paranoid_verification_code_controller.rb
272
270
  - app/controllers/devise/password_expired_controller.rb
273
271
  - app/views/devise/paranoid_verification_code/show.html.erb
274
272
  - app/views/devise/password_expired/show.html.erb
273
+ - config/locales/by.yml
274
+ - config/locales/cs.yml
275
275
  - config/locales/de.yml
276
276
  - config/locales/en.yml
277
277
  - config/locales/es.yml
278
+ - config/locales/fa.yml
278
279
  - config/locales/fr.yml
280
+ - config/locales/hi.yml
279
281
  - config/locales/it.yml
280
282
  - config/locales/ja.yml
283
+ - config/locales/nl.yml
284
+ - config/locales/pt.yml
285
+ - config/locales/ru.yml
281
286
  - config/locales/tr.yml
282
- - devise-security.gemspec
283
- - gemfiles/rails_4.2_stable.gemfile
284
- - gemfiles/rails_5.0_stable.gemfile
285
- - gemfiles/rails_5.1_stable.gemfile
286
- - gemfiles/rails_5.2_stable.gemfile
287
- - gemfiles/rails_6.0_beta.gemfile
287
+ - config/locales/uk.yml
288
+ - config/locales/zh_CN.yml
289
+ - config/locales/zh_TW.yml
288
290
  - lib/devise-security.rb
289
291
  - lib/devise-security/controllers/helpers.rb
290
292
  - lib/devise-security/hooks/expirable.rb
@@ -293,8 +295,8 @@ files:
293
295
  - lib/devise-security/hooks/session_limitable.rb
294
296
  - lib/devise-security/models/active_record/old_password.rb
295
297
  - lib/devise-security/models/compatibility.rb
296
- - lib/devise-security/models/compatibility/active_record.rb
297
- - lib/devise-security/models/compatibility/mongoid.rb
298
+ - lib/devise-security/models/compatibility/active_record_patch.rb
299
+ - lib/devise-security/models/compatibility/mongoid_patch.rb
298
300
  - lib/devise-security/models/database_authenticatable_patch.rb
299
301
  - lib/devise-security/models/expirable.rb
300
302
  - lib/devise-security/models/mongoid/old_password.rb
@@ -324,12 +326,16 @@ files:
324
326
  - lib/devise-security/version.rb
325
327
  - lib/generators/devise_security/install_generator.rb
326
328
  - lib/generators/templates/devise-security.rb
329
+ - test/controllers/test_captcha_controller.rb
330
+ - test/controllers/test_password_expired_controller.rb
331
+ - test/controllers/test_security_question_controller.rb
327
332
  - test/dummy/Rakefile
333
+ - test/dummy/app/assets/config/manifest.js
328
334
  - test/dummy/app/controllers/application_controller.rb
329
335
  - test/dummy/app/controllers/captcha/sessions_controller.rb
330
336
  - test/dummy/app/controllers/foos_controller.rb
331
337
  - test/dummy/app/controllers/security_question/unlocks_controller.rb
332
- - test/dummy/app/models/.gitkeep
338
+ - test/dummy/app/controllers/widgets_controller.rb
333
339
  - test/dummy/app/models/application_record.rb
334
340
  - test/dummy/app/models/application_user_record.rb
335
341
  - test/dummy/app/models/captcha_user.rb
@@ -390,24 +396,42 @@ files:
390
396
  - test/dummy/lib/shared_user_without_email.rb
391
397
  - test/dummy/lib/shared_user_without_omniauth.rb
392
398
  - test/dummy/lib/shared_verification_fields.rb
399
+ - test/dummy/log/test.log
400
+ - test/integration/test_password_expirable_workflow.rb
401
+ - test/integration/test_session_limitable_workflow.rb
393
402
  - test/orm/active_record.rb
394
403
  - test/orm/mongoid.rb
404
+ - test/support/integration_helpers.rb
395
405
  - test/support/mongoid.yml
396
- - test/test_captcha_controller.rb
406
+ - test/test_compatibility.rb
397
407
  - test/test_complexity_validator.rb
398
408
  - test/test_helper.rb
399
409
  - test/test_install_generator.rb
400
410
  - test/test_paranoid_verification.rb
401
411
  - test/test_password_archivable.rb
402
412
  - test/test_password_expirable.rb
403
- - test/test_password_expired_controller.rb
404
413
  - test/test_secure_validatable.rb
405
- - test/test_security_question_controller.rb
414
+ - test/test_session_limitable.rb
415
+ - test/tmp/config/initializers/devise-security.rb
416
+ - test/tmp/config/locales/devise.security_extension.de.yml
417
+ - test/tmp/config/locales/devise.security_extension.en.yml
418
+ - test/tmp/config/locales/devise.security_extension.es.yml
419
+ - test/tmp/config/locales/devise.security_extension.fa.yml
420
+ - test/tmp/config/locales/devise.security_extension.fr.yml
421
+ - test/tmp/config/locales/devise.security_extension.it.yml
422
+ - test/tmp/config/locales/devise.security_extension.ja.yml
423
+ - test/tmp/config/locales/devise.security_extension.nl.yml
424
+ - test/tmp/config/locales/devise.security_extension.pt.yml
425
+ - test/tmp/config/locales/devise.security_extension.ru.yml
426
+ - test/tmp/config/locales/devise.security_extension.tr.yml
427
+ - test/tmp/config/locales/devise.security_extension.uk.yml
428
+ - test/tmp/config/locales/devise.security_extension.zh_CN.yml
406
429
  homepage: https://github.com/devise-security/devise-security
407
430
  licenses:
408
431
  - MIT
409
432
  metadata: {}
410
- post_install_message:
433
+ post_install_message: 'WARNING: devise-security will drop support for Rails 4.2 in
434
+ version 0.16.0'
411
435
  rdoc_options: []
412
436
  require_paths:
413
437
  - lib
@@ -418,92 +442,112 @@ required_ruby_version: !ruby/object:Gem::Requirement
418
442
  version: 2.3.0
419
443
  required_rubygems_version: !ruby/object:Gem::Requirement
420
444
  requirements:
421
- - - ">"
445
+ - - ">="
422
446
  - !ruby/object:Gem::Version
423
- version: 1.3.1
447
+ version: '0'
424
448
  requirements: []
425
- rubyforge_project:
426
- rubygems_version: 2.7.8
427
- signing_key:
449
+ rubygems_version: 3.0.8
450
+ signing_key:
428
451
  specification_version: 4
429
452
  summary: Security extension for devise
430
453
  test_files:
431
- - test/dummy/Rakefile
432
- - test/dummy/app/controllers/application_controller.rb
433
- - test/dummy/app/controllers/captcha/sessions_controller.rb
434
- - test/dummy/app/controllers/foos_controller.rb
435
- - test/dummy/app/controllers/security_question/unlocks_controller.rb
436
- - test/dummy/app/models/.gitkeep
437
- - test/dummy/app/models/application_record.rb
438
- - test/dummy/app/models/application_user_record.rb
439
- - test/dummy/app/models/captcha_user.rb
440
- - test/dummy/app/models/mongoid/confirmable_fields.rb
441
- - test/dummy/app/models/mongoid/database_authenticable_fields.rb
442
- - test/dummy/app/models/mongoid/expirable_fields.rb
443
- - test/dummy/app/models/mongoid/lockable_fields.rb
454
+ - test/test_password_archivable.rb
455
+ - test/dummy/app/mongoid/shim.rb
456
+ - test/dummy/app/mongoid/user_on_main_app.rb
457
+ - test/dummy/app/mongoid/user_on_engine.rb
458
+ - test/dummy/app/mongoid/one_user.rb
459
+ - test/dummy/app/mongoid/admin.rb
460
+ - test/dummy/app/mongoid/user_with_validations.rb
461
+ - test/dummy/app/mongoid/user_without_email.rb
462
+ - test/dummy/app/models/mongoid/password_archivable_fields.rb
463
+ - test/dummy/app/models/mongoid/registerable_fields.rb
444
464
  - test/dummy/app/models/mongoid/mappings.rb
445
- - test/dummy/app/models/mongoid/omniauthable_fields.rb
465
+ - test/dummy/app/models/mongoid/session_limitable_fields.rb
466
+ - test/dummy/app/models/mongoid/timeoutable_fields.rb
446
467
  - test/dummy/app/models/mongoid/paranoid_verification_fields.rb
447
- - test/dummy/app/models/mongoid/password_archivable_fields.rb
468
+ - test/dummy/app/models/mongoid/confirmable_fields.rb
448
469
  - test/dummy/app/models/mongoid/password_expirable_fields.rb
449
- - test/dummy/app/models/mongoid/recoverable_fields.rb
450
- - test/dummy/app/models/mongoid/registerable_fields.rb
451
- - test/dummy/app/models/mongoid/rememberable_fields.rb
470
+ - test/dummy/app/models/mongoid/expirable_fields.rb
471
+ - test/dummy/app/models/mongoid/database_authenticable_fields.rb
452
472
  - test/dummy/app/models/mongoid/secure_validatable_fields.rb
473
+ - test/dummy/app/models/mongoid/rememberable_fields.rb
474
+ - test/dummy/app/models/mongoid/lockable_fields.rb
453
475
  - test/dummy/app/models/mongoid/security_questionable_fields.rb
454
- - test/dummy/app/models/mongoid/session_limitable_fields.rb
455
- - test/dummy/app/models/mongoid/timeoutable_fields.rb
456
- - test/dummy/app/models/mongoid/trackable_fields.rb
457
476
  - test/dummy/app/models/mongoid/validatable_fields.rb
458
- - test/dummy/app/models/secure_user.rb
477
+ - test/dummy/app/models/mongoid/trackable_fields.rb
478
+ - test/dummy/app/models/mongoid/recoverable_fields.rb
479
+ - test/dummy/app/models/mongoid/omniauthable_fields.rb
459
480
  - test/dummy/app/models/security_question_user.rb
460
- - test/dummy/app/models/user.rb
481
+ - test/dummy/app/models/application_user_record.rb
482
+ - test/dummy/app/models/secure_user.rb
461
483
  - test/dummy/app/models/widget.rb
462
- - test/dummy/app/mongoid/admin.rb
463
- - test/dummy/app/mongoid/one_user.rb
464
- - test/dummy/app/mongoid/shim.rb
465
- - test/dummy/app/mongoid/user_on_engine.rb
466
- - test/dummy/app/mongoid/user_on_main_app.rb
467
- - test/dummy/app/mongoid/user_with_validations.rb
468
- - test/dummy/app/mongoid/user_without_email.rb
484
+ - test/dummy/app/models/application_record.rb
485
+ - test/dummy/app/models/captcha_user.rb
486
+ - test/dummy/app/models/user.rb
487
+ - test/dummy/app/controllers/application_controller.rb
488
+ - test/dummy/app/controllers/captcha/sessions_controller.rb
489
+ - test/dummy/app/controllers/foos_controller.rb
490
+ - test/dummy/app/controllers/widgets_controller.rb
491
+ - test/dummy/app/controllers/security_question/unlocks_controller.rb
469
492
  - test/dummy/app/views/foos/index.html.erb
470
- - test/dummy/config.ru
493
+ - test/dummy/app/assets/config/manifest.js
494
+ - test/dummy/config/secrets.yml
495
+ - test/dummy/config/routes.rb
496
+ - test/dummy/config/mongoid.yml
497
+ - test/dummy/config/environments/test.rb
498
+ - test/dummy/config/environment.rb
471
499
  - test/dummy/config/application.rb
472
- - test/dummy/config/boot.rb
473
500
  - test/dummy/config/database.yml
474
- - test/dummy/config/environment.rb
475
- - test/dummy/config/environments/test.rb
476
- - test/dummy/config/initializers/devise.rb
501
+ - test/dummy/config/boot.rb
477
502
  - test/dummy/config/initializers/migration_class.rb
478
- - test/dummy/config/mongoid.yml
479
- - test/dummy/config/routes.rb
480
- - test/dummy/config/secrets.yml
503
+ - test/dummy/config/initializers/devise.rb
504
+ - test/dummy/config.ru
505
+ - test/dummy/Rakefile
506
+ - test/dummy/lib/shared_verification_fields.rb
507
+ - test/dummy/lib/shared_user.rb
508
+ - test/dummy/lib/shared_user_without_email.rb
509
+ - test/dummy/lib/shared_user_without_omniauth.rb
510
+ - test/dummy/lib/shared_user_with_password_verification.rb
511
+ - test/dummy/lib/shared_expirable_columns.rb
512
+ - test/dummy/lib/shared_security_questions_fields.rb
481
513
  - test/dummy/db/migrate/20120508165529_create_tables.rb
482
514
  - test/dummy/db/migrate/20150402165590_add_verification_columns.rb
483
- - test/dummy/db/migrate/20150407162345_add_verification_attempt_column.rb
515
+ - test/dummy/db/migrate/20180318111336_add_recoverable_columns.rb
516
+ - test/dummy/db/migrate/20180318105732_add_rememberable_columns.rb
484
517
  - test/dummy/db/migrate/20160320162345_add_security_questions_fields.rb
518
+ - test/dummy/db/migrate/20180319114023_add_widget.rb
485
519
  - test/dummy/db/migrate/20180318103603_add_expireable_columns.rb
520
+ - test/dummy/db/migrate/20150407162345_add_verification_attempt_column.rb
486
521
  - test/dummy/db/migrate/20180318105329_add_confirmable_columns.rb
487
- - test/dummy/db/migrate/20180318105732_add_rememberable_columns.rb
488
- - test/dummy/db/migrate/20180318111336_add_recoverable_columns.rb
489
- - test/dummy/db/migrate/20180319114023_add_widget.rb
490
- - test/dummy/lib/shared_expirable_columns.rb
491
- - test/dummy/lib/shared_security_questions_fields.rb
492
- - test/dummy/lib/shared_user.rb
493
- - test/dummy/lib/shared_user_with_password_verification.rb
494
- - test/dummy/lib/shared_user_without_email.rb
495
- - test/dummy/lib/shared_user_without_omniauth.rb
496
- - test/dummy/lib/shared_verification_fields.rb
497
- - test/orm/active_record.rb
498
- - test/orm/mongoid.rb
499
- - test/support/mongoid.yml
500
- - test/test_captcha_controller.rb
501
- - test/test_complexity_validator.rb
502
- - test/test_helper.rb
522
+ - test/dummy/log/test.log
503
523
  - test/test_install_generator.rb
504
524
  - test/test_paranoid_verification.rb
505
- - test/test_password_archivable.rb
506
- - test/test_password_expirable.rb
507
- - test/test_password_expired_controller.rb
525
+ - test/integration/test_session_limitable_workflow.rb
526
+ - test/integration/test_password_expirable_workflow.rb
508
527
  - test/test_secure_validatable.rb
509
- - test/test_security_question_controller.rb
528
+ - test/test_session_limitable.rb
529
+ - test/support/mongoid.yml
530
+ - test/support/integration_helpers.rb
531
+ - test/test_helper.rb
532
+ - test/orm/mongoid.rb
533
+ - test/orm/active_record.rb
534
+ - test/test_compatibility.rb
535
+ - test/test_password_expirable.rb
536
+ - test/controllers/test_security_question_controller.rb
537
+ - test/controllers/test_captcha_controller.rb
538
+ - test/controllers/test_password_expired_controller.rb
539
+ - test/tmp/config/locales/devise.security_extension.nl.yml
540
+ - test/tmp/config/locales/devise.security_extension.tr.yml
541
+ - test/tmp/config/locales/devise.security_extension.ru.yml
542
+ - test/tmp/config/locales/devise.security_extension.fr.yml
543
+ - test/tmp/config/locales/devise.security_extension.fa.yml
544
+ - test/tmp/config/locales/devise.security_extension.ja.yml
545
+ - test/tmp/config/locales/devise.security_extension.en.yml
546
+ - test/tmp/config/locales/devise.security_extension.pt.yml
547
+ - test/tmp/config/locales/devise.security_extension.it.yml
548
+ - test/tmp/config/locales/devise.security_extension.de.yml
549
+ - test/tmp/config/locales/devise.security_extension.es.yml
550
+ - test/tmp/config/locales/devise.security_extension.zh_CN.yml
551
+ - test/tmp/config/locales/devise.security_extension.uk.yml
552
+ - test/tmp/config/initializers/devise-security.rb
553
+ - test/test_complexity_validator.rb