devise-security 0.12.0 → 0.13.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 (93) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +63 -0
  3. data/.gitignore +2 -0
  4. data/.mdlrc +1 -0
  5. data/.rubocop.yml +2 -1
  6. data/.ruby-version +1 -1
  7. data/.travis.yml +9 -11
  8. data/Appraisals +2 -2
  9. data/README.md +72 -53
  10. data/app/controllers/devise/paranoid_verification_code_controller.rb +2 -0
  11. data/app/controllers/devise/password_expired_controller.rb +2 -0
  12. data/config/locales/de.yml +13 -1
  13. data/config/locales/en.yml +13 -1
  14. data/config/locales/es.yml +13 -1
  15. data/config/locales/fr.yml +29 -0
  16. data/config/locales/tr.yml +17 -0
  17. data/devise-security.gemspec +10 -10
  18. data/gemfiles/{rails_4.1_stable.gemfile → rails_5.2.0.gemfile} +1 -1
  19. data/lib/devise-security.rb +8 -4
  20. data/lib/devise-security/controllers/helpers.rb +2 -0
  21. data/lib/devise-security/hooks/expirable.rb +3 -1
  22. data/lib/devise-security/hooks/paranoid_verification.rb +2 -0
  23. data/lib/devise-security/hooks/password_expirable.rb +2 -0
  24. data/lib/devise-security/hooks/session_limitable.rb +2 -0
  25. data/lib/devise-security/models/compatibility.rb +2 -0
  26. data/lib/devise-security/models/database_authenticatable_patch.rb +2 -0
  27. data/lib/devise-security/models/expirable.rb +2 -0
  28. data/lib/devise-security/models/old_password.rb +2 -0
  29. data/lib/devise-security/models/paranoid_verification.rb +2 -0
  30. data/lib/devise-security/models/password_archivable.rb +2 -0
  31. data/lib/devise-security/models/password_expirable.rb +96 -50
  32. data/lib/devise-security/models/secure_validatable.rb +10 -4
  33. data/lib/devise-security/models/security_questionable.rb +2 -0
  34. data/lib/devise-security/models/session_limitable.rb +2 -0
  35. data/lib/devise-security/orm/active_record.rb +2 -0
  36. data/lib/devise-security/patches.rb +2 -0
  37. data/lib/devise-security/patches/confirmations_controller_captcha.rb +2 -0
  38. data/lib/devise-security/patches/confirmations_controller_security_question.rb +2 -0
  39. data/lib/devise-security/patches/controller_captcha.rb +2 -0
  40. data/lib/devise-security/patches/controller_security_question.rb +2 -0
  41. data/lib/devise-security/patches/passwords_controller_captcha.rb +2 -0
  42. data/lib/devise-security/patches/passwords_controller_security_question.rb +2 -0
  43. data/lib/devise-security/patches/registrations_controller_captcha.rb +2 -0
  44. data/lib/devise-security/patches/sessions_controller_captcha.rb +2 -0
  45. data/lib/devise-security/patches/unlocks_controller_captcha.rb +2 -0
  46. data/lib/devise-security/patches/unlocks_controller_security_question.rb +2 -0
  47. data/lib/devise-security/rails.rb +2 -0
  48. data/lib/devise-security/routes.rb +2 -0
  49. data/lib/devise-security/schema.rb +2 -0
  50. data/lib/devise-security/validators/password_complexity_validator.rb +33 -0
  51. data/lib/devise-security/version.rb +3 -1
  52. data/lib/generators/devise_security/install_generator.rb +3 -1
  53. data/lib/generators/templates/devise-security.rb +9 -3
  54. data/test/dummy/Rakefile +3 -1
  55. data/test/dummy/app/controllers/application_controller.rb +2 -0
  56. data/test/dummy/app/controllers/captcha/sessions_controller.rb +2 -0
  57. data/test/dummy/app/controllers/security_question/unlocks_controller.rb +2 -0
  58. data/test/dummy/app/models/application_record.rb +2 -0
  59. data/test/dummy/app/models/captcha_user.rb +3 -1
  60. data/test/dummy/app/models/secure_user.rb +3 -1
  61. data/test/dummy/app/models/security_question_user.rb +3 -1
  62. data/test/dummy/app/models/user.rb +2 -0
  63. data/test/dummy/app/models/widget.rb +2 -0
  64. data/test/dummy/config.ru +3 -1
  65. data/test/dummy/config/application.rb +2 -0
  66. data/test/dummy/config/boot.rb +2 -0
  67. data/test/dummy/config/environment.rb +2 -0
  68. data/test/dummy/config/environments/test.rb +2 -0
  69. data/test/dummy/config/initializers/devise.rb +8 -0
  70. data/test/dummy/config/initializers/migration_class.rb +2 -0
  71. data/test/dummy/config/routes.rb +2 -0
  72. data/test/dummy/db/migrate/20120508165529_create_tables.rb +2 -0
  73. data/test/dummy/db/migrate/20150402165590_add_verification_columns.rb +2 -0
  74. data/test/dummy/db/migrate/20150407162345_add_verification_attempt_column.rb +2 -0
  75. data/test/dummy/db/migrate/20160320162345_add_security_questions_fields.rb +2 -0
  76. data/test/dummy/db/migrate/20180318103603_add_expireable_columns.rb +2 -0
  77. data/test/dummy/db/migrate/20180318105329_add_confirmable_columns.rb +2 -0
  78. data/test/dummy/db/migrate/20180318105732_add_rememberable_columns.rb +2 -0
  79. data/test/dummy/db/migrate/20180318111336_add_recoverable_columns.rb +2 -0
  80. data/test/dummy/db/migrate/20180319114023_add_widget.rb +2 -0
  81. data/test/test_captcha_controller.rb +2 -0
  82. data/test/test_complexity_validator.rb +60 -0
  83. data/test/test_helper.rb +19 -8
  84. data/test/test_install_generator.rb +7 -1
  85. data/test/test_paranoid_verification.rb +2 -0
  86. data/test/test_password_archivable.rb +2 -0
  87. data/test/test_password_expirable.rb +68 -7
  88. data/test/test_password_expired_controller.rb +2 -0
  89. data/test/test_secure_validatable.rb +10 -11
  90. data/test/test_security_question_controller.rb +2 -0
  91. metadata +32 -39
  92. data/.circleci/config.yml +0 -41
  93. data/gemfiles/rails_5.2_rc1.gemfile +0 -8
