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.
- checksums.yaml +4 -4
- data/.codeclimate.yml +63 -0
- data/.gitignore +2 -0
- data/.mdlrc +1 -0
- data/.rubocop.yml +2 -1
- data/.ruby-version +1 -1
- data/.travis.yml +9 -11
- data/Appraisals +2 -2
- data/README.md +72 -53
- data/app/controllers/devise/paranoid_verification_code_controller.rb +2 -0
- data/app/controllers/devise/password_expired_controller.rb +2 -0
- data/config/locales/de.yml +13 -1
- data/config/locales/en.yml +13 -1
- data/config/locales/es.yml +13 -1
- data/config/locales/fr.yml +29 -0
- data/config/locales/tr.yml +17 -0
- data/devise-security.gemspec +10 -10
- data/gemfiles/{rails_4.1_stable.gemfile → rails_5.2.0.gemfile} +1 -1
- data/lib/devise-security.rb +8 -4
- data/lib/devise-security/controllers/helpers.rb +2 -0
- data/lib/devise-security/hooks/expirable.rb +3 -1
- data/lib/devise-security/hooks/paranoid_verification.rb +2 -0
- data/lib/devise-security/hooks/password_expirable.rb +2 -0
- data/lib/devise-security/hooks/session_limitable.rb +2 -0
- data/lib/devise-security/models/compatibility.rb +2 -0
- data/lib/devise-security/models/database_authenticatable_patch.rb +2 -0
- data/lib/devise-security/models/expirable.rb +2 -0
- data/lib/devise-security/models/old_password.rb +2 -0
- data/lib/devise-security/models/paranoid_verification.rb +2 -0
- data/lib/devise-security/models/password_archivable.rb +2 -0
- data/lib/devise-security/models/password_expirable.rb +96 -50
- data/lib/devise-security/models/secure_validatable.rb +10 -4
- data/lib/devise-security/models/security_questionable.rb +2 -0
- data/lib/devise-security/models/session_limitable.rb +2 -0
- data/lib/devise-security/orm/active_record.rb +2 -0
- data/lib/devise-security/patches.rb +2 -0
- data/lib/devise-security/patches/confirmations_controller_captcha.rb +2 -0
- data/lib/devise-security/patches/confirmations_controller_security_question.rb +2 -0
- data/lib/devise-security/patches/controller_captcha.rb +2 -0
- data/lib/devise-security/patches/controller_security_question.rb +2 -0
- data/lib/devise-security/patches/passwords_controller_captcha.rb +2 -0
- data/lib/devise-security/patches/passwords_controller_security_question.rb +2 -0
- data/lib/devise-security/patches/registrations_controller_captcha.rb +2 -0
- data/lib/devise-security/patches/sessions_controller_captcha.rb +2 -0
- data/lib/devise-security/patches/unlocks_controller_captcha.rb +2 -0
- data/lib/devise-security/patches/unlocks_controller_security_question.rb +2 -0
- data/lib/devise-security/rails.rb +2 -0
- data/lib/devise-security/routes.rb +2 -0
- data/lib/devise-security/schema.rb +2 -0
- data/lib/devise-security/validators/password_complexity_validator.rb +33 -0
- data/lib/devise-security/version.rb +3 -1
- data/lib/generators/devise_security/install_generator.rb +3 -1
- data/lib/generators/templates/devise-security.rb +9 -3
- data/test/dummy/Rakefile +3 -1
- data/test/dummy/app/controllers/application_controller.rb +2 -0
- data/test/dummy/app/controllers/captcha/sessions_controller.rb +2 -0
- data/test/dummy/app/controllers/security_question/unlocks_controller.rb +2 -0
- data/test/dummy/app/models/application_record.rb +2 -0
- data/test/dummy/app/models/captcha_user.rb +3 -1
- data/test/dummy/app/models/secure_user.rb +3 -1
- data/test/dummy/app/models/security_question_user.rb +3 -1
- data/test/dummy/app/models/user.rb +2 -0
- data/test/dummy/app/models/widget.rb +2 -0
- data/test/dummy/config.ru +3 -1
- data/test/dummy/config/application.rb +2 -0
- data/test/dummy/config/boot.rb +2 -0
- data/test/dummy/config/environment.rb +2 -0
- data/test/dummy/config/environments/test.rb +2 -0
- data/test/dummy/config/initializers/devise.rb +8 -0
- data/test/dummy/config/initializers/migration_class.rb +2 -0
- data/test/dummy/config/routes.rb +2 -0
- data/test/dummy/db/migrate/20120508165529_create_tables.rb +2 -0
- data/test/dummy/db/migrate/20150402165590_add_verification_columns.rb +2 -0
- data/test/dummy/db/migrate/20150407162345_add_verification_attempt_column.rb +2 -0
- data/test/dummy/db/migrate/20160320162345_add_security_questions_fields.rb +2 -0
- data/test/dummy/db/migrate/20180318103603_add_expireable_columns.rb +2 -0
- data/test/dummy/db/migrate/20180318105329_add_confirmable_columns.rb +2 -0
- data/test/dummy/db/migrate/20180318105732_add_rememberable_columns.rb +2 -0
- data/test/dummy/db/migrate/20180318111336_add_recoverable_columns.rb +2 -0
- data/test/dummy/db/migrate/20180319114023_add_widget.rb +2 -0
- data/test/test_captcha_controller.rb +2 -0
- data/test/test_complexity_validator.rb +60 -0
- data/test/test_helper.rb +19 -8
- data/test/test_install_generator.rb +7 -1
- data/test/test_paranoid_verification.rb +2 -0
- data/test/test_password_archivable.rb +2 -0
- data/test/test_password_expirable.rb +68 -7
- data/test/test_password_expired_controller.rb +2 -0
- data/test/test_secure_validatable.rb +10 -11
- data/test/test_security_question_controller.rb +2 -0
- metadata +32 -39
- data/.circleci/config.yml +0 -41
- data/gemfiles/rails_5.2_rc1.gemfile +0 -8
data/test/test_helper.rb
CHANGED
@@ -1,20 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
ENV['RAILS_ENV'] ||= 'test'
|
2
4
|
|
3
5
|
require 'simplecov'
|
4
|
-
|
5
|
-
|
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
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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,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.
|
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 '
|
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
|
-
|
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 '
|
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.
|
83
|
+
4.months
|
25
84
|
end
|
26
85
|
end
|
27
|
-
user.password_changed_at = Time.now.ago(3.
|
86
|
+
user.password_changed_at = Time.now.ago(3.months)
|
28
87
|
refute user.need_change_password?
|
29
|
-
user.
|
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
|
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 '
|
35
|
-
msgs = ['Email is invalid', 'Password must contain
|
36
|
-
user = User.create email: 'bob
|
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 = ['
|
44
|
-
user = User.create email: 'bob@
|
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
|
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
|
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)
|
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.
|
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-
|
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.
|
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.
|
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:
|
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:
|
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
|
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
|
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:
|
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:
|
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:
|
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:
|
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:
|
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:
|
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
|
-
- ".
|
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.
|
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.
|
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.
|
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
|