devise_security_extension 0.7.2 → 0.10.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 +7 -0
- data/.gitignore +39 -0
- data/.rubocop.yml +38 -0
- data/Gemfile +2 -15
- data/Gemfile.lock +157 -112
- data/README.md +264 -0
- data/Rakefile +13 -29
- data/app/controllers/devise/paranoid_verification_code_controller.rb +42 -0
- data/app/controllers/devise/password_expired_controller.rb +20 -7
- data/app/views/devise/paranoid_verification_code/show.html.erb +10 -0
- data/config/locales/de.yml +3 -0
- data/config/locales/en.yml +7 -4
- data/config/locales/it.yml +10 -0
- data/devise_security_extension.gemspec +24 -88
- data/lib/devise_security_extension/controllers/helpers.rb +40 -7
- data/lib/devise_security_extension/hooks/paranoid_verification.rb +5 -0
- data/lib/devise_security_extension/hooks/password_expirable.rb +1 -1
- data/lib/devise_security_extension/hooks/session_limitable.rb +3 -2
- data/lib/devise_security_extension/models/database_authenticatable_patch.rb +26 -0
- data/lib/devise_security_extension/models/expirable.rb +1 -2
- data/lib/devise_security_extension/models/old_password.rb +1 -2
- data/lib/devise_security_extension/models/paranoid_verification.rb +35 -0
- data/lib/devise_security_extension/models/password_archivable.rb +11 -11
- data/lib/devise_security_extension/models/password_expirable.rb +9 -5
- data/lib/devise_security_extension/models/secure_validatable.rb +35 -9
- data/lib/devise_security_extension/models/security_questionable.rb +4 -1
- data/lib/devise_security_extension/patches/confirmations_controller_captcha.rb +3 -1
- data/lib/devise_security_extension/patches/confirmations_controller_security_question.rb +3 -1
- data/lib/devise_security_extension/patches/passwords_controller_captcha.rb +3 -1
- data/lib/devise_security_extension/patches/passwords_controller_security_question.rb +3 -1
- data/lib/devise_security_extension/patches/registrations_controller_captcha.rb +11 -8
- data/lib/devise_security_extension/patches/sessions_controller_captcha.rb +8 -5
- data/lib/devise_security_extension/patches/unlocks_controller_captcha.rb +3 -1
- data/lib/devise_security_extension/patches/unlocks_controller_security_question.rb +3 -1
- data/lib/devise_security_extension/routes.rb +4 -0
- data/lib/devise_security_extension/version.rb +3 -0
- data/lib/devise_security_extension.rb +20 -10
- data/lib/generators/devise_security_extension/install_generator.rb +16 -33
- data/lib/generators/templates/devise_security_extension.rb +38 -0
- data/test/dummy/Rakefile +6 -0
- data/test/dummy/app/controllers/application_controller.rb +2 -0
- data/test/dummy/app/controllers/foos_controller.rb +0 -0
- data/test/dummy/app/models/.gitkeep +0 -0
- data/test/dummy/app/models/user.rb +4 -0
- data/test/dummy/app/views/foos/index.html.erb +0 -0
- data/test/dummy/config/application.rb +24 -0
- data/test/dummy/config/boot.rb +6 -0
- data/test/dummy/config/database.yml +7 -0
- data/test/dummy/config/environment.rb +5 -0
- data/test/dummy/config/environments/test.rb +21 -0
- data/test/dummy/config/initializers/devise.rb +9 -0
- data/test/dummy/config/routes.rb +6 -0
- data/test/dummy/config/secrets.yml +3 -0
- data/test/dummy/config.ru +4 -0
- data/test/dummy/db/migrate/20120508165529_create_tables.rb +26 -0
- data/test/dummy/db/migrate/20150402165590_add_verification_columns.rb +11 -0
- data/test/dummy/db/migrate/20150407162345_add_verification_attempt_column.rb +9 -0
- data/test/test_helper.rb +10 -0
- data/test/test_install_generator.rb +16 -0
- data/test/test_paranoid_verification.rb +124 -0
- data/test/test_password_archivable.rb +61 -0
- data/test/test_password_expired_controller.rb +24 -0
- metadata +142 -62
- data/README.rdoc +0 -193
- data/VERSION +0 -1
- data/lib/devise_security_extension/models/security_question.rb +0 -3
- data/test/helper.rb +0 -17
- data/test/test_devise_security_extension.rb +0 -7
@@ -0,0 +1,124 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestPasswordVerifiable < ActiveSupport::TestCase
|
4
|
+
test 'need to paranoid verify if code present' do
|
5
|
+
user = User.new
|
6
|
+
user.generate_paranoid_code
|
7
|
+
assert_equal(true, user.need_paranoid_verification?)
|
8
|
+
end
|
9
|
+
|
10
|
+
test 'no need to paranoid verify if no code' do
|
11
|
+
user = User.new
|
12
|
+
assert_equal(false, user.need_paranoid_verification?)
|
13
|
+
end
|
14
|
+
|
15
|
+
test 'generate code' do
|
16
|
+
user = User.new
|
17
|
+
user.generate_paranoid_code
|
18
|
+
assert_equal(0, user.paranoid_verification_attempt)
|
19
|
+
user.verify_code('wrong')
|
20
|
+
assert_equal(1, user.paranoid_verification_attempt)
|
21
|
+
user.generate_paranoid_code
|
22
|
+
assert_equal(0, user.paranoid_verification_attempt)
|
23
|
+
end
|
24
|
+
|
25
|
+
test "generate code must reset attempt counter" do
|
26
|
+
user = User.new
|
27
|
+
user.generate_paranoid_code
|
28
|
+
# default generator generates 5 char string
|
29
|
+
assert_equal(user.paranoid_verification_code.class, String)
|
30
|
+
assert_equal(user.paranoid_verification_code.length, 5)
|
31
|
+
end
|
32
|
+
|
33
|
+
test "when code match upon verify code, should mark record that it's no loger needed to verify" do
|
34
|
+
user = User.new(paranoid_verification_code: 'abcde')
|
35
|
+
|
36
|
+
assert_equal(true, user.need_paranoid_verification?)
|
37
|
+
user.verify_code('abcde')
|
38
|
+
assert_equal(false, user.need_paranoid_verification?)
|
39
|
+
end
|
40
|
+
|
41
|
+
test 'when code match upon verify code, should no longer need verification' do
|
42
|
+
user = User.new(paranoid_verification_code: 'abcde')
|
43
|
+
|
44
|
+
assert_equal(true, user.need_paranoid_verification?)
|
45
|
+
user.verify_code('abcde')
|
46
|
+
assert_equal(false, user.need_paranoid_verification?)
|
47
|
+
end
|
48
|
+
|
49
|
+
test 'when code match upon verification code, should set when verification was accepted' do
|
50
|
+
user = User.new(paranoid_verification_code: 'abcde')
|
51
|
+
user.verify_code('abcde')
|
52
|
+
assert_in_delta(4, Time.now.to_i, user.paranoid_verified_at.to_i)
|
53
|
+
end
|
54
|
+
|
55
|
+
test 'when code not match upon verify code, should still need verification' do
|
56
|
+
user = User.new(paranoid_verification_code: 'abcde')
|
57
|
+
user.verify_code('wrong')
|
58
|
+
assert_equal(true, user.need_paranoid_verification?)
|
59
|
+
end
|
60
|
+
|
61
|
+
test 'when code not match upon verification code, should not set paranoid_verified_at' do
|
62
|
+
user = User.new(paranoid_verification_code: 'abcde')
|
63
|
+
user.verify_code('wrong')
|
64
|
+
assert_equal(nil, user.paranoid_verified_at)
|
65
|
+
end
|
66
|
+
|
67
|
+
test 'when code not match upon verification code too many attempts should generate new code' do
|
68
|
+
original_regenerate = Devise.paranoid_code_regenerate_after_attempt
|
69
|
+
Devise.paranoid_code_regenerate_after_attempt = 2
|
70
|
+
|
71
|
+
user = User.create(paranoid_verification_code: 'abcde')
|
72
|
+
user.verify_code('wrong')
|
73
|
+
assert_equal 'abcde', user.paranoid_verification_code
|
74
|
+
user.verify_code('wrong-again')
|
75
|
+
assert_not_equal 'abcde', user.paranoid_verification_code
|
76
|
+
|
77
|
+
Devise.paranoid_code_regenerate_after_attempt = original_regenerate
|
78
|
+
end
|
79
|
+
|
80
|
+
test 'upon generating new code due to too many attempts reset attempt counter' do
|
81
|
+
original_regenerate = Devise.paranoid_code_regenerate_after_attempt
|
82
|
+
Devise.paranoid_code_regenerate_after_attempt = 3
|
83
|
+
|
84
|
+
user = User.create(paranoid_verification_code: 'abcde')
|
85
|
+
user.verify_code('wrong')
|
86
|
+
assert_equal 1, user.paranoid_verification_attempt
|
87
|
+
user.verify_code('wrong-again')
|
88
|
+
assert_equal 2, user.paranoid_verification_attempt
|
89
|
+
user.verify_code('WRONG!')
|
90
|
+
assert_equal 0, user.paranoid_verification_attempt
|
91
|
+
|
92
|
+
Devise.paranoid_code_regenerate_after_attempt = original_regenerate
|
93
|
+
end
|
94
|
+
|
95
|
+
|
96
|
+
test 'by default paranoid code regenerate should have 10 attempts' do
|
97
|
+
user = User.new(paranoid_verification_code: 'abcde')
|
98
|
+
assert_equal 10, user.paranoid_attempts_remaining
|
99
|
+
end
|
100
|
+
|
101
|
+
test 'paranoid_attempts_remaining should re-callculate how many attemps remains after each wrong attempt' do
|
102
|
+
original_regenerate = Devise.paranoid_code_regenerate_after_attempt
|
103
|
+
Devise.paranoid_code_regenerate_after_attempt = 2
|
104
|
+
|
105
|
+
user = User.create(paranoid_verification_code: 'abcde')
|
106
|
+
assert_equal 2, user.paranoid_attempts_remaining
|
107
|
+
|
108
|
+
user.verify_code('WRONG!')
|
109
|
+
assert_equal 1, user.paranoid_attempts_remaining
|
110
|
+
|
111
|
+
Devise.paranoid_code_regenerate_after_attempt = original_regenerate
|
112
|
+
end
|
113
|
+
|
114
|
+
test 'when code not match upon verification code too many times, reset paranoid_attempts_remaining' do
|
115
|
+
original_regenerate = Devise.paranoid_code_regenerate_after_attempt
|
116
|
+
Devise.paranoid_code_regenerate_after_attempt = 1
|
117
|
+
|
118
|
+
user = User.create(paranoid_verification_code: 'abcde')
|
119
|
+
user.verify_code('wrong') # at this point code was regenerated
|
120
|
+
assert_equal Devise.paranoid_code_regenerate_after_attempt, user.paranoid_attempts_remaining
|
121
|
+
|
122
|
+
Devise.paranoid_code_regenerate_after_attempt = original_regenerate
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestPasswordArchivable < ActiveSupport::TestCase
|
4
|
+
setup do
|
5
|
+
Devise.password_archiving_count = 2
|
6
|
+
end
|
7
|
+
|
8
|
+
teardown do
|
9
|
+
Devise.password_archiving_count = 1
|
10
|
+
end
|
11
|
+
|
12
|
+
def set_password(user, password)
|
13
|
+
user.password = password
|
14
|
+
user.password_confirmation = password
|
15
|
+
user.save!
|
16
|
+
end
|
17
|
+
|
18
|
+
test 'cannot use same password' do
|
19
|
+
user = User.create password: 'password1', password_confirmation: 'password1'
|
20
|
+
|
21
|
+
assert_raises(ActiveRecord::RecordInvalid) { set_password(user, 'password1') }
|
22
|
+
end
|
23
|
+
|
24
|
+
test 'cannot use archived passwords' do
|
25
|
+
assert_equal 2, Devise.password_archiving_count
|
26
|
+
|
27
|
+
user = User.create password: 'password1', password_confirmation: 'password1'
|
28
|
+
assert_equal 0, OldPassword.count
|
29
|
+
|
30
|
+
set_password(user, 'password2')
|
31
|
+
assert_equal 1, OldPassword.count
|
32
|
+
|
33
|
+
assert_raises(ActiveRecord::RecordInvalid) { set_password(user, 'password1') }
|
34
|
+
|
35
|
+
set_password(user, 'password3')
|
36
|
+
assert_equal 2, OldPassword.count
|
37
|
+
|
38
|
+
# rotate first password out of archive
|
39
|
+
assert set_password(user, 'password4')
|
40
|
+
|
41
|
+
# archive count was 2, so first password should work again
|
42
|
+
assert set_password(user, 'password1')
|
43
|
+
assert set_password(user, 'password2')
|
44
|
+
end
|
45
|
+
|
46
|
+
test 'the option should be dynamic during runtime' do
|
47
|
+
class ::User
|
48
|
+
def archive_count
|
49
|
+
1
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
user = User.create password: 'password1', password_confirmation: 'password1'
|
54
|
+
|
55
|
+
assert set_password(user, 'password2')
|
56
|
+
|
57
|
+
assert_raises(ActiveRecord::RecordInvalid) { set_password(user, 'password2') }
|
58
|
+
|
59
|
+
assert_raises(ActiveRecord::RecordInvalid) { set_password(user, 'password1') }
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class Devise::PasswordExpiredControllerTest < ActionController::TestCase
|
4
|
+
include Devise::TestHelpers
|
5
|
+
|
6
|
+
setup do
|
7
|
+
@request.env["devise.mapping"] = Devise.mappings[:user]
|
8
|
+
@user = User.create(username: 'hello', email: 'hello@path.travel',
|
9
|
+
password: '1234', password_changed_at: 3.months.ago)
|
10
|
+
|
11
|
+
sign_in(@user)
|
12
|
+
end
|
13
|
+
|
14
|
+
test 'should render show' do
|
15
|
+
get :show
|
16
|
+
assert_template :show
|
17
|
+
end
|
18
|
+
|
19
|
+
test 'shold update password' do
|
20
|
+
put :update, user: { current_password: '1234', password: '12345',
|
21
|
+
password_confirmation: '12345' }
|
22
|
+
assert_redirected_to root_path
|
23
|
+
end
|
24
|
+
end
|
metadata
CHANGED
@@ -1,8 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devise_security_extension
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.10.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Marco Scholl
|
@@ -10,136 +9,174 @@ authors:
|
|
10
9
|
autorequire:
|
11
10
|
bindir: bin
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2016-03-10 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
|
-
name:
|
15
|
+
name: railties
|
17
16
|
requirement: !ruby/object:Gem::Requirement
|
18
|
-
none: false
|
19
17
|
requirements:
|
20
|
-
- -
|
18
|
+
- - ">="
|
21
19
|
- !ruby/object:Gem::Version
|
22
|
-
version: 3.
|
20
|
+
version: 3.2.6
|
21
|
+
- - "<"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '5.0'
|
23
24
|
type: :runtime
|
24
25
|
prerelease: false
|
25
26
|
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
none: false
|
27
27
|
requirements:
|
28
|
-
- -
|
28
|
+
- - ">="
|
29
|
+
- !ruby/object:Gem::Version
|
30
|
+
version: 3.2.6
|
31
|
+
- - "<"
|
29
32
|
- !ruby/object:Gem::Version
|
30
|
-
version:
|
33
|
+
version: '5.0'
|
31
34
|
- !ruby/object:Gem::Dependency
|
32
35
|
name: devise
|
33
36
|
requirement: !ruby/object:Gem::Requirement
|
34
|
-
none: false
|
35
37
|
requirements:
|
36
|
-
- -
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.0.0
|
41
|
+
- - "<"
|
37
42
|
- !ruby/object:Gem::Version
|
38
|
-
version:
|
43
|
+
version: '4.0'
|
39
44
|
type: :runtime
|
40
45
|
prerelease: false
|
41
46
|
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
none: false
|
43
47
|
requirements:
|
44
|
-
- -
|
48
|
+
- - ">="
|
45
49
|
- !ruby/object:Gem::Version
|
46
|
-
version:
|
50
|
+
version: 3.0.0
|
51
|
+
- - "<"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '4.0'
|
47
54
|
- !ruby/object:Gem::Dependency
|
48
|
-
name:
|
55
|
+
name: bundler
|
56
|
+
requirement: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 1.3.0
|
61
|
+
- - "<"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '2.0'
|
64
|
+
type: :development
|
65
|
+
prerelease: false
|
66
|
+
version_requirements: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: 1.3.0
|
71
|
+
- - "<"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '2.0'
|
74
|
+
- !ruby/object:Gem::Dependency
|
75
|
+
name: sqlite3
|
76
|
+
requirement: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - "~>"
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: 1.3.10
|
81
|
+
type: :development
|
82
|
+
prerelease: false
|
83
|
+
version_requirements: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - "~>"
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: 1.3.10
|
88
|
+
- !ruby/object:Gem::Dependency
|
89
|
+
name: rubocop
|
49
90
|
requirement: !ruby/object:Gem::Requirement
|
50
|
-
none: false
|
51
91
|
requirements:
|
52
|
-
- -
|
92
|
+
- - "~>"
|
53
93
|
- !ruby/object:Gem::Version
|
54
94
|
version: '0'
|
55
95
|
type: :development
|
56
96
|
prerelease: false
|
57
97
|
version_requirements: !ruby/object:Gem::Requirement
|
58
|
-
none: false
|
59
98
|
requirements:
|
60
|
-
- -
|
99
|
+
- - "~>"
|
61
100
|
- !ruby/object:Gem::Version
|
62
101
|
version: '0'
|
63
102
|
- !ruby/object:Gem::Dependency
|
64
|
-
name:
|
103
|
+
name: minitest
|
65
104
|
requirement: !ruby/object:Gem::Requirement
|
66
|
-
none: false
|
67
105
|
requirements:
|
68
|
-
- -
|
106
|
+
- - ">="
|
69
107
|
- !ruby/object:Gem::Version
|
70
108
|
version: '0'
|
71
109
|
type: :development
|
72
110
|
prerelease: false
|
73
111
|
version_requirements: !ruby/object:Gem::Requirement
|
74
|
-
none: false
|
75
112
|
requirements:
|
76
|
-
- -
|
113
|
+
- - ">="
|
77
114
|
- !ruby/object:Gem::Version
|
78
115
|
version: '0'
|
79
116
|
- !ruby/object:Gem::Dependency
|
80
|
-
name:
|
117
|
+
name: easy_captcha
|
81
118
|
requirement: !ruby/object:Gem::Requirement
|
82
|
-
none: false
|
83
119
|
requirements:
|
84
|
-
- -
|
120
|
+
- - "~>"
|
85
121
|
- !ruby/object:Gem::Version
|
86
|
-
version:
|
122
|
+
version: '0'
|
87
123
|
type: :development
|
88
124
|
prerelease: false
|
89
125
|
version_requirements: !ruby/object:Gem::Requirement
|
90
|
-
none: false
|
91
126
|
requirements:
|
92
|
-
- -
|
127
|
+
- - "~>"
|
93
128
|
- !ruby/object:Gem::Version
|
94
|
-
version:
|
129
|
+
version: '0'
|
95
130
|
- !ruby/object:Gem::Dependency
|
96
|
-
name:
|
131
|
+
name: rails_email_validator
|
97
132
|
requirement: !ruby/object:Gem::Requirement
|
98
|
-
none: false
|
99
133
|
requirements:
|
100
|
-
- - ~>
|
134
|
+
- - "~>"
|
101
135
|
- !ruby/object:Gem::Version
|
102
|
-
version:
|
136
|
+
version: '0'
|
103
137
|
type: :development
|
104
138
|
prerelease: false
|
105
139
|
version_requirements: !ruby/object:Gem::Requirement
|
106
|
-
none: false
|
107
140
|
requirements:
|
108
|
-
- - ~>
|
141
|
+
- - "~>"
|
109
142
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
143
|
+
version: '0'
|
111
144
|
description: An enterprise security extension for devise, trying to meet industrial
|
112
145
|
standard security demands for web applications.
|
113
146
|
email: team@phatworx.de
|
114
147
|
executables: []
|
115
148
|
extensions: []
|
116
|
-
extra_rdoc_files:
|
117
|
-
- LICENSE.txt
|
118
|
-
- README.rdoc
|
149
|
+
extra_rdoc_files: []
|
119
150
|
files:
|
120
|
-
- .document
|
151
|
+
- ".document"
|
152
|
+
- ".gitignore"
|
153
|
+
- ".rubocop.yml"
|
121
154
|
- Gemfile
|
122
155
|
- Gemfile.lock
|
123
156
|
- LICENSE.txt
|
124
|
-
- README.
|
157
|
+
- README.md
|
125
158
|
- Rakefile
|
126
|
-
-
|
159
|
+
- app/controllers/devise/paranoid_verification_code_controller.rb
|
127
160
|
- app/controllers/devise/password_expired_controller.rb
|
161
|
+
- app/views/devise/paranoid_verification_code/show.html.erb
|
128
162
|
- app/views/devise/password_expired/show.html.erb
|
129
163
|
- config/locales/de.yml
|
130
164
|
- config/locales/en.yml
|
165
|
+
- config/locales/it.yml
|
131
166
|
- devise_security_extension.gemspec
|
132
167
|
- lib/devise_security_extension.rb
|
133
168
|
- lib/devise_security_extension/controllers/helpers.rb
|
134
169
|
- lib/devise_security_extension/hooks/expirable.rb
|
170
|
+
- lib/devise_security_extension/hooks/paranoid_verification.rb
|
135
171
|
- lib/devise_security_extension/hooks/password_expirable.rb
|
136
172
|
- lib/devise_security_extension/hooks/session_limitable.rb
|
173
|
+
- lib/devise_security_extension/models/database_authenticatable_patch.rb
|
137
174
|
- lib/devise_security_extension/models/expirable.rb
|
138
175
|
- lib/devise_security_extension/models/old_password.rb
|
176
|
+
- lib/devise_security_extension/models/paranoid_verification.rb
|
139
177
|
- lib/devise_security_extension/models/password_archivable.rb
|
140
178
|
- lib/devise_security_extension/models/password_expirable.rb
|
141
179
|
- lib/devise_security_extension/models/secure_validatable.rb
|
142
|
-
- lib/devise_security_extension/models/security_question.rb
|
143
180
|
- lib/devise_security_extension/models/security_questionable.rb
|
144
181
|
- lib/devise_security_extension/models/session_limitable.rb
|
145
182
|
- lib/devise_security_extension/orm/active_record.rb
|
@@ -155,35 +192,78 @@ files:
|
|
155
192
|
- lib/devise_security_extension/rails.rb
|
156
193
|
- lib/devise_security_extension/routes.rb
|
157
194
|
- lib/devise_security_extension/schema.rb
|
195
|
+
- lib/devise_security_extension/version.rb
|
158
196
|
- lib/generators/devise_security_extension/install_generator.rb
|
159
|
-
-
|
160
|
-
- test/
|
161
|
-
|
197
|
+
- lib/generators/templates/devise_security_extension.rb
|
198
|
+
- test/dummy/Rakefile
|
199
|
+
- test/dummy/app/controllers/application_controller.rb
|
200
|
+
- test/dummy/app/controllers/foos_controller.rb
|
201
|
+
- test/dummy/app/models/.gitkeep
|
202
|
+
- test/dummy/app/models/user.rb
|
203
|
+
- test/dummy/app/views/foos/index.html.erb
|
204
|
+
- test/dummy/config.ru
|
205
|
+
- test/dummy/config/application.rb
|
206
|
+
- test/dummy/config/boot.rb
|
207
|
+
- test/dummy/config/database.yml
|
208
|
+
- test/dummy/config/environment.rb
|
209
|
+
- test/dummy/config/environments/test.rb
|
210
|
+
- test/dummy/config/initializers/devise.rb
|
211
|
+
- test/dummy/config/routes.rb
|
212
|
+
- test/dummy/config/secrets.yml
|
213
|
+
- test/dummy/db/migrate/20120508165529_create_tables.rb
|
214
|
+
- test/dummy/db/migrate/20150402165590_add_verification_columns.rb
|
215
|
+
- test/dummy/db/migrate/20150407162345_add_verification_attempt_column.rb
|
216
|
+
- test/test_helper.rb
|
217
|
+
- test/test_install_generator.rb
|
218
|
+
- test/test_paranoid_verification.rb
|
219
|
+
- test/test_password_archivable.rb
|
220
|
+
- test/test_password_expired_controller.rb
|
221
|
+
homepage: https://github.com/phatworx/devise_security_extension
|
162
222
|
licenses:
|
163
223
|
- MIT
|
224
|
+
metadata: {}
|
164
225
|
post_install_message:
|
165
226
|
rdoc_options: []
|
166
227
|
require_paths:
|
167
228
|
- lib
|
168
229
|
required_ruby_version: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
230
|
requirements:
|
171
|
-
- -
|
231
|
+
- - ">="
|
172
232
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
174
|
-
segments:
|
175
|
-
- 0
|
176
|
-
hash: 2180026344185734924
|
233
|
+
version: 1.9.3
|
177
234
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
|
-
none: false
|
179
235
|
requirements:
|
180
|
-
- -
|
236
|
+
- - ">="
|
181
237
|
- !ruby/object:Gem::Version
|
182
238
|
version: '0'
|
183
239
|
requirements: []
|
184
|
-
rubyforge_project:
|
185
|
-
rubygems_version:
|
240
|
+
rubyforge_project: devise_security_extension
|
241
|
+
rubygems_version: 2.4.2
|
186
242
|
signing_key:
|
187
|
-
specification_version:
|
243
|
+
specification_version: 4
|
188
244
|
summary: Security extension for devise
|
189
|
-
test_files:
|
245
|
+
test_files:
|
246
|
+
- test/dummy/Rakefile
|
247
|
+
- test/dummy/app/controllers/application_controller.rb
|
248
|
+
- test/dummy/app/controllers/foos_controller.rb
|
249
|
+
- test/dummy/app/models/.gitkeep
|
250
|
+
- test/dummy/app/models/user.rb
|
251
|
+
- test/dummy/app/views/foos/index.html.erb
|
252
|
+
- test/dummy/config.ru
|
253
|
+
- test/dummy/config/application.rb
|
254
|
+
- test/dummy/config/boot.rb
|
255
|
+
- test/dummy/config/database.yml
|
256
|
+
- test/dummy/config/environment.rb
|
257
|
+
- test/dummy/config/environments/test.rb
|
258
|
+
- test/dummy/config/initializers/devise.rb
|
259
|
+
- test/dummy/config/routes.rb
|
260
|
+
- test/dummy/config/secrets.yml
|
261
|
+
- test/dummy/db/migrate/20120508165529_create_tables.rb
|
262
|
+
- test/dummy/db/migrate/20150402165590_add_verification_columns.rb
|
263
|
+
- test/dummy/db/migrate/20150407162345_add_verification_attempt_column.rb
|
264
|
+
- test/test_helper.rb
|
265
|
+
- test/test_install_generator.rb
|
266
|
+
- test/test_paranoid_verification.rb
|
267
|
+
- test/test_password_archivable.rb
|
268
|
+
- test/test_password_expired_controller.rb
|
269
|
+
has_rdoc:
|