@@ -1,20 +1,31 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ENV['RAILS_ENV'] ||= 'test'
2
4
 
3
5
  require 'simplecov'
4
- require 'coveralls'
5
- Coveralls.wear!
6
+ SimpleCov.start do
7
+ add_filter 'gemfiles'
8
+ add_group 'Tests', 'test'
9
+ add_group 'Password Expireable', "password_expirable"
10
+ end
11
+
12
+ if ENV['CI']
13
+ require 'coveralls'
14
+ SimpleCov.formatter = Coveralls::SimpleCov::Formatter
15
+ Coveralls.wear!
16
+ end
6
17
 
7
18
  require 'dummy/config/environment'
8
19
  require 'minitest/autorun'
9
20
  require 'rails/test_help'
21
+
10
22
  require 'devise-security'
23
+ require 'pry'
11
24
 
12
25
  ActiveRecord::Migration.verbose = false
13
26
  ActiveRecord::Base.logger = Logger.new(nil)
14
- ActiveRecord::Migrator.migrate(File.expand_path('../dummy/db/migrate', __FILE__))
15
-
16
- SimpleCov.formatter = Coveralls::SimpleCov::Formatter
17
- SimpleCov.start do
18
- add_filter 'test/dummy'
19
- add_filter 'gemfiles'
27
+ if Rails.gem_version >= Gem::Version.new('5.2.0')
28
+ ActiveRecord::MigrationContext.new(File.expand_path('../dummy/db/migrate', __FILE__)).migrate
29
+ else
30
+ ActiveRecord::Migrator.migrate(File.expand_path('../dummy/db/migrate', __FILE__))
20
31
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
  require 'rails/generators/test_case'
3
5
  require 'generators/devise_security/install_generator'
@@ -10,7 +12,11 @@ class TestInstallGenerator < Rails::Generators::TestCase
10
12
  test 'Assert all files are properly created' do
11
13
  run_generator
