devise-security 0.15.0 → 0.18.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +3 -1
  3. data/README.md +43 -24
  4. data/app/controllers/devise/paranoid_verification_code_controller.rb +26 -12
  5. data/app/controllers/devise/password_expired_controller.rb +23 -10
  6. data/config/locales/bg.yml +42 -0
  7. data/config/locales/by.yml +2 -0
  8. data/config/locales/cs.yml +6 -0
  9. data/config/locales/de.yml +4 -0
  10. data/config/locales/en.yml +3 -1
  11. data/config/locales/es.yml +13 -0
  12. data/config/locales/fa.yml +2 -0
  13. data/config/locales/fr.yml +15 -2
  14. data/config/locales/hi.yml +22 -20
  15. data/config/locales/it.yml +2 -0
  16. data/config/locales/ja.yml +13 -0
  17. data/config/locales/nl.yml +2 -0
  18. data/config/locales/pt.yml +2 -0
  19. data/config/locales/ru.yml +2 -0
  20. data/config/locales/tr.yml +26 -1
  21. data/config/locales/uk.yml +2 -0
  22. data/config/locales/zh_CN.yml +2 -0
  23. data/config/locales/zh_TW.yml +2 -0
  24. data/lib/devise-security/controllers/helpers.rb +25 -13
  25. data/lib/devise-security/hooks/expirable.rb +3 -3
  26. data/lib/devise-security/hooks/paranoid_verification.rb +1 -3
  27. data/lib/devise-security/hooks/password_expirable.rb +1 -3
  28. data/lib/devise-security/hooks/session_limitable.rb +10 -6
  29. data/lib/devise-security/models/compatibility/active_record_patch.rb +4 -3
  30. data/lib/devise-security/models/compatibility/mongoid_patch.rb +3 -2
  31. data/lib/devise-security/models/database_authenticatable_patch.rb +18 -10
  32. data/lib/devise-security/models/expirable.rb +6 -5
  33. data/lib/devise-security/models/paranoid_verification.rb +2 -2
  34. data/lib/devise-security/models/password_archivable.rb +3 -3
  35. data/lib/devise-security/models/secure_validatable.rb +62 -11
  36. data/lib/devise-security/orm/mongoid.rb +1 -1
  37. data/lib/devise-security/patches.rb +14 -8
  38. data/lib/devise-security/routes.rb +2 -3
  39. data/lib/devise-security/validators/password_complexity_validator.rb +53 -26
  40. data/lib/devise-security/version.rb +1 -1
  41. data/lib/devise-security.rb +15 -6
  42. data/lib/generators/devise_security/install_generator.rb +4 -6
  43. data/{test/tmp/config/initializers/devise-security.rb → lib/generators/templates/devise_security.rb} +9 -1
  44. data/test/controllers/test_paranoid_verification_code_controller.rb +133 -0
  45. data/test/controllers/test_password_expired_controller.rb +122 -99
  46. data/test/controllers/test_security_question_controller.rb +19 -37
  47. data/test/dummy/app/controllers/overrides/paranoid_verification_code_controller.rb +7 -0
  48. data/test/dummy/app/controllers/overrides/password_expired_controller.rb +17 -0
  49. data/test/dummy/app/controllers/widgets_controller.rb +3 -0
  50. data/test/dummy/app/models/application_user_record.rb +2 -1
  51. data/test/dummy/app/models/mongoid/confirmable_fields.rb +2 -0
  52. data/test/dummy/app/models/mongoid/database_authenticable_fields.rb +4 -3
  53. data/test/dummy/app/models/mongoid/expirable_fields.rb +2 -0
  54. data/test/dummy/app/models/mongoid/lockable_fields.rb +2 -0
  55. data/test/dummy/app/models/mongoid/mappings.rb +4 -2
  56. data/test/dummy/app/models/mongoid/omniauthable_fields.rb +2 -0
  57. data/test/dummy/app/models/mongoid/paranoid_verification_fields.rb +2 -0
  58. data/test/dummy/app/models/mongoid/password_archivable_fields.rb +2 -0
  59. data/test/dummy/app/models/mongoid/password_expirable_fields.rb +2 -0
  60. data/test/dummy/app/models/mongoid/recoverable_fields.rb +2 -0
  61. data/test/dummy/app/models/mongoid/registerable_fields.rb +4 -2
  62. data/test/dummy/app/models/mongoid/rememberable_fields.rb +2 -0
  63. data/test/dummy/app/models/mongoid/secure_validatable_fields.rb +2 -0
  64. data/test/dummy/app/models/mongoid/security_questionable_fields.rb +2 -0
  65. data/test/dummy/app/models/mongoid/session_limitable_fields.rb +2 -0
  66. data/test/dummy/app/models/mongoid/timeoutable_fields.rb +2 -0
  67. data/test/dummy/app/models/mongoid/trackable_fields.rb +2 -0
  68. data/test/dummy/app/models/mongoid/validatable_fields.rb +2 -0
  69. data/test/dummy/app/models/paranoid_verification_user.rb +26 -0
  70. data/test/dummy/app/models/password_expired_user.rb +26 -0
  71. data/test/dummy/app/models/user.rb +5 -5
  72. data/test/dummy/app/models/widget.rb +1 -3
  73. data/test/dummy/app/mongoid/one_user.rb +5 -5
  74. data/test/dummy/app/mongoid/user_on_engine.rb +2 -2
  75. data/test/dummy/app/mongoid/user_on_main_app.rb +2 -2
  76. data/test/dummy/app/mongoid/user_with_validations.rb +3 -3
  77. data/test/dummy/app/mongoid/user_without_email.rb +7 -4
  78. data/test/dummy/config/application.rb +3 -7
  79. data/test/dummy/config/boot.rb +1 -1
  80. data/test/dummy/config/environment.rb +1 -1
  81. data/test/dummy/config/environments/test.rb +4 -13
  82. data/test/dummy/config/initializers/devise.rb +1 -5
  83. data/test/dummy/config/initializers/migration_class.rb +1 -8
  84. data/test/dummy/config/locales/en.yml +10 -0
  85. data/test/dummy/config/mongoid.yml +1 -1
  86. data/test/dummy/config/routes.rb +3 -1
  87. data/test/dummy/config.ru +1 -1
  88. data/test/dummy/db/migrate/20120508165529_create_tables.rb +5 -5
  89. data/test/dummy/lib/shared_expirable_columns.rb +1 -0
  90. data/test/dummy/lib/shared_security_questions_fields.rb +1 -0
  91. data/test/dummy/lib/shared_user.rb +17 -6
  92. data/test/dummy/lib/shared_user_without_omniauth.rb +12 -3
  93. data/test/dummy/lib/shared_verification_fields.rb +1 -0
  94. data/test/dummy/log/test.log +44592 -1151
  95. data/test/i18n_test.rb +22 -0
  96. data/test/integration/test_paranoid_verification_code_workflow.rb +53 -0
  97. data/test/integration/test_password_expirable_workflow.rb +2 -6
  98. data/test/integration/test_session_limitable_workflow.rb +5 -3
  99. data/test/orm/active_record.rb +7 -7
  100. data/test/orm/mongoid.rb +2 -1
  101. data/test/support/integration_helpers.rb +10 -22
  102. data/test/support/mongoid.yml +1 -1
  103. data/test/test_compatibility.rb +2 -0
  104. data/test/test_complexity_validator.rb +247 -37
  105. data/test/test_database_authenticatable_patch.rb +146 -0
  106. data/test/test_helper.rb +11 -12
  107. data/test/test_install_generator.rb +2 -2
  108. data/test/test_paranoid_verification.rb +8 -9
  109. data/test/test_password_archivable.rb +34 -11
  110. data/test/test_password_expirable.rb +27 -27
  111. data/test/test_secure_validatable.rb +284 -50
  112. data/test/test_secure_validatable_overrides.rb +185 -0
  113. data/test/test_session_limitable.rb +9 -9
  114. data/{lib/generators/templates/devise-security.rb → test/tmp/config/initializers/devise_security.rb} +9 -1
  115. data/test/tmp/config/locales/devise.security_extension.by.yml +50 -0
  116. data/test/tmp/config/locales/devise.security_extension.cs.yml +46 -0
  117. data/test/tmp/config/locales/devise.security_extension.de.yml +4 -0
  118. data/test/tmp/config/locales/devise.security_extension.en.yml +3 -1
  119. data/test/tmp/config/locales/devise.security_extension.es.yml +22 -9
  120. data/test/tmp/config/locales/devise.security_extension.fa.yml +2 -0
  121. data/test/tmp/config/locales/devise.security_extension.fr.yml +15 -2
  122. data/test/tmp/config/locales/devise.security_extension.hi.yml +43 -0
  123. data/test/tmp/config/locales/devise.security_extension.it.yml +2 -0
  124. data/test/tmp/config/locales/devise.security_extension.ja.yml +13 -0
  125. data/test/tmp/config/locales/devise.security_extension.nl.yml +2 -0
  126. data/test/tmp/config/locales/devise.security_extension.pt.yml +2 -0
  127. data/test/tmp/config/locales/devise.security_extension.ru.yml +2 -0
  128. data/test/tmp/config/locales/devise.security_extension.tr.yml +26 -1
  129. data/test/tmp/config/locales/devise.security_extension.uk.yml +2 -0
  130. data/test/tmp/config/locales/devise.security_extension.zh_CN.yml +2 -0
  131. data/test/tmp/config/locales/devise.security_extension.zh_TW.yml +42 -0
  132. metadata +65 -45
  133. data/lib/devise-security/orm/active_record.rb +0 -20
  134. data/lib/devise-security/patches/confirmations_controller_captcha.rb +0 -23
  135. data/lib/devise-security/patches/confirmations_controller_security_question.rb +0 -26
  136. data/lib/devise-security/patches/passwords_controller_captcha.rb +0 -22
  137. data/lib/devise-security/patches/passwords_controller_security_question.rb +0 -25
  138. data/lib/devise-security/patches/registrations_controller_captcha.rb +0 -35
  139. data/lib/devise-security/patches/sessions_controller_captcha.rb +0 -26
  140. data/lib/devise-security/patches/unlocks_controller_captcha.rb +0 -22
  141. data/lib/devise-security/patches/unlocks_controller_security_question.rb +0 -25
  142. data/lib/devise-security/schema.rb +0 -66
  143. data/test/dummy/app/controllers/foos_controller.rb +0 -0
  144. data/test/dummy/app/models/secure_user.rb +0 -9
  145. data/test/dummy/lib/shared_user_without_email.rb +0 -28
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9172082dca0b721f493e44d5183a0e660c9dd67d3893bd86b03638b039c34935
4
- data.tar.gz: 80b4649313476c6ae926fabf1db2a58abd9c8796fe639927743ab8ba8f53be97
3
+ metadata.gz: 30c17693a3331769b786cf6925dcce0b62087a894960309ad316189613b62291
4
+ data.tar.gz: defa2b29a2d67e7615062ab6bea7518b37b6f24ed4735016a4fca4ef860ffbd0
5
5
  SHA512:
