devise_security_extension 0.9.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 +4 -4
- data/.gitignore +39 -0
- data/.rubocop.yml +38 -0
- data/Gemfile +1 -5
- data/Gemfile.lock +144 -141
- data/README.md +37 -11
- data/Rakefile +13 -29
- data/app/controllers/devise/paranoid_verification_code_controller.rb +42 -0
- data/app/controllers/devise/password_expired_controller.rb +16 -7
- data/app/views/devise/paranoid_verification_code/show.html.erb +10 -0
- data/config/locales/de.yml +2 -0
- data/config/locales/en.yml +6 -4
- data/config/locales/it.yml +10 -0
- data/devise_security_extension.gemspec +24 -104
- data/lib/devise_security_extension.rb +18 -8
- data/lib/devise_security_extension/controllers/helpers.rb +39 -6
- data/lib/devise_security_extension/hooks/paranoid_verification.rb +5 -0
- data/lib/devise_security_extension/hooks/session_limitable.rb +1 -0
- data/lib/devise_security_extension/models/paranoid_verification.rb +35 -0
- data/lib/devise_security_extension/models/password_archivable.rb +3 -7
- data/lib/devise_security_extension/models/password_expirable.rb +9 -5
- 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 +5 -3
- data/lib/devise_security_extension/patches/sessions_controller_captcha.rb +5 -3
- 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/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/user.rb +2 -1
- data/test/dummy/app/views/foos/index.html.erb +0 -0
- data/test/dummy/config/application.rb +4 -2
- data/test/dummy/config/boot.rb +1 -1
- data/test/dummy/config/environments/test.rb +4 -2
- data/test/dummy/config/initializers/devise.rb +4 -4
- data/test/dummy/config/routes.rb +6 -0
- data/test/dummy/config/secrets.yml +3 -0
- data/test/dummy/db/migrate/20120508165529_create_tables.rb +4 -4
- 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 +35 -21
- data/test/test_password_expired_controller.rb +24 -0
- metadata +104 -34
- data/VERSION +0 -1
- data/lib/devise_security_extension/models/security_question.rb +0 -3
- data/test/helper.rb +0 -22
- data/test/test_devise_security_extension.rb +0 -6
@@ -5,15 +5,15 @@ class CreateTables < ActiveRecord::Migration
|
|
5
5
|
t.string :facebook_token
|
6
6
|
|
7
7
|
## Database authenticatable
|
8
|
-
t.string :email, :
|
9
|
-
t.string :encrypted_password, :
|
8
|
+
t.string :email, null: false, default: ''
|
9
|
+
t.string :encrypted_password, null: false, default: ''
|
10
10
|
|
11
|
-
t.
|
11
|
+
t.datetime :password_changed_at
|
12
|
+
t.timestamps null: false
|
12
13
|
end
|
13
14
|
|
14
15
|
create_table :old_passwords do |t|
|
15
16
|
t.string :encrypted_password
|
16
|
-
t.string :password_salt
|
17
17
|
|
18
18
|
t.references :password_archivable, polymorphic: true
|
19
19
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class AddVerificationColumns < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
add_column :users, :paranoid_verification_code, :string
|
4
|
+
add_column :users, :paranoid_verified_at, :datetime
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.down
|
8
|
+
remove_column :users, :paranoid_verification_code
|
9
|
+
remove_column :users, :paranoid_verified_at
|
10
|
+
end
|
11
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
ENV['RAILS_ENV'] ||= 'test'
|
2
|
+
|
3
|
+
require 'dummy/config/environment'
|
4
|
+
require 'minitest/autorun'
|
5
|
+
require 'rails/test_help'
|
6
|
+
require 'devise_security_extension'
|
7
|
+
|
8
|
+
ActiveRecord::Migration.verbose = false
|
9
|
+
ActiveRecord::Base.logger = Logger.new(nil)
|
10
|
+
ActiveRecord::Migrator.migrate(File.expand_path('../dummy/db/migrate', __FILE__))
|
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'rails/generators/test_case'
|
3
|
+
require 'generators/devise_security_extension/install_generator'
|
4
|
+
|
5
|
+
class TestInstallGenerator < Rails::Generators::TestCase
|
6
|
+
tests DeviseSecurityExtension::Generators::InstallGenerator
|
7
|
+
destination File.expand_path('../tmp', __FILE__)
|
8
|
+
setup :prepare_destination
|
9
|
+
|
10
|
+
test 'Assert all files are properly created' do
|
11
|
+
run_generator
|
12
|
+
assert_file 'config/initializers/devise_security_extension.rb'
|
13
|
+
assert_file 'config/locales/devise.security_extension.en.yml'
|
14
|
+
assert_file 'config/locales/devise.security_extension.de.yml'
|
15
|
+
end
|
16
|
+
end
|
@@ -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
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'test_helper'
|
2
2
|
|
3
3
|
class TestPasswordArchivable < ActiveSupport::TestCase
|
4
4
|
setup do
|
@@ -9,15 +9,38 @@ class TestPasswordArchivable < ActiveSupport::TestCase
|
|
9
9
|
Devise.password_archiving_count = 1
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
user =
|
14
|
-
user.
|
15
|
-
user.password_confirmation = 'password1'
|
12
|
+
def set_password(user, password)
|
13
|
+
user.password = password
|
14
|
+
user.password_confirmation = password
|
16
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
|
17
29
|
|
18
|
-
user
|
19
|
-
|
20
|
-
|
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')
|
21
44
|
end
|
22
45
|
|
23
46
|
test 'the option should be dynamic during runtime' do
|
@@ -27,21 +50,12 @@ class TestPasswordArchivable < ActiveSupport::TestCase
|
|
27
50
|
end
|
28
51
|
end
|
29
52
|
|
30
|
-
user = User.
|
31
|
-
user.password = 'password1'
|
32
|
-
user.password_confirmation = 'password1'
|
33
|
-
user.save!
|
53
|
+
user = User.create password: 'password1', password_confirmation: 'password1'
|
34
54
|
|
35
|
-
user
|
36
|
-
user.password_confirmation = 'password2'
|
37
|
-
user.save!
|
55
|
+
assert set_password(user, 'password2')
|
38
56
|
|
39
|
-
|
40
|
-
user.password_confirmation = 'password2'
|
41
|
-
assert_raises(ActiveRecord::RecordInvalid) { user.save! }
|
57
|
+
assert_raises(ActiveRecord::RecordInvalid) { set_password(user, 'password2') }
|
42
58
|
|
43
|
-
|
44
|
-
user.password_confirmation = 'password1'
|
45
|
-
assert_raises(ActiveRecord::RecordInvalid) { user.save! }
|
59
|
+
assert_raises(ActiveRecord::RecordInvalid) { set_password(user, 'password1') }
|
46
60
|
end
|
47
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,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: devise_security_extension
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marco Scholl
|
@@ -9,104 +9,136 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2016-03-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
15
|
+
name: railties
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
18
|
- - ">="
|
19
19
|
- !ruby/object:Gem::Version
|
20
|
-
version: 3.
|
20
|
+
version: 3.2.6
|
21
|
+
- - "<"
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: '5.0'
|
21
24
|
type: :runtime
|
22
25
|
prerelease: false
|
23
26
|
version_requirements: !ruby/object:Gem::Requirement
|
24
27
|
requirements:
|
25
28
|
- - ">="
|
26
29
|
- !ruby/object:Gem::Version
|
27
|
-
version: 3.
|
30
|
+
version: 3.2.6
|
31
|
+
- - "<"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '5.0'
|
28
34
|
- !ruby/object:Gem::Dependency
|
29
35
|
name: devise
|
30
36
|
requirement: !ruby/object:Gem::Requirement
|
31
37
|
requirements:
|
32
38
|
- - ">="
|
33
39
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
40
|
+
version: 3.0.0
|
41
|
+
- - "<"
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '4.0'
|
35
44
|
type: :runtime
|
36
45
|
prerelease: false
|
37
46
|
version_requirements: !ruby/object:Gem::Requirement
|
38
47
|
requirements:
|
39
48
|
- - ">="
|
40
49
|
- !ruby/object:Gem::Version
|
41
|
-
version:
|
50
|
+
version: 3.0.0
|
51
|
+
- - "<"
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '4.0'
|
42
54
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
55
|
+
name: bundler
|
44
56
|
requirement: !ruby/object:Gem::Requirement
|
45
57
|
requirements:
|
46
58
|
- - ">="
|
47
59
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
60
|
+
version: 1.3.0
|
61
|
+
- - "<"
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
version: '2.0'
|
49
64
|
type: :development
|
50
65
|
prerelease: false
|
51
66
|
version_requirements: !ruby/object:Gem::Requirement
|
52
67
|
requirements:
|
53
68
|
- - ">="
|
54
69
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
70
|
+
version: 1.3.0
|
71
|
+
- - "<"
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '2.0'
|
56
74
|
- !ruby/object:Gem::Dependency
|
57
|
-
name:
|
75
|
+
name: sqlite3
|
58
76
|
requirement: !ruby/object:Gem::Requirement
|
59
77
|
requirements:
|
60
|
-
- - "
|
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
|
90
|
+
requirement: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
92
|
+
- - "~>"
|
61
93
|
- !ruby/object:Gem::Version
|
62
94
|
version: '0'
|
63
95
|
type: :development
|
64
96
|
prerelease: false
|
65
97
|
version_requirements: !ruby/object:Gem::Requirement
|
66
98
|
requirements:
|
67
|
-
- - "
|
99
|
+
- - "~>"
|
68
100
|
- !ruby/object:Gem::Version
|
69
101
|
version: '0'
|
70
102
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
103
|
+
name: minitest
|
72
104
|
requirement: !ruby/object:Gem::Requirement
|
73
105
|
requirements:
|
74
106
|
- - ">="
|
75
107
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
108
|
+
version: '0'
|
77
109
|
type: :development
|
78
110
|
prerelease: false
|
79
111
|
version_requirements: !ruby/object:Gem::Requirement
|
80
112
|
requirements:
|
81
113
|
- - ">="
|
82
114
|
- !ruby/object:Gem::Version
|
83
|
-
version:
|
115
|
+
version: '0'
|
84
116
|
- !ruby/object:Gem::Dependency
|
85
|
-
name:
|
117
|
+
name: easy_captcha
|
86
118
|
requirement: !ruby/object:Gem::Requirement
|
87
119
|
requirements:
|
88
120
|
- - "~>"
|
89
121
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
122
|
+
version: '0'
|
91
123
|
type: :development
|
92
124
|
prerelease: false
|
93
125
|
version_requirements: !ruby/object:Gem::Requirement
|
94
126
|
requirements:
|
95
127
|
- - "~>"
|
96
128
|
- !ruby/object:Gem::Version
|
97
|
-
version:
|
129
|
+
version: '0'
|
98
130
|
- !ruby/object:Gem::Dependency
|
99
|
-
name:
|
131
|
+
name: rails_email_validator
|
100
132
|
requirement: !ruby/object:Gem::Requirement
|
101
133
|
requirements:
|
102
|
-
- - "
|
134
|
+
- - "~>"
|
103
135
|
- !ruby/object:Gem::Version
|
104
136
|
version: '0'
|
105
137
|
type: :development
|
106
138
|
prerelease: false
|
107
139
|
version_requirements: !ruby/object:Gem::Requirement
|
108
140
|
requirements:
|
109
|
-
- - "
|
141
|
+
- - "~>"
|
110
142
|
- !ruby/object:Gem::Version
|
111
143
|
version: '0'
|
112
144
|
description: An enterprise security extension for devise, trying to meet industrial
|
@@ -114,34 +146,37 @@ description: An enterprise security extension for devise, trying to meet industr
|
|
114
146
|
email: team@phatworx.de
|
115
147
|
executables: []
|
116
148
|
extensions: []
|
117
|
-
extra_rdoc_files:
|
118
|
-
- LICENSE.txt
|
119
|
-
- README.md
|
149
|
+
extra_rdoc_files: []
|
120
150
|
files:
|
121
151
|
- ".document"
|
152
|
+
- ".gitignore"
|
153
|
+
- ".rubocop.yml"
|
122
154
|
- Gemfile
|
123
155
|
- Gemfile.lock
|
124
156
|
- LICENSE.txt
|
125
157
|
- README.md
|
126
158
|
- Rakefile
|
127
|
-
-
|
159
|
+
- app/controllers/devise/paranoid_verification_code_controller.rb
|
128
160
|
- app/controllers/devise/password_expired_controller.rb
|
161
|
+
- app/views/devise/paranoid_verification_code/show.html.erb
|
129
162
|
- app/views/devise/password_expired/show.html.erb
|
130
163
|
- config/locales/de.yml
|
131
164
|
- config/locales/en.yml
|
165
|
+
- config/locales/it.yml
|
132
166
|
- devise_security_extension.gemspec
|
133
167
|
- lib/devise_security_extension.rb
|
134
168
|
- lib/devise_security_extension/controllers/helpers.rb
|
135
169
|
- lib/devise_security_extension/hooks/expirable.rb
|
170
|
+
- lib/devise_security_extension/hooks/paranoid_verification.rb
|
136
171
|
- lib/devise_security_extension/hooks/password_expirable.rb
|
137
172
|
- lib/devise_security_extension/hooks/session_limitable.rb
|
138
173
|
- lib/devise_security_extension/models/database_authenticatable_patch.rb
|
139
174
|
- lib/devise_security_extension/models/expirable.rb
|
140
175
|
- lib/devise_security_extension/models/old_password.rb
|
176
|
+
- lib/devise_security_extension/models/paranoid_verification.rb
|
141
177
|
- lib/devise_security_extension/models/password_archivable.rb
|
142
178
|
- lib/devise_security_extension/models/password_expirable.rb
|
143
179
|
- lib/devise_security_extension/models/secure_validatable.rb
|
144
|
-
- lib/devise_security_extension/models/security_question.rb
|
145
180
|
- lib/devise_security_extension/models/security_questionable.rb
|
146
181
|
- lib/devise_security_extension/models/session_limitable.rb
|
147
182
|
- lib/devise_security_extension/orm/active_record.rb
|
@@ -157,9 +192,15 @@ files:
|
|
157
192
|
- lib/devise_security_extension/rails.rb
|
158
193
|
- lib/devise_security_extension/routes.rb
|
159
194
|
- lib/devise_security_extension/schema.rb
|
195
|
+
- lib/devise_security_extension/version.rb
|
160
196
|
- lib/generators/devise_security_extension/install_generator.rb
|
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
|
161
201
|
- test/dummy/app/models/.gitkeep
|
162
202
|
- test/dummy/app/models/user.rb
|
203
|
+
- test/dummy/app/views/foos/index.html.erb
|
163
204
|
- test/dummy/config.ru
|
164
205
|
- test/dummy/config/application.rb
|
165
206
|
- test/dummy/config/boot.rb
|
@@ -167,11 +208,17 @@ files:
|
|
167
208
|
- test/dummy/config/environment.rb
|
168
209
|
- test/dummy/config/environments/test.rb
|
169
210
|
- test/dummy/config/initializers/devise.rb
|
211
|
+
- test/dummy/config/routes.rb
|
212
|
+
- test/dummy/config/secrets.yml
|
170
213
|
- test/dummy/db/migrate/20120508165529_create_tables.rb
|
171
|
-
- test/
|
172
|
-
- test/
|
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
|
173
219
|
- test/test_password_archivable.rb
|
174
|
-
|
220
|
+
- test/test_password_expired_controller.rb
|
221
|
+
homepage: https://github.com/phatworx/devise_security_extension
|
175
222
|
licenses:
|
176
223
|
- MIT
|
177
224
|
metadata: {}
|
@@ -183,17 +230,40 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
183
230
|
requirements:
|
184
231
|
- - ">="
|
185
232
|
- !ruby/object:Gem::Version
|
186
|
-
version:
|
233
|
+
version: 1.9.3
|
187
234
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
235
|
requirements:
|
189
236
|
- - ">="
|
190
237
|
- !ruby/object:Gem::Version
|
191
238
|
version: '0'
|
192
239
|
requirements: []
|
193
|
-
rubyforge_project:
|
194
|
-
rubygems_version: 2.
|
240
|
+
rubyforge_project: devise_security_extension
|
241
|
+
rubygems_version: 2.4.2
|
195
242
|
signing_key:
|
196
243
|
specification_version: 4
|
197
244
|
summary: Security extension for devise
|
198
|
-
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
|
199
269
|
has_rdoc:
|