12
14
  assert_file 'config/initializers/devise-security.rb'
13
- assert_file 'config/locales/devise.security_extension.en.yml'
14
15
  assert_file 'config/locales/devise.security_extension.de.yml'
16
+ assert_file 'config/locales/devise.security_extension.en.yml'
17
+ assert_file 'config/locales/devise.security_extension.es.yml'
18
+ assert_file 'config/locales/devise.security_extension.fr.yml'
19
+ assert_file 'config/locales/devise.security_extension.it.yml'
20
+ assert_file 'config/locales/devise.security_extension.tr.yml'
15
21
  end
16
22
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TestParanoidVerification < ActiveSupport::TestCase
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TestPasswordArchivable < ActiveSupport::TestCase
@@ -1,32 +1,93 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TestPasswordArchivable < ActiveSupport::TestCase
4
6
  setup do
5
- Devise.expire_password_after = 2.month
7
+ Devise.expire_password_after = 2.months
6
8
  end
7
9
 
8
10
  teardown do
9
11
  Devise.expire_password_after = 90.days
10
12
  end
11
13
 
12
- test 'password expires' do
14
+ test 'does nothing if disabled' do
15
+ Devise.expire_password_after = false
13
16
  user = User.create email: 'bob@microsoft.com', password: 'Password1', password_confirmation: 'Password1'
14
17
  refute user.need_change_password?
18
+ refute user.password_expired?
19
+ user.need_change_password!
20
+ refute user.need_change_password?
21
+ refute user.password_expired?
22
+ end
15
23
 
16
- user.update(password_changed_at: Time.now.ago(3.month))
24
+ test 'password change can be requested' do
25
+ Devise.expire_password_after = true
26
+ user = User.create email: 'bob@microsoft.com', password: 'Password1', password_confirmation: 'Password1'
27
+ refute user.need_change_password?
28
+ refute user.password_expired?
29
+ refute user.password_change_requested?
30
+ user.need_change_password!
17
31
  assert user.need_change_password?
32
+ refute user.password_expired? # it's not too old because it's not set at all
33
+ assert user.password_change_requested?
18
34
  end
19
35
 
20
- test 'override expire after at runtime' do
36
+ test 'password expires' do
37
+ user = User.create email: 'bob@microsoft.com', password: 'Password1', password_confirmation: 'Password1'
38
+ refute user.need_change_password?
39
+ refute user.password_expired?
40
+ refute user.password_too_old?
41
+ user.update(password_changed_at: Time.now.ago(3.months))
42
+ assert user.password_too_old?
43
+ assert user.need_change_password?
44
+ assert user.password_expired?
45
+ refute user.password_change_requested?
46
+ end
47
+
48
+ test 'saving a record records the time the password was changed' do
21
49
  user = User.new email: 'bob@microsoft.com', password: 'Password1', password_confirmation: 'Password1'
50
+ assert user.password_changed_at.nil?
51
+ refute user.password_change_requested?
52
+ refute user.password_expired?
53
+ user.save
54
+ assert user.password_changed_at.present?
55
+ refute user.password_change_requested?
56
+ refute user.password_expired?
57
+ end
58
+
59
+ test 'updating a record updates the time the password was changed if the password is changed' do
60
+ user = User.create email: 'bob@microsoft.com', password: 'Password1', password_confirmation: 'Password1'
61
+ user.expire_password!
62
+ assert user.password_change_requested?
63
+ user.password = "NewPassword1"
64
+ user.password_confirmation = "NewPassword1"
65
+ user.save
66
+ assert user.previous_changes.key?(:password_changed_at)
67
+ refute user.password_change_requested?
68
+ end
69
+
70
+ test 'updating a record does not updates the time the password was changed if the password was not changed' do
71
+ user = User.create email: 'bob@microsoft.com', password: 'Password1', password_confirmation: 'Password1'
72
+ user.expire_password!
73
+ assert user.password_change_requested?
74
+ user.save
75
+ refute user.previous_changes.key?(:password_changed_at)
76
+ assert user.password_change_requested?
77
+ end
78
+
79
+ test 'override expire after at runtime' do
80
+ user = User.create email: 'bob@microsoft.com', password: 'Password1', password_confirmation: 'Password1'
22
81
  user.instance_eval do