6
- metadata.gz: 10f1e3243f77003658cdc377d13fe56d92fe6cf7713f3a658d01ea61ffc18788ce6508f3d894c664edf6847242e863174696f3ef810527d4d4889212a258baab
7
- data.tar.gz: dc5802511d5c406923a541ea1d10f7d3ffff715b9278adc407a1ee87c18659eccf6b1ea9328b06b08cd0f30ae6b523236ff27164ae7c44f5608b7d5c31706fbb
6
+ metadata.gz: 54fa56d5e200c73e329d1f07eb1845ce2be695ffb4afa20f475d624fb6615f1583a161c8eec8fa5f84643b957a0d9e4d4d653d5f5071f7b73784bf843a520a70
7
+ data.tar.gz: 891fcf2b29571ee6fca9d667ddbc211cf27a5ba64e6048b33d3f63a6f395e02ef88d51a6c35da3bfe761b42c04bf1a57e118ae9bb46ebb22212eb85f9a0b3179
data/LICENSE.txt CHANGED
@@ -1,4 +1,6 @@
1
- Copyright (c) 2011 Marco Scholl
1
+ Copyright (c) 2017-2022 Dillon Welch & Kevin Olbrich.
2
+
3
+ Copyright (c) 2011-2017 Marco Scholl
2
4
 
