devise-security 0.12.0 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
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