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.
- 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
|