23
82
  def expire_password_after
24
- 4.month
83
+ 4.months
25
84
  end
26
85
  end
27
- user.password_changed_at = Time.now.ago(3.month)
86
+ user.password_changed_at = Time.now.ago(3.months)
28
87
  refute user.need_change_password?
29
- user.password_changed_at = Time.now.ago(5.month)
88
+ refute user.password_expired?
89
+ user.password_changed_at = Time.now.ago(5.months)
30
90
  assert user.need_change_password?
91
+ assert user.password_expired?
31
92
  end
32
93
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class Devise::PasswordExpiredControllerTest < ActionController::TestCase
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
  require 'rails_email_validator'
3
5
 
@@ -7,13 +9,10 @@ class TestSecureValidatable < ActiveSupport::TestCase
7
9
  :paranoid_verification, :password_expirable, :secure_validatable
8
10
  end
9
11
 
10
- setup do
11
- Devise.password_regex = /(?=.*\d)(?=.*[a-z])(?=.*[A-Z])/
12
- end
13
-
14
12
  test 'email cannot be blank' do
15
13
  msg = "Email can't be blank"
16
14
  user = User.create password: 'passWord1', password_confirmation: 'passWord1'
15
+
17
16
  assert_equal(false, user.valid?)
18
17
  assert_equal([msg], user.errors.full_messages)
19
18
  assert_raises(ActiveRecord::RecordInvalid) do
@@ -31,24 +30,24 @@ class TestSecureValidatable < ActiveSupport::TestCase
31
30
  end
32
31
  end
33
32
 
34
- test 'valid both email and password' do
35
- msgs = ['Email is invalid', 'Password must contain big, small letters and digits']
36
- user = User.create email: 'bob@foo.tv', password: 'password1', password_confirmation: 'password1'
33
+ test 'validate both email and password' do
34
+ msgs = ['Email is invalid', 'Password must contain at least one upper-case letter']
35
+ user = User.create email: 'bob@@foo.tv', password: 'password1', password_confirmation: 'password1'
37
36
  assert_equal(false, user.valid?)
38
37
  assert_equal(msgs, user.errors.full_messages)
39
38
  assert_raises(ActiveRecord::RecordInvalid) { user.save! }
40
39
  end
41
40
 
42
41
  test 'password must have capital letter' do
43
- msgs = ['Email is invalid', 'Password must contain big, small letters and digits']
44
- user = User.create email: 'bob@example.org', password: 'password1', password_confirmation: 'password1'
42
+ msgs = ['Password must contain at least one upper-case letter']
43
+ user = User.create email: 'bob@microsoft.com', password: 'password1', password_confirmation: 'password1'
45
44
  assert_equal(false, user.valid?)
46
45
  assert_equal(msgs, user.errors.full_messages)
47
46
  assert_raises(ActiveRecord::RecordInvalid) { user.save! }
48
47
  end
49
48
 
50
49
  test 'password must have lowercase letter' do
51
- msg = 'Password must contain big, small letters and digits'
50
+ msg = 'Password must contain at least one lower-case letter'
52
51
  user = User.create email: 'bob@microsoft.com', password: 'PASSWORD1', password_confirmation: 'PASSWORD1'
53
52
  assert_equal(false, user.valid?)
54
53
  assert_equal([msg], user.errors.full_messages)
@@ -56,7 +55,7 @@ class TestSecureValidatable < ActiveSupport::TestCase
56
55
  end
57
56
 
58
57
  test 'password must have number' do
59
- msg = 'Password must contain big, small letters and digits'
58
+ msg = 'Password must contain at least one digit'
60
59
  user = User.create email: 'bob@microsoft.com', password: 'PASSword', password_confirmation: 'PASSword'
61
60
  assert_equal(false, user.valid?)
62
61
  assert_equal([msg], user.errors.full_messages)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TestWithSecurityQuestion < ActionController::TestCase
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.12.0
4
+ version: 0.13.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marco Scholl
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2018-04-16 00:00:00.000000000 Z
14
+ date: 2018-10-19 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: rails
@@ -19,7 +19,7 @@ dependencies:
19
19
  requirements:
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: 4.1.0
22
+ version: 4.2.0
23
23
  - - "<"
