devise-security 0.15.0 → 0.16.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/README.md +27 -19
- data/app/controllers/devise/password_expired_controller.rb +1 -5
- data/config/locales/by.yml +1 -0
- data/config/locales/cs.yml +1 -0
- data/config/locales/de.yml +1 -0
- data/config/locales/en.yml +1 -0
- data/config/locales/es.yml +1 -0
- data/config/locales/fa.yml +1 -0
- data/config/locales/fr.yml +1 -0
- data/config/locales/hi.yml +21 -20
- data/config/locales/it.yml +1 -0
- data/config/locales/ja.yml +1 -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 +1 -0
- 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.rb +6 -3
- data/lib/devise-security/controllers/helpers.rb +2 -2
- data/lib/devise-security/hooks/session_limitable.rb +10 -6
- data/lib/devise-security/models/secure_validatable.rb +15 -1
- data/lib/devise-security/version.rb +1 -1
- data/lib/generators/devise_security/install_generator.rb +3 -3
- data/lib/generators/templates/{devise-security.rb → devise_security.rb} +3 -0
- data/test/controllers/test_password_expired_controller.rb +67 -98
- data/test/controllers/test_security_question_controller.rb +16 -40
- data/test/dummy/config/environments/test.rb +3 -13
- data/test/dummy/config/initializers/migration_class.rb +1 -8
- data/test/dummy/config/mongoid.yml +1 -1
- data/test/dummy/log/development.log +883 -0
- data/test/dummy/log/test.log +19890 -0
- data/test/integration/test_password_expirable_workflow.rb +0 -4
- data/test/orm/mongoid.rb +2 -1
- data/test/support/integration_helpers.rb +14 -32
- data/test/support/mongoid.yml +1 -1
- data/test/test_helper.rb +4 -4
- data/test/test_install_generator.rb +1 -1
- data/test/test_secure_validatable.rb +76 -0
- data/test/tmp/config/initializers/devise-security.rb +3 -0
- data/test/tmp/config/locales/devise.security_extension.by.yml +49 -0
- data/test/tmp/config/locales/devise.security_extension.cs.yml +41 -0
- data/test/tmp/config/locales/devise.security_extension.de.yml +1 -0
- data/test/tmp/config/locales/devise.security_extension.en.yml +1 -0
- data/test/tmp/config/locales/devise.security_extension.es.yml +10 -9
- data/test/tmp/config/locales/devise.security_extension.fa.yml +1 -0
- data/test/tmp/config/locales/devise.security_extension.fr.yml +1 -0
- data/test/tmp/config/locales/devise.security_extension.hi.yml +42 -0
- data/test/tmp/config/locales/devise.security_extension.it.yml +1 -0
- data/test/tmp/config/locales/devise.security_extension.ja.yml +1 -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 +1 -0
- 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 +41 -0
- metadata +19 -40
- data/lib/devise-security/orm/active_record.rb +0 -20
- data/lib/devise-security/schema.rb +0 -66
@@ -17,8 +17,6 @@ class TestPasswordExpirableWorkflow < ActionDispatch::IntegrationTest
|
|
17
17
|
end
|
18
18
|
|
19
19
|
test 'sign in and change expired password' do
|
20
|
-
skip("Does not work in Rails < 5.0") if Rails.gem_version < Gem::Version.new('5.0')
|
21
|
-
|
22
20
|
sign_in(@user)
|
23
21
|
assert_redirected_to(root_path)
|
24
22
|
follow_redirect!
|
@@ -37,8 +35,6 @@ class TestPasswordExpirableWorkflow < ActionDispatch::IntegrationTest
|
|
37
35
|
end
|
38
36
|
|
39
37
|
test 'sign in and password is updated before redirect completes' do
|
40
|
-
skip("Does not work in Rails < 5.0") if Rails.gem_version < Gem::Version.new('5.0')
|
41
|
-
|
42
38
|
sign_in(@user)
|
43
39
|
assert_redirected_to(root_path)
|
44
40
|
|
data/test/orm/mongoid.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'mongoid/version'
|
4
|
+
require 'database_cleaner-mongoid'
|
4
5
|
|
5
6
|
Mongoid.configure do |config|
|
6
7
|
config.load!('test/support/mongoid.yml', Rails.env)
|
@@ -8,5 +9,5 @@ Mongoid.configure do |config|
|
|
8
9
|
config.include_root_in_json = true
|
9
10
|
end
|
10
11
|
|
11
|
-
DatabaseCleaner[:mongoid].strategy = :
|
12
|
+
DatabaseCleaner[:mongoid].strategy = :deletion
|
12
13
|
ORMInvalidRecordException = Mongoid::Errors::Validations
|
@@ -1,47 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module IntegrationHelpers
|
2
4
|
# login the user. This will exercise all the Warden Hooks
|
3
5
|
# @param user [User]
|
4
6
|
# @param session [ActionDispatch::Integration::Session]
|
5
7
|
# @return [void]
|
6
|
-
# @note accounts for differences in the integration test API between rails versions
|
7
8
|
def sign_in(user, session = integration_session)
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
}
|
15
|
-
else
|
16
|
-
session.post new_user_session_path, {
|
17
|
-
user: {
|
18
|
-
email: user.email,
|
19
|
-
password: user.password
|
20
|
-
}
|
21
|
-
}
|
22
|
-
end
|
9
|
+
session.post new_user_session_path, params: {
|
10
|
+
user: {
|
11
|
+
email: user.email,
|
12
|
+
password: user.password,
|
13
|
+
},
|
14
|
+
}
|
23
15
|
end
|
24
16
|
|
25
17
|
# attempt to login the user with a bad password. This will exercise all the Warden Hooks
|
26
18
|
# @param user [User]
|
27
19
|
# @param session [ActionDispatch::Integration::Session]
|
28
20
|
# @return [void]
|
29
|
-
# @note accounts for differences in the integration test API between rails versions
|
30
21
|
def failed_sign_in(user, session)
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
}
|
38
|
-
else
|
39
|
-
session.post new_user_session_path, {
|
40
|
-
user: {
|
41
|
-
email: user.email,
|
42
|
-
password: 'bad-password'
|
43
|
-
}
|
44
|
-
}
|
45
|
-
end
|
22
|
+
session.post new_user_session_path, params: {
|
23
|
+
user: {
|
24
|
+
email: user.email,
|
25
|
+
password: 'bad-password',
|
26
|
+
},
|
27
|
+
}
|
46
28
|
end
|
47
29
|
end
|
data/test/support/mongoid.yml
CHANGED
data/test/test_helper.rb
CHANGED
@@ -34,10 +34,10 @@ require 'devise-security'
|
|
34
34
|
require 'database_cleaner'
|
35
35
|
require "orm/#{DEVISE_ORM}"
|
36
36
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
37
|
+
# Controller testing is the way that Devise itself tests the functionality of
|
38
|
+
# controller, even though it has been deprecated in favor of request tests.
|
39
|
+
require 'rails-controller-testing'
|
40
|
+
Rails::Controller::Testing.install
|
41
41
|
require 'support/integration_helpers'
|
42
42
|
|
43
43
|
class Minitest::Test
|
@@ -11,7 +11,7 @@ class TestInstallGenerator < Rails::Generators::TestCase
|
|
11
11
|
|
12
12
|
test 'Assert all files are properly created' do
|
13
13
|
run_generator
|
14
|
-
assert_file 'config/initializers/
|
14
|
+
assert_file 'config/initializers/devise_security.rb'
|
15
15
|
assert_file 'config/locales/devise.security_extension.by.yml'
|
16
16
|
assert_file 'config/locales/devise.security_extension.cs.yml'
|
17
17
|
assert_file 'config/locales/devise.security_extension.de.yml'
|
@@ -82,4 +82,80 @@ class TestSecureValidatable < ActiveSupport::TestCase
|
|
82
82
|
refute user.valid?
|
83
83
|
assert_equal DEVISE_ORM == :active_record ? ['Email has already been taken'] : ['Email is already taken'], user.errors.full_messages
|
84
84
|
end
|
85
|
+
|
86
|
+
test 'password can not equal email for new user' do
|
87
|
+
msg = 'Password must be different than the email.'
|
88
|
+
user = User.create email: 'bob@microsoft.com', password: 'bob@microsoft.com', password_confirmation: 'bob@microsoft.com'
|
89
|
+
refute user.valid?
|
90
|
+
assert_includes(user.errors.full_messages, msg)
|
91
|
+
assert_raises(ORMInvalidRecordException) { user.save! }
|
92
|
+
end
|
93
|
+
|
94
|
+
test 'password can not equal case sensitive version of email for new user' do
|
95
|
+
msg = 'Password must be different than the email.'
|
96
|
+
user = User.create email: 'bob@microsoft.com', password: 'BoB@microsoft.com', password_confirmation: 'BoB@microsoft.com'
|
97
|
+
refute user.valid?
|
98
|
+
assert_includes(user.errors.full_messages, msg)
|
99
|
+
assert_raises(ORMInvalidRecordException) { user.save! }
|
100
|
+
end
|
101
|
+
|
102
|
+
test 'password can not equal email with spaces for new user' do
|
103
|
+
msg = 'Password must be different than the email.'
|
104
|
+
user = User.create email: 'bob@microsoft.com', password: 'bob@microsoft.com ', password_confirmation: 'bob@microsoft.com '
|
105
|
+
refute user.valid?
|
106
|
+
assert_includes(user.errors.full_messages, msg)
|
107
|
+
assert_raises(ORMInvalidRecordException) { user.save! }
|
108
|
+
end
|
109
|
+
|
110
|
+
test 'password can not equal case sensitive version of email with spaces for new user' do
|
111
|
+
msg = 'Password must be different than the email.'
|
112
|
+
user = User.create email: 'bob@microsoft.com', password: ' BoB@microsoft.com ', password_confirmation: ' BoB@microsoft.com '
|
113
|
+
refute user.valid?
|
114
|
+
assert_includes(user.errors.full_messages, msg)
|
115
|
+
assert_raises(ORMInvalidRecordException) { user.save! }
|
116
|
+
end
|
117
|
+
|
118
|
+
test 'password can not equal email for existing user' do
|
119
|
+
user = User.create email: 'bob@microsoft.com', password: 'pAs5W0rd!Is5e6Ure', password_confirmation: 'pAs5W0rd!Is5e6Ure'
|
120
|
+
|
121
|
+
msg = 'Password must be different than the email.'
|
122
|
+
user.password = 'bob@microsoft.com'
|
123
|
+
user.password_confirmation = 'bob@microsoft.com'
|
124
|
+
refute user.valid?
|
125
|
+
assert_includes(user.errors.full_messages, msg)
|
126
|
+
assert_raises(ORMInvalidRecordException) { user.save! }
|
127
|
+
end
|
128
|
+
|
129
|
+
test 'password can not equal case sensitive version of email for existing user' do
|
130
|
+
user = User.create email: 'bob@microsoft.com', password: 'pAs5W0rd!Is5e6Ure', password_confirmation: 'pAs5W0rd!Is5e6Ure'
|
131
|
+
|
132
|
+
msg = 'Password must be different than the email.'
|
133
|
+
user.password = 'BoB@microsoft.com'
|
134
|
+
user.password_confirmation = 'BoB@microsoft.com'
|
135
|
+
refute user.valid?
|
136
|
+
assert_includes(user.errors.full_messages, msg)
|
137
|
+
assert_raises(ORMInvalidRecordException) { user.save! }
|
138
|
+
end
|
139
|
+
|
140
|
+
test 'password can not equal email with spaces for existing user' do
|
141
|
+
user = User.create email: 'bob@microsoft.com', password: 'pAs5W0rd!Is5e6Ure', password_confirmation: 'pAs5W0rd!Is5e6Ure'
|
142
|
+
|
143
|
+
msg = 'Password must be different than the email.'
|
144
|
+
user.password = 'bob@microsoft.com '
|
145
|
+
user.password_confirmation = 'bob@microsoft.com '
|
146
|
+
refute user.valid?
|
147
|
+
assert_includes(user.errors.full_messages, msg)
|
148
|
+
assert_raises(ORMInvalidRecordException) { user.save! }
|
149
|
+
end
|
150
|
+
|
151
|
+
test 'password can not equal case sensitive version of email with spaces for existing user' do
|
152
|
+
user = User.create email: 'bob@microsoft.com', password: 'pAs5W0rd!Is5e6Ure', password_confirmation: 'pAs5W0rd!Is5e6Ure'
|
153
|
+
|
154
|
+
msg = 'Password must be different than the email.'
|
155
|
+
user.password = ' BoB@microsoft.com '
|
156
|
+
user.password_confirmation = ' BoB@microsoft.com '
|
157
|
+
refute user.valid?
|
158
|
+
assert_includes(user.errors.full_messages, msg)
|
159
|
+
assert_raises(ORMInvalidRecordException) { user.save! }
|
160
|
+
end
|
85
161
|
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
by:
|
2
|
+
errors:
|
3
|
+
messages:
|
4
|
+
taken_in_past: 'ужо раней выкарыстоўваўся.'
|
5
|
+
equal_to_current_password: 'павінен адрознівацца ад сучаснага пароля.'
|
6
|
+
equal_to_email: 'павінна адрознівацца ад электроннай пошты.'
|
7
|
+
password_complexity:
|
8
|
+
digit:
|
9
|
+
one: 'павінен утрымліваць хоць адну лічбу'
|
10
|
+
few: 'павінен утрымліваць хоць %{count} лічбы'
|
11
|
+
many: 'павінен утрымліваць хоць %{count} лічбы'
|
12
|
+
other: 'павінен утрымліваць хоць %{count} лічбы'
|
13
|
+
lower:
|
14
|
+
one: 'павінен утрымліваць хоць адну маленькую літару'
|
15
|
+
few: 'павінен утрымліваць хоць %{count} малыx літары'
|
16
|
+
many: 'павінен утрымліваць хоць %{count} малыx літары'
|
17
|
+
other: 'павінен утрымліваць хоць %{count} малыx літары'
|
18
|
+
symbol:
|
19
|
+
one: 'павінен утрымліваць хоць адзін знак пунктуацыі або сімвал'
|
20
|
+
few: 'павінен утрымліваць хоць %{count} знака пунктуацыі або сімвала'
|
21
|
+
many: 'павінен утрымліваць хоць %{count} знака пунктуацыі або сімвала'
|
22
|
+
other: 'павінен утрымліваць хоць %{count} знака пунктуацыі або сімвала'
|
23
|
+
upper:
|
24
|
+
one: 'павінен утрымліваць хоць адну вялікую літару'
|
25
|
+
few: 'павінен утрымліваць хоць %{count} вялікіx літары'
|
26
|
+
many: 'павінен утрымліваць хоць %{count} вялікіx літары'
|
27
|
+
other: 'павінен утрымліваць хоць %{count} вялікіx літары'
|
28
|
+
devise:
|
29
|
+
invalid_captcha: 'Уведзены няправільны код капчы.'
|
30
|
+
invalid_security_question: 'Адказ на сакрэтнае пытанне быў няправільны.'
|
31
|
+
paranoid_verify:
|
32
|
+
code_required: 'Калі ласка, увядзіце код, атрыманы ад нашай каманды падтрымкі'
|
33
|
+
paranoid_verification_code:
|
34
|
+
show:
|
35
|
+
submit_verification_code: 'Увод кода пацверджання'
|
36
|
+
verification_code: 'Код пацверджання'
|
37
|
+
submit: 'Адправіць'
|
38
|
+
password_expired:
|
39
|
+
updated: 'Ваш новы пароль захаваны.'
|
40
|
+
change_required: 'Ваш пароль састарэў. Калі ласка, усталюйце новы.'
|
41
|
+
show:
|
42
|
+
renew_your_password: 'Змена пароля'
|
43
|
+
current_password: 'Сучасны пароль'
|
44
|
+
new_password: 'Новы пароль'
|
45
|
+
new_password_confirmation: 'Пацвердзіце новы пароль'
|
46
|
+
change_my_password: 'Змяніць пароль'
|
47
|
+
failure:
|
48
|
+
session_limited: 'Вашы параметры ўваходу выкарыстоўваюцца ў іншым браўзэры. Калі ласка, аўтарызуйцеся зноў, каб працягнуць у гэтым браўзэры.'
|
49
|
+
expired: 'Ваш уліковы запіс састарэў з-за неактыўнасці. Калі ласка, звяжыцеся з адміністратарам.'
|
@@ -0,0 +1,41 @@
|
|
1
|
+
cs:
|
2
|
+
errors:
|
3
|
+
messages:
|
4
|
+
taken_in_past: bylo již použito v minulosti.
|
5
|
+
equal_to_current_password: se musí lišit od aktuálního hesla.
|
6
|
+
equal_to_email: musí být jiný než e-mail.
|
7
|
+
password_complexity:
|
8
|
+
digit:
|
9
|
+
one: musí obsahovat alespoň jednu číslici
|
10
|
+
other: musí obsahovat alespoň %{count} číslice
|
11
|
+
lower:
|
12
|
+
one: musí obsahovat alespoň jedno malé písmeno
|
13
|
+
other: musí obsahovat alespoň %{count} malé písmena
|
14
|
+
symbol:
|
15
|
+
one: musí obsahovat alespoň jedno interpunkční znaménko nebo symbol
|
16
|
+
other: musí obsahovat alespoň %{count} interpunkční znaménka nebo symboly
|
17
|
+
upper:
|
18
|
+
one: musí obsahovat alespoň jedno velké písmeno
|
19
|
+
other: musí obsahovat alespoň %{count} velké písmena
|
20
|
+
devise:
|
21
|
+
invalid_captcha: Chybná captcha.
|
22
|
+
invalid_security_question: Chybná odpověď na bezpečnostní otázku.
|
23
|
+
paranoid_verify:
|
24
|
+
code_required: Zadejte kód, který poskytla naše podpora
|
25
|
+
paranoid_verification_code:
|
26
|
+
show:
|
27
|
+
submit_verification_code: Odeslat ověřovací kód
|
28
|
+
verification_code: Ověřovací kód
|
29
|
+
submit: Odeslat
|
30
|
+
password_expired:
|
31
|
+
updated: Vaše nové heslo bylo uloženo.
|
32
|
+
change_required: Platnost Vašeho hesla vypršela. Prosím, obnovte si jej.
|
33
|
+
show:
|
34
|
+
renew_your_password: Obnovit heslo
|
35
|
+
current_password: Současné heslo
|
36
|
+
new_password: Nové heslo
|
37
|
+
new_password_confirmation: Potvrďte nové heslo
|
38
|
+
change_my_password: Změnit moje heslo
|
39
|
+
failure:
|
40
|
+
session_limited: Vaše přihlašovací údaje byly použity v jiném prohlížeči. Chcete-li pokračovat v tomto prohlížeči, znovu se přihlaste.
|
41
|
+
expired: Platnost Vašeho účtu vypršela z důvodu nečinnosti. Obraťte se na správce webu.
|
@@ -3,6 +3,7 @@ de:
|
|
3
3
|
messages:
|
4
4
|
taken_in_past: 'wurde bereits in der Vergangenheit verwendet.'
|
5
5
|
equal_to_current_password: 'darf nicht dem aktuellen Passwort entsprechen.'
|
6
|
+
equal_to_email: 'darf nicht dem E-mail entsprechen.'
|
6
7
|
password_complexity:
|
7
8
|
digit:
|
8
9
|
one: muss mindestens eine Ziffer enthalten
|
@@ -1,29 +1,30 @@
|
|
1
1
|
es:
|
2
2
|
errors:
|
3
3
|
messages:
|
4
|
-
taken_in_past: 'la contraseña fue usada previamente, favor
|
4
|
+
taken_in_past: 'la contraseña fue usada previamente, por favor elige otra.'
|
5
5
|
equal_to_current_password: 'tiene que ser diferente a la contraseña actual.'
|
6
|
+
equal_to_email: 'tiene que ser diferente al email'
|
6
7
|
password_complexity:
|
7
8
|
digit:
|
8
|
-
one: tiene que contener al menos un
|
9
|
-
other: tiene que contener al menos %{count}
|
9
|
+
one: tiene que contener al menos un dígito
|
10
|
+
other: tiene que contener al menos %{count} dígitos
|
10
11
|
lower:
|
11
|
-
one: tiene que contener al menos
|
12
|
+
one: tiene que contener al menos una minúscula
|
12
13
|
other: tiene que contener al menos %{count} minúsculas
|
13
14
|
symbol:
|
14
15
|
one: tiene que contener al menos un signo de puntuación
|
15
16
|
other: tiene que contener al menos %{count} signos de puntuación
|
16
17
|
upper:
|
17
|
-
one: tiene que contener al menos
|
18
|
+
one: tiene que contener al menos una mayúscula
|
18
19
|
other: tiene que contener al menos %{count} mayúsculas
|
19
20
|
devise:
|
20
21
|
invalid_captcha: 'El captcha ingresado es inválido.'
|
21
|
-
invalid_security_question: 'La respuesta a la pregunta de
|
22
|
+
invalid_security_question: 'La respuesta a la pregunta de seguridad fue incorrecta.'
|
22
23
|
paranoid_verify:
|
23
24
|
code_required: 'Por favor ingrese el código provisto por nuestro equipo de soporte'
|
24
25
|
password_expired:
|
25
|
-
updated: 'Su nueva
|
26
|
-
change_required: 'Su
|
26
|
+
updated: 'Su nueva contraseña ha sido guardada.'
|
27
|
+
change_required: 'Su contraseña ha expirado. Por favor renueve su contraseña.'
|
27
28
|
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
|
29
|
+
session_limited: 'Sus credenciales de inicio de sesión fueron usadas en otro navegador. Por favor inicie sesión nuevamente para continuar en este navegador.'
|
29
30
|
expired: 'Su cuenta ha expirado debido a inactividad. Por favor contacte al administrador de la aplicación.'
|
@@ -3,6 +3,7 @@ fr:
|
|
3
3
|
messages:
|
4
4
|
taken_in_past: a été utilisé trop récemment. Veuillez en choisir un autre
|
5
5
|
equal_to_current_password: doit être différent de l'actuel
|
6
|
+
equal_to_email: doit être différent de l'e-mail
|
6
7
|
password_complexity:
|
7
8
|
digit:
|
8
9
|
one: doit contenir au moins un chiffre
|
@@ -0,0 +1,42 @@
|
|
1
|
+
|
2
|
+
hi:
|
3
|
+
errors:
|
4
|
+
messages:
|
5
|
+
taken_in_past: यह पासवर्ड, आपके द्वारा पूर्व मे प्रयोग किया जा चुका है
|
6
|
+
equal_to_current_password: नया पासवर्ड, वर्तमान पासवर्ड से भिन्न होना चाहिए
|
7
|
+
equal_to_email: ईमेल से अलग होना चाहिए
|
8
|
+
password_complexity:
|
9
|
+
digit:
|
10
|
+
one: एक अंक होना चाहिए
|
11
|
+
other: कम से कम %{count} अंक होने चाहिए
|
12
|
+
lower:
|
13
|
+
one: एक लोअर-केस अक्षर होना चाहिए
|
14
|
+
other: कम से कम %{count} अक्षर होने चाहिए
|
15
|
+
symbol:
|
16
|
+
one: एक चिन्ह होना चाहिए
|
17
|
+
other: कम से कम %{count} चिन्ह होने चाहिए
|
18
|
+
upper:
|
19
|
+
one: एक अपर-केस अक्षर होना चाहिए
|
20
|
+
other: कम से कम %{count} अपर-केस अक्षर होने चाहिए
|
21
|
+
devise:
|
22
|
+
invalid_captcha: अमान्य कॅप्टचा
|
23
|
+
invalid_security_question: अमान्य सुरक्षा उत्तर
|
24
|
+
paranoid_verify:
|
25
|
+
code_required: सपोर्ट टीम द्वारा दिया गया कोड डाले
|
26
|
+
paranoid_verification_code:
|
27
|
+
show:
|
28
|
+
submit_verification_code: वेरिफिकेशन कोड डाले
|
29
|
+
verification_code: वेरिफिकेशन कोड
|
30
|
+
submit: सबमिट
|
31
|
+
password_expired:
|
32
|
+
updated: पासवर्ड अद्यतन किया गया
|
33
|
+
change_required: पासवर्ड अमान्य हो चुका, पासवर्ड बदले
|
34
|
+
show:
|
35
|
+
renew_your_password: पासवर्ड बदले
|
36
|
+
current_password: वर्तमान पासवर्ड
|
37
|
+
new_password: नया पासवर्ड
|
38
|
+
new_password_confirmation: नए पासवर्ड की पुष्टि करें
|
39
|
+
change_my_password: पासवर्ड बदले
|
40
|
+
failure:
|
41
|
+
session_limited: जानकारी, दूसरे ब्राउज़र में उपयोग की गयी थी जारी रखने फिर से साइन-इन करे
|
42
|
+
expired: कोई गतिविधि न होने के कारण खाता बंद हो गया, सिस्टम व्यवस्थापक से संपर्क करें
|
@@ -3,6 +3,7 @@ it:
|
|
3
3
|
messages:
|
4
4
|
taken_in_past: "è stata gia' utilizzata in passato!"
|
5
5
|
equal_to_current_password: " deve essere differente dalla password corrente!"
|
6
|
+
equal_to_email: "deve essere differente dall'email"
|
6
7
|
password_complexity:
|
7
8
|
digit:
|
8
9
|
one: deve contenere almeno una cifra
|