3
5
  Permission is hereby granted, free of charge, to any person obtaining
4
6
  a copy of this software and associated documentation files (the
data/README.md CHANGED
@@ -1,10 +1,10 @@
1
1
  # Devise Security
2
2
 
3
- [![Build Status](https://travis-ci.org/devise-security/devise-security.svg?branch=master)](https://travis-ci.org/devise-security/devise-security)
3
+ [![Build Status](https://github.com/devise-security/devise-security/actions/workflows/test_suite.yml/badge.svg?branch=master)](https://github.com/devise-security/devise-security/actions/workflows/test_suite.yml)
4
4
  [![Coverage Status](https://coveralls.io/repos/github/devise-security/devise-security/badge.svg?branch=master)](https://coveralls.io/github/devise-security/devise-security?branch=master)
5
5
  [![Maintainability](https://api.codeclimate.com/v1/badges/ace7cd003a0db8bffa5a/maintainability)](https://codeclimate.com/github/devise-security/devise-security/maintainability)
6
6
 
7
- A [Devise](https://github.com/plataformatec/devise) extension to add additional
7
+ A [Devise](https://github.com/heartcombo/devise) extension to add additional
8
8
  security features required by modern web applications. Forked from
9
9
  [Devise Security Extension](https://github.com/phatworx/devise_security_extension)
10
10
 
@@ -37,9 +37,9 @@ automated mass creation and brute forcing of accounts harder)
37
37
 
38
38
  ## Getting started
39
39
 
40
- Devise Security works with Devise on Rails 4.2 onwards. You can add it to your
40
+ Devise Security works with Devise on Rails >= 5.2. You can add it to your
41
41
  Gemfile after you successfully set up Devise (see
42
- [Devise documentation](https://github.com/plataformatec/devise)) with:
42
+ [Devise documentation](https://github.com/heartcombo/devise)) with:
43
43
 
44
44
  ```ruby
45
45
  gem 'devise-security'
@@ -54,7 +54,7 @@ rails generate devise_security:install
54
54
  ```
55
55
 
56
56
  The generator adds optional configurations to
57
- `config/initializers/devise-security.rb`. Enable the modules you wish to use in
57
+ `config/initializers/devise_security.rb`. Enable the modules you wish to use in
58
58
  the initializer you are ready to add Devise Security modules on top of Devise
59
59
  modules to any of your Devise models:
60
60
 
@@ -89,6 +89,8 @@ Devise.setup do |config|
89
89
  # config.expire_password_after = 3.months | true | false
90
90
 
91
91
  # Need 1 char each of: A-Z, a-z, 0-9, and a punctuation mark or symbol
92
+ # You may use "digits" in place of "digit" and "symbols" in place of
93
+ # "symbol" based on your preference
92
94
  # config.password_complexity = { digit: 1, lower: 1, symbol: 1, upper: 1 }
93
95
 
94
96
  # Number of old passwords in archive
@@ -124,6 +126,12 @@ Devise.setup do |config|
124
126
  # ==> Configuration for :expirable
125
127
  # Time period for account expiry from last_activity_at
126
128
  # config.expire_after = 90.days
129
+
130
+ # Allow passwords to be equal to email (false, true)
131
+ # config.allow_passwords_equal_to_email = false
132
+
133
+ # paranoid_verification will regenerate verification code after failed attempt
134
+ # config.paranoid_code_regenerate_after_attempt = 10
127
135
  end
128
136
  ```
129
137
 
@@ -187,10 +195,10 @@ documentation there.
187
195
  4. Add the captcha in the generated devise views for each controller you have
188
196
  activated.
189
197
 
190
- ```erb
191
- <p><%= captcha_tag %></p>
192
- <p><%= text_field_tag :captcha %></p>
193
- ```
198
+ ```erb
199
+ <p><%= captcha_tag %></p>
200
+ <p><%= text_field_tag :captcha %></p>
201
+ ```
194
202
 
195
203
  ## Schema
196
204
 
@@ -231,6 +239,20 @@ create_table :the_resources do |t|
231
239
  end
232
240
  ```
233
241
 
242
+ #### Bypassing session limitable
243
+
244
+ Sometimes it's useful to impersonate a user without authentication (e.g.
245
+ [administrator impersonating a user](https://github.com/heartcombo/devise/wiki/How-To:-Sign-in-as-another-user-if-you-are-an-admin)),
246
+ in this case the `session_limitable` strategy will log out the user, and if the
247
+ user logs in while the administrator is still logged in, the administrator will
248
+ be logged out.
249
+
250
+ For such cases the following can be used:
251
+
252
+ ```ruby
253
+ sign_in(User.find(params[:id]), scope: :user, skip_session_limitable: true)
254
+ ```
255
+
234
256
  ### Expirable
235
257
 
236
258
  ```ruby
@@ -303,8 +325,8 @@ end
303
325
 
304
326
  ## Requirements
305
327
 
306
- - Devise (<https://github.com/plataformatec/devise>)
307
- - Rails 4.2 onwards (<http://github.com/rails/rails>)
328
+ - Devise (<https://github.com/heartcombo/devise>)
329
+ - Rails 5.2 onwards (<http://github.com/rails/rails>)
308
330
  - recommendations:
309
331
  - `autocomplete-off` (<http://github.com/phatworx/autocomplete-off>)
310
332
  - `easy_captcha` (<http://github.com/phatworx/easy_captcha>)
@@ -356,28 +378,25 @@ See also
356
378
  Standard tests can be invoked using `rake`. To run the tests against the
357
379
  `mongoid` ORM, use `DEVISE_ORM=mongoid rake` while `mongodb` is running.
358
380
 
359
- To locally simulate what travis-ci will run when you push code use:
360
-
361
- ```bash
362
- gem install bundler -v '1.17.3'
363
- BUNDLER_VERSION=1.17.3 wwtd
364
- ```
365
-
366
381
  ## Maintenance Policy
367
382
 
368
- We are committed to maintain support for `devise-security` for all normal or
383
+ We are committed to maintaining support for `devise-security` for all normal or
369
384
  security maintenance versions of the Ruby language
370
385
  [as listed here](https://www.ruby-lang.org/en/downloads/branches/), and for the
371
386
  Ruby on Rails framework
372
387
  [as per their maintenance policy](https://rubyonrails.org/maintenance/).
373
388
 
374
- Support for Rails 4.2 will be dropped in version 0.16.0.
375
-
376
- In order to avoid introducing bugs caused by backwardly incompatible Ruby
389
+ To avoid introducing bugs caused by backwardly incompatible Ruby
377
390
  language features, it is highly recommended that all development work be done
378
- using the oldest supported ruby version. The contents of the `.ruby-version`
391
+ using the oldest supported Ruby version. The contents of the `.ruby-version`
379
392
  file should reflect this.
380
393
 
381
394
  ## Copyright
382
395
 
383
- Copyright (c) 2011-2017 Marco Scholl. See LICENSE.txt for further details.
396
+ Copyright (c) 2017-2023 Dillon Welch & Kevin Olbrich.
397
+
398
+ Copyright (c) 2011-2017 Marco Scholl as the project [`devise_security_extension`](https://github.com/phatworx/devise_security_extension).
399
+
400
+ This repo was created as a fork from [b2ee978a](https://github.com/phatworx/devise_security_extension/commit/b2ee978af7d49f0fb0e7271c6ac074dfb4d39353).
401
+
402
+ See LICENSE.txt for further details.
@@ -1,15 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class Devise::ParanoidVerificationCodeController < DeviseController
4
+ before_action :verify_requested_format!
4
5
  skip_before_action :handle_paranoid_verification
5
- prepend_before_action :authenticate_scope!, only: [:show, :update]
6
+ before_action :skip_paranoid_verification, only: %i[show update]
7
+ prepend_before_action :authenticate_scope!, only: %i[show update]
6
8
 
7
9
  def show
8
- if !resource.nil? && resource.need_paranoid_verification?
9
- respond_with(resource)
10
- else
11
- redirect_to :root
12
- end
10
+ respond_with(resource)
13
11
  end
14
12
 
15
13
  def update
@@ -17,20 +15,36 @@ class Devise::ParanoidVerificationCodeController < DeviseController
17
15
  warden.session(scope)['paranoid_verify'] = false
18
16
  set_flash_message :notice, :updated
19
17
  bypass_sign_in resource, scope: scope
20
- redirect_to stored_location_for(scope) || :root
18
+ respond_with({}, location: after_paranoid_verification_code_update_path_for(resource))
21
19
  else
22
20
  respond_with(resource, action: :show)
23
21
  end
24
22
  end
25
23
 
24
+ # Allows you to customize where the user is redirected to after the update action
25
+ # successfully completes.
26
+ #
27
+ # Defaults to the request's original path, and then `root` if that is `nil`.
28
+ #
29
+ # @param resource [ActiveModel::Model] Devise `resource` model for logged in user.
30
+ #
31
+ # @return [String, Symbol] The path that the user will be redirected to.
32
+ def after_paranoid_verification_code_update_path_for(_resource)
33
+ stored_location_for(scope) || :root
34
+ end
35
+
26
36
  private
27
37
 
38
+ def skip_paranoid_verification
39
+ return if !resource.nil? && resource.need_paranoid_verification?
40
+
41
+ redirect_to :root
42
+ end
43
+
28
44
  def resource_params
29
- if params.respond_to?(:permit)
30
- params.require(resource_name).permit(:paranoid_verification_code)
31
- else
32
- params[scope].slice(:paranoid_verification_code)
33
- end
45
+ permitted_params = %i[paranoid_verification_code]
46
+
47
+ params.require(resource_name).permit(*permitted_params)
34
48
  end
35
49
 
36
50
  def scope
@@ -3,8 +3,8 @@
3
3
  class Devise::PasswordExpiredController < DeviseController
4
4
  before_action :verify_requested_format!
5
5
  skip_before_action :handle_password_change
6
- before_action :skip_password_change, only: [:show, :update]
7
- prepend_before_action :authenticate_scope!, only: [:show, :update]
6
+ before_action :skip_password_change, only: %i[show update]
7
+ prepend_before_action :authenticate_scope!, only: %i[show update]
8
8
 
9
9
  def show
10
10
  respond_with(resource)
@@ -20,32 +20,45 @@ class Devise::PasswordExpiredController < DeviseController
20
20
  # @see https://github.com/devise-security/devise-security/pull/111
21
21
  def update
22
22
  resource.extend(Devise::Models::DatabaseAuthenticatablePatch)
23
- if resource.update_with_password(resource_params)
23
+ resource.update_with_password(resource_params)
24
+
25
+ yield resource if block_given?
26
+
27
+ if resource.errors.empty?
24
28
  warden.session(scope)['password_expired'] = false
25
29
  set_flash_message :notice, :updated
26
30
  bypass_sign_in resource, scope: scope
27
- respond_with({}, location: stored_location_for(scope) || :root)
31
+ respond_with({}, location: after_password_expired_update_path_for(resource))
28
32
  else
29
33
  clean_up_passwords(resource)
30
34
  respond_with(resource, action: :show)
31
35
  end
32
36
  end
33
37
 
38
+ # Allows you to customize where the user is sent to after the update action
39
+ # successfully completes.
40
+ #
41
+ # Defaults to the request's original path, and then `root` if that is `nil`.
42
+ #
43
+ # @param resource [ActiveModel::Model] Devise `resource` model for logged in user.
44
+ #
45
+ # @return [String, Symbol] The path that the user will be sent to.
46
+ def after_password_expired_update_path_for(_resource)
47
+ stored_location_for(scope) || :root
48
+ end
49
+
34
50
  private
35
51
 
36
52
  def skip_password_change
37
53
  return if !resource.nil? && resource.need_change_password?
54
+
38
55
  redirect_to :root
39
56
  end
40
57
 
41
58
  def resource_params
42
- permitted_params = [:current_password, :password, :password_confirmation]
59
+ permitted_params = %i[current_password password password_confirmation]
43
60
 
44
- if params.respond_to?(:permit)
45
- params.require(resource_name).permit(*permitted_params)
46
- else
47
- params[scope].slice(*permitted_params)
48
- end
61
+ params.require(resource_name).permit(*permitted_params)
49
62
  end
50
63
 
51
64
  def scope
@@ -0,0 +1,42 @@
1
+ bg:
2
+ errors:
3
+ messages:
4
+ taken_in_past: 'е използвана и преди.'
5
+ equal_to_current_password: 'трябва да е различна от настоящата парола.'
6
+ equal_to_email: 'трябва да е различна от e-mail адреса.'
7
+ password_complexity:
8
+ digit:
9
+ one: трябва да съдържа поне една цифра
10
+ other: трябва да съдържа %{count} цифри
11
+ lower:
12
+ one: трябва да съдържа поне една малка буква
13
+ other: трябва да съдържа поне %{count} малки букви
14
+ symbol:
15
+ one: трябва да съдържа поне един пунктоационен знак или символ
16
+ other: трябва да съдържа поне %{count} пунктоационни знака или символи
17
+ upper:
18
+ one: трябва да съдържа поне една главна буква
19
+ other: трябва да съдържа поне %{count} главни букви
20
+ devise:
21
+ invalid_captcha: 'Кодът е грешен.'
22
+ invalid_security_question: 'Отговора на тайния въпрос е грешен.'
23
+ paranoid_verify:
24
+ code_required: 'Моля въведете кода, който нашия екип по поддръжката Ви е предоставил'
25
+ paranoid_verification_code:
26
+ updated: Кодът за потвърждение е приет
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 @@ by:
3
3
  messages:
4
4
  taken_in_past: 'ужо раней выкарыстоўваўся.'
5
5
  equal_to_current_password: 'павінен адрознівацца ад сучаснага пароля.'
6
+ equal_to_email: 'павінна адрознівацца ад электроннай пошты.'
6
7
  password_complexity:
7
8
  digit:
8
9
  one: 'павінен утрымліваць хоць адну лічбу'
@@ -30,6 +31,7 @@ by:
30
31
  paranoid_verify:
31
32
  code_required: 'Калі ласка, увядзіце код, атрыманы ад нашай каманды падтрымкі'
32
33
  paranoid_verification_code:
34
+ updated: Код спраўджання прыняты
33
35
  show:
34
36
  submit_verification_code: 'Увод кода пацверджання'
35
37
  verification_code: 'Код пацверджання'
@@ -3,18 +3,23 @@ cs:
3
3
  messages:
4
4
  taken_in_past: bylo již použito v minulosti.
5
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.
6
7
  password_complexity:
7
8
  digit:
8
9
  one: musí obsahovat alespoň jednu číslici
10
+ few: musí obsahovat alespoň %{count} číslice
9
11
  other: musí obsahovat alespoň %{count} číslice
10
12
  lower:
11
13
  one: musí obsahovat alespoň jedno malé písmeno
14
+ few: musí obsahovat alespoň %{count} malé písmena
12
15
  other: musí obsahovat alespoň %{count} malé písmena
13
16
  symbol:
14
17
  one: musí obsahovat alespoň jedno interpunkční znaménko nebo symbol
18
+ few: musí obsahovat alespoň %{count} interpunkční znaménka nebo symboly
15
19
  other: musí obsahovat alespoň %{count} interpunkční znaménka nebo symboly
16
20
  upper:
17
21
  one: musí obsahovat alespoň jedno velké písmeno
22
+ few: musí obsahovat alespoň %{count} velké písmena
18
23
  other: musí obsahovat alespoň %{count} velké písmena
19
24
  devise:
20
25
  invalid_captcha: Chybná captcha.
@@ -22,6 +27,7 @@ cs:
22
27
  paranoid_verify:
23
28
  code_required: Zadejte kód, který poskytla naše podpora
24
29
  paranoid_verification_code:
30
+ updated: Ověřovací kód přijat
25
31
  show:
26
32
  submit_verification_code: Odeslat ověřovací kód
27
33
  verification_code: Ověřovací kód
@@ -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
@@ -18,8 +19,11 @@ de:
18
19
  other: muss mindestens %{count} Großbuchstaben enthalten
19
20
  devise:
20
21
  invalid_captcha: 'Die Captcha-Eingabe ist nicht gültig.'
22
+ invalid_security_question: 'Die Antwort auf die Sicherheitsfrage war ungültig.'
21
23
  paranoid_verify:
22
24
  code_required: 'Bitte geben Sie den Code ein, den unser Support-Team zur Verfügung gestellt hat.'
25
+ paranoid_verification_code:
26
+ updated: Bestätigungscode akzeptiert
23
27
  show:
24
28
  submit_verification_code: Bestätigungscode eingeben
25
29
  verification_code: Bestätigungscode
@@ -3,10 +3,11 @@ en:
3
3
  messages:
4
4
  taken_in_past: 'was used previously.'
5
5
  equal_to_current_password: 'must be different than the current password.'
6
+ equal_to_email: 'must be different than the email.'
6
7
  password_complexity:
7
8
  digit:
8
9
  one: must contain at least one digit
9
- other: must contain at least %{count} numerals
10
+ other: must contain at least %{count} digits
10
11
  lower:
11
12
  one: must contain at least one lower-case letter
12
13
  other: must contain at least %{count} lower-case letters
@@ -22,6 +23,7 @@ en:
22
23
  paranoid_verify:
23
24
  code_required: 'Please enter the code our support team provided'
24
25
  paranoid_verification_code:
26
+ updated: Verification code accepted
25
27
  show:
26
28
  submit_verification_code: Submit verification code
27
29
  verification_code: Verification code
@@ -3,6 +3,7 @@ es:
3
3
  messages:
4
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
9
  one: tiene que contener al menos un dígito
@@ -21,9 +22,21 @@ es:
21
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'
25
+ paranoid_verification_code:
26
+ updated: Se acepta el código de verificación
27
+ show:
28
+ submit_verification_code: Envíe el código de verificación
29
+ verification_code: Código de verificación
30
+ submit: Entregar
24
31
  password_expired:
25
32
  updated: 'Su nueva contraseña ha sido guardada.'
26
33
  change_required: 'Su contraseña ha expirado. Por favor renueve su contraseña.'
34
+ show:
35
+ renew_your_password: Renueve su contraseña
36
+ current_password: Actual contraseña
37
+ new_password: Nueva contraseña
38
+ new_password_confirmation: Confirmar nueva contraseña
39
+ change_my_password: Cambiar mi contraseña
27
40
  failure:
28
41
  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
42
  expired: 'Su cuenta ha expirado debido a inactividad. Por favor contacte al administrador de la aplicación.'
@@ -3,6 +3,7 @@ fa:
3
3
  messages:
4
4
  taken_in_past: 'قبلا استفاده شده است'
5
5
  equal_to_current_password: 'باید متفاوت با رمز عبور فعلی باشد'
6
+ equal_to_email: 'باید متفاوت از ایمیل باشد'
6
7
  password_complexity:
7
8
  digit:
8
9
  one: باید حداقل یک رقم داشته باشد
@@ -22,6 +23,7 @@ fa:
22
23
  paranoid_verify:
23
24
  code_required: 'لطفاً کدی را که تیم پشتیبانی ما ارائه کرده است وارد کنید'
24
25
  paranoid_verification_code:
26
+ updated: کد تأیید پذیرفته شد
25
27
  show:
26
28
  submit_verification_code: ارسال کد تاییدیه
27
29
  verification_code: کد تاییدیه
@@ -3,13 +3,14 @@ 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
9
10
  other: doit contenir au moins %{count} chiffres
10
11
  lower:
11
- one: doit contenir au moins une lettre miniscule
12
- other: doit contenir au moins %{count} lettres miniscules
12
+ one: doit contenir au moins une lettre minuscule
13
+ other: doit contenir au moins %{count} lettres minuscules
13
14
  symbol:
14
15
  one: doit contenir au moins un signe de ponctuation
15
16
  other: doit contenir au moins %{count} signes de ponctuation
@@ -21,9 +22,21 @@ fr:
21
22
  invalid_security_question: La réponse à la question de sécurité est invalide
22
23
  paranoid_verify:
23
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
24
31
  password_expired:
25
32
  updated: Votre nouveau mot de passe est enregistré
26
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
27
40
  failure:
28
41
  session_limited: Vos identifiants de connexion ont été utilisés dans un autre navigateur. Veuillez vous reconnecter pour continuer dans ce navigateur
29
42
  expired: Votre compte a expiré pour cause d'inactivité. Veuillez contacter l'administrateur du site
@@ -2,40 +2,42 @@
2
2
  hi:
3
3
  errors:
4
4
  messages:
5
- taken_in_past: यह पासवर्ड, आपके द्वारा पूर्व मे प्रयोग किया जा चुका है
6
- equal_to_current_password: नया पासवर्ड, वर्तमान पासवर्ड से भिन्न होना चाहिए
5
+ taken_in_past: यह पासवर्ड, आपके द्वारा पूर्व मे प्रयोग किया जा चुका है
6
+ equal_to_current_password: नया पासवर्ड, वर्तमान पासवर्ड से भिन्न होना चाहिए
7
+ equal_to_email: ईमेल से अलग होना चाहिए
7
8
  password_complexity:
8
9
  digit:
9
- one: एक अंक होना चाहिए
10
- other: कम से कम %{count} अंक होने चाहिए
10
+ one: एक अंक होना चाहिए
11
+ other: कम से कम %{count} अंक होने चाहिए
11
12
  lower:
12
- one: एक लोअर-केस अक्षर होना चाहिए
13
- other: कम से कम %{count} अक्षर होने चाहिए
13
+ one: एक लोअर-केस अक्षर होना चाहिए
14
+ other: कम से कम %{count} अक्षर होने चाहिए
14
15
  symbol:
15
- one: एक चिन्ह होना चाहिए
16
- other: कम से कम %{count} चिन्ह होने चाहिए
16
+ one: एक चिन्ह होना चाहिए
17
+ other: कम से कम %{count} चिन्ह होने चाहिए
17
18
  upper:
18
- one: एक अपर-केस अक्षर होना चाहिए
19
- other: कम से कम %{count} अपर-केस अक्षर होने चाहिए
19
+ one: एक अपर-केस अक्षर होना चाहिए
20
+ other: कम से कम %{count} अपर-केस अक्षर होने चाहिए
20
21
  devise:
21
22
  invalid_captcha: अमान्य कॅप्टचा
22
23
  invalid_security_question: अमान्य सुरक्षा उत्तर
23
24
  paranoid_verify:
24
- code_required: सपोर्ट टीम द्वारा दिया गया कोड डाले
25
+ code_required: सपोर्ट टीम द्वारा दिया गया कोड डाले
25
26
  paranoid_verification_code:
27
+ updated: सत्यापन कोड स्वीकार किया गया
26
28
  show:
27
- submit_verification_code: वेरिफिकेशन कोड डाले
28
- verification_code: वेरिफिकेशन कोड
29
- submit: सबमिट
29
+ submit_verification_code: वेरिफिकेशन कोड डाले
30
+ verification_code: वेरिफिकेशन कोड
31
+ submit: सबमिट
30
32
  password_expired:
31
33
  updated: पासवर्ड अद्यतन किया गया
32
- change_required: पासवर्ड अमान्य हो चुका, पासवर्ड बदले
34
+ change_required: पासवर्ड अमान्य हो चुका, पासवर्ड बदले
33
35
  show:
34
- renew_your_password: पासवर्ड बदले
36
+ renew_your_password: पासवर्ड बदले
35
37
  current_password: वर्तमान पासवर्ड
36
- new_password: नया पासवर्ड
37
- new_password_confirmation: नए पासवर्ड की पुष्टि करें
38
- change_my_password: पासवर्ड बदले
38
+ new_password: नया पासवर्ड
39
+ new_password_confirmation: नए पासवर्ड की पुष्टि करें
40
+ change_my_password: पासवर्ड बदले
39
41
  failure:
40
- session_limited: जानकारी, दूसरे ब्राउज़र में उपयोग की गयी थी जारी रखने फिर से साइन-इन करे
42
+ session_limited: जानकारी, दूसरे ब्राउज़र में उपयोग की गयी थी जारी रखने फिर से साइन-इन करे
41
43
  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
@@ -22,6 +23,7 @@ it:
22
23
  paranoid_verify:
23
24
  code_required: 'Inserisci il codice fornito dal nostro team di supporto'
24
25
  paranoid_verification_code:
26
+ updated: Codice di verifica accettato
25
27
  show:
26
28
  submit_verification_code: Invia codice di verifica
27
29
  verification_code: Codice di verifica
@@ -3,6 +3,7 @@ ja:
3
3
  messages:
4
4
  taken_in_past: 'は既に使われています。'
5
5
  equal_to_current_password: 'は現在のパスワードと異なるものである必要があります。'
6
+ equal_to_email: 'メールとは異なる必要があります'
6
7
  password_complexity:
7
8
  digit:
8
9
  one: は最低1つの数字を含む必要があります。
@@ -21,9 +22,21 @@ ja:
21
22
  invalid_security_question: 'セキュリティ質問に対する回答が不正です。'
22
23
  paranoid_verify:
23
24
  code_required: 'サポートチームに提供された認証コードを入力してください。'
25
+ paranoid_verification_code:
26
+ updated: 確認コードを受け入れました
27
+ show:
28
+ submit_verification_code: 確認コードを送信する
29
+ verification_code: 検証コード
30
+ submit: 参加する
24
31
  password_expired:
25
32
  updated: '新しいパスワードが保存されました。'
26
33
  change_required: 'パスワードが期限切れです。パスワードを新しく設定してください。'
34
+ show:
35
+ renew_your_password: パスワードを更新する
36
+ current_password: 現在のパスワード
37
+ new_password: 新しいパスワード
38
+ new_password_confirmation: 新しいパスワードを確認
39
+ change_my_password: パスワードを変更する
27
40
  failure:
28
41
  session_limited: '他のブラウザでログインされました。このブラウザで続ける場合は、もう一度サインインしてください。'
29
42
  expired: '活動がなかったため、あなたのアカウントは期限切れとなりました。サイト管理者に連絡してください。'
@@ -3,6 +3,7 @@ nl:
3
3
  messages:
4
4
  taken_in_past: is eerder gebruikt.
5
5
  equal_to_current_password: moet verschillen van het huidige wachtwoord.
6
+ equal_to_email: moet anders zijn dan de e-mail
6
7
  password_complexity:
7
8
  digit:
8
9
  one: moet minimaal 1 cijfer bevatten
@@ -22,6 +23,7 @@ nl:
22
23
  paranoid_verify:
23
24
  code_required: Voer de aangeleverde code in
24
25
  paranoid_verification_code:
26
+ updated: Verificatiecode geaccepteerd
25
27
  show:
26
28
  submit_verification_code: Verstuur verificatie code
27
29
  verification_code: Verificatie code
@@ -3,6 +3,7 @@ pt:
3
3
  messages:
4
4
  taken_in_past: 'foi usada anteriormente.'
5
5
  equal_to_current_password: 'deve ser diferente da senha atual.'
6
+ equal_to_email: 'deve ser diferente do e-mail.'
6
7
  password_complexity:
7
8
  digit:
8
9
  one: deve conter ao menos um dígito
@@ -22,6 +23,7 @@ pt:
22
23
  paranoid_verify:
23
24
  code_required: 'Por favor entre o código que a equipe de suporte enviou'
24
25
  paranoid_verification_code:
26
+ updated: Código de verificação aceito
25
27
  show:
26
28
  submit_verification_code: Enviar código de verificação
27
29
  verification_code: Código de verificação