24
24
  - !ruby/object:Gem::Version
25
25
  version: '6.0'
@@ -29,7 +29,7 @@ dependencies:
29
29
  requirements:
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: 4.1.0
32
+ version: 4.2.0
33
33
  - - "<"
34
34
  - !ruby/object:Gem::Version
35
35
  version: '6.0'
@@ -73,46 +73,40 @@ dependencies:
73
73
  requirements:
74
74
  - - ">="
75
75
  - !ruby/object:Gem::Version
76
- version: 1.3.0
77
- - - "<"
78
- - !ruby/object:Gem::Version
79
- version: '2.0'
76
+ version: '0'
80
77
  type: :development
81
78
  prerelease: false
82
79
  version_requirements: !ruby/object:Gem::Requirement
83
80
  requirements:
84
81
  - - ">="
85
82
  - !ruby/object:Gem::Version
86
- version: 1.3.0
87
- - - "<"
88
- - !ruby/object:Gem::Version
89
- version: '2.0'
83
+ version: '0'
90
84
  - !ruby/object:Gem::Dependency
91
85
  name: coveralls
92
86
  requirement: !ruby/object:Gem::Requirement
93
87
  requirements:
94
- - - "~>"
88
+ - - ">="
95
89
  - !ruby/object:Gem::Version
96
- version: '0.8'
90
+ version: '0'
97
91
  type: :development
98
92
  prerelease: false
99
93
  version_requirements: !ruby/object:Gem::Requirement
100
94
  requirements:
101
- - - "~>"
95
+ - - ">="
102
96
  - !ruby/object:Gem::Version
103
- version: '0.8'
97
+ version: '0'
104
98
  - !ruby/object:Gem::Dependency
105
99
  name: easy_captcha
106
100
  requirement: !ruby/object:Gem::Requirement
107
101
  requirements:
108
- - - "~>"
102
+ - - ">="
109
103
  - !ruby/object:Gem::Version
110
104
  version: '0'
111
105
  type: :development
112
106
  prerelease: false
113
107
  version_requirements: !ruby/object:Gem::Requirement
114
108
  requirements:
115
- - - "~>"
109
+ - - ">="
116
110
  - !ruby/object:Gem::Version
117
111
  version: '0'
118
112
  - !ruby/object:Gem::Dependency
@@ -133,16 +127,16 @@ dependencies:
133
127
  name: minitest
134
128
  requirement: !ruby/object:Gem::Requirement
135
129
  requirements:
136
- - - '='
130
+ - - ">="
137
131
  - !ruby/object:Gem::Version
138
- version: 5.10.3
132
+ version: '0'
139
133
  type: :development
140
134
  prerelease: false
141
135
  version_requirements: !ruby/object:Gem::Requirement
142
136
  requirements:
143
- - - '='
137
+ - - ">="
144
138
  - !ruby/object:Gem::Version
145
- version: 5.10.3
139
+ version: '0'
146
140
  - !ruby/object:Gem::Dependency
147
141
  name: pry-byebug
148
142
  requirement: !ruby/object:Gem::Requirement
@@ -189,14 +183,14 @@ dependencies:
189
183
  name: rails_email_validator
190
184
  requirement: !ruby/object:Gem::Requirement
191
185
  requirements:
192
- - - "~>"
186
+ - - ">="
193
187
  - !ruby/object:Gem::Version
194
188
  version: '0'
195
189
  type: :development
196
190
  prerelease: false
197
191
  version_requirements: !ruby/object:Gem::Requirement
198
192
  requirements:
199
- - - "~>"
193
+ - - ">="
200
194
  - !ruby/object:Gem::Version
201
195
  version: '0'
202
196
  - !ruby/object:Gem::Dependency
@@ -205,43 +199,38 @@ dependencies:
205
199
  requirements:
206
200
  - - "~>"
207
201
  - !ruby/object:Gem::Version
208
- version: '0'
202
+ version: 0.58.0
209
203
  type: :development
210
204
  prerelease: false
211
205
  version_requirements: !ruby/object:Gem::Requirement
212
206
  requirements:
213
207
  - - "~>"
214
208
  - !ruby/object:Gem::Version
215
- version: '0'
209
+ version: 0.58.0
216
210
  - !ruby/object:Gem::Dependency
217
211
  name: sqlite3
218
212
  requirement: !ruby/object:Gem::Requirement
219
213
  requirements:
220
- - - "~>"
221
- - !ruby/object:Gem::Version
222
- version: '1.3'
223
214
  - - ">="
224
215
  - !ruby/object:Gem::Version
225
- version: 1.3.10
216
+ version: '0'
226
217
  type: :development
227
218
  prerelease: false
228
219
  version_requirements: !ruby/object:Gem::Requirement
229
220
  requirements:
230
- - - "~>"
231
- - !ruby/object:Gem::Version
232
- version: '1.3'
233
221
  - - ">="
234
222
  - !ruby/object:Gem::Version
235
- version: 1.3.10
223
+ version: '0'
236
224
  description: An enterprise security extension for devise.
237
225
  email: natebird@gmail.com
238
226
  executables: []
239
227
  extensions: []
240
228
  extra_rdoc_files: []
241
229
  files:
242
- - ".circleci/config.yml"
230
+ - ".codeclimate.yml"
243
231
  - ".document"
244
232
  - ".gitignore"
233
+ - ".mdlrc"
245
234
  - ".rubocop.yml"
246
235
  - ".ruby-version"
247
236
  - ".travis.yml"
@@ -257,13 +246,14 @@ files:
257
246
  - config/locales/de.yml
258
247
  - config/locales/en.yml
259
248
  - config/locales/es.yml
249
+ - config/locales/fr.yml
260
250
  - config/locales/it.yml
251
+ - config/locales/tr.yml
261
252
  - devise-security.gemspec
262
- - gemfiles/rails_4.1_stable.gemfile
263
253
  - gemfiles/rails_4.2_stable.gemfile
264
254
  - gemfiles/rails_5.0_stable.gemfile
265
255
  - gemfiles/rails_5.1_stable.gemfile
266
- - gemfiles/rails_5.2_rc1.gemfile
256
+ - gemfiles/rails_5.2.0.gemfile
267
257
  - lib/devise-security.rb
268
258
  - lib/devise-security/controllers/helpers.rb
269
259
  - lib/devise-security/hooks/expirable.rb
@@ -295,6 +285,7 @@ files:
295
285
  - lib/devise-security/rails.rb
296
286
  - lib/devise-security/routes.rb
297
287
  - lib/devise-security/schema.rb
288
+ - lib/devise-security/validators/password_complexity_validator.rb
298
289
  - lib/devise-security/version.rb
299
290
  - lib/generators/devise_security/install_generator.rb
300
291
  - lib/generators/templates/devise-security.rb
@@ -331,6 +322,7 @@ files:
331
322
  - test/dummy/db/migrate/20180318111336_add_recoverable_columns.rb
332
323
  - test/dummy/db/migrate/20180319114023_add_widget.rb
333
324
  - test/test_captcha_controller.rb
325
+ - test/test_complexity_validator.rb
334
326
  - test/test_helper.rb
335
327
  - test/test_install_generator.rb
336
328
  - test/test_paranoid_verification.rb
@@ -351,7 +343,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
351
343
  requirements:
352
344
  - - ">="
353
345
  - !ruby/object:Gem::Version
354
- version: 2.2.9
346
+ version: 2.3.7
355
347
  required_rubygems_version: !ruby/object:Gem::Requirement
356
348
  requirements:
357
349
  - - ">="
@@ -359,7 +351,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
359
351
  version: '0'
360
352
  requirements: []
361
353
  rubyforge_project:
362
- rubygems_version: 2.7.6
354
+ rubygems_version: 2.7.7
363
355
  signing_key:
364
356
  specification_version: 4
365
357
  summary: Security extension for devise
@@ -397,6 +389,7 @@ test_files:
397
389
  - test/dummy/db/migrate/20180318111336_add_recoverable_columns.rb
398
390
  - test/dummy/db/migrate/20180319114023_add_widget.rb
399
391
  - test/test_captcha_controller.rb
392
+ - test/test_complexity_validator.rb
400
393
  - test/test_helper.rb
401
394
  - test/test_install_generator.rb
402
395
  - test/test_paranoid_verification.rb