devise_security_extension 0.3.6 → 0.4.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.
- data/Gemfile +3 -2
- data/Gemfile.lock +56 -11
- data/README.rdoc +42 -17
- data/VERSION +1 -1
- data/config/locales/de.yml +4 -3
- data/config/locales/en.yml +5 -4
- data/devise_security_extension.gemspec +11 -6
- data/lib/devise_security_extension.rb +27 -1
- data/lib/devise_security_extension/controllers/helpers.rb +16 -0
- data/lib/devise_security_extension/models/secure_validatable.rb +7 -8
- data/lib/devise_security_extension/patches.rb +14 -0
- data/lib/devise_security_extension/patches/controller_captcha.rb +21 -0
- data/lib/devise_security_extension/rails.rb +5 -0
- data/lib/generators/devise_security_extension/install_generator.rb +4 -1
- metadata +31 -18
data/Gemfile
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
# Add dependencies required to use your gem here.
|
3
3
|
# Example:
|
4
|
-
gem "rails"
|
4
|
+
gem "rails", "~> 3.0.0"
|
5
5
|
gem "devise"
|
6
|
-
gem "rails_email_validator"
|
7
6
|
|
8
7
|
# Add dependencies to develop your gem here.
|
9
8
|
# Include everything needed to run rake, tests, features, etc.
|
10
9
|
group :development do
|
10
|
+
gem "rails_email_validator"
|
11
|
+
gem "easy_captcha"
|
11
12
|
gem "bundler", "~> 1.0.0"
|
12
13
|
gem "jeweler", "~> 1.5.2"
|
13
14
|
gem "rcov", ">= 0"
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,20 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
-
|
5
|
-
|
6
|
-
|
4
|
+
abstract (1.0.0)
|
5
|
+
actionmailer (3.0.7)
|
6
|
+
actionpack (= 3.0.7)
|
7
|
+
mail (~> 2.2.15)
|
8
|
+
actionpack (3.0.7)
|
9
|
+
activemodel (= 3.0.7)
|
10
|
+
activesupport (= 3.0.7)
|
11
|
+
builder (~> 2.1.2)
|
12
|
+
erubis (~> 2.6.6)
|
13
|
+
i18n (~> 0.5.0)
|
14
|
+
rack (~> 1.2.1)
|
15
|
+
rack-mount (~> 0.6.14)
|
16
|
+
rack-test (~> 0.5.7)
|
17
|
+
tzinfo (~> 0.3.23)
|
7
18
|
activemodel (3.0.7)
|
8
19
|
activesupport (= 3.0.7)
|
9
20
|
builder (~> 2.1.2)
|
@@ -13,6 +24,9 @@ GEM
|
|
13
24
|
activesupport (= 3.0.7)
|
14
25
|
arel (~> 2.0.2)
|
15
26
|
tzinfo (~> 0.3.23)
|
27
|
+
activeresource (3.0.7)
|
28
|
+
activemodel (= 3.0.7)
|
29
|
+
activesupport (= 3.0.7)
|
16
30
|
activesupport (3.0.7)
|
17
31
|
arel (2.0.10)
|
18
32
|
bcrypt-ruby (2.1.4)
|
@@ -21,23 +35,53 @@ GEM
|
|
21
35
|
bcrypt-ruby (~> 2.1.2)
|
22
36
|
orm_adapter (~> 0.0.3)
|
23
37
|
warden (~> 1.0.3)
|
38
|
+
easy_captcha (0.4.1)
|
39
|
+
rails (>= 3.0.0)
|
40
|
+
rails (>= 3.0.0)
|
41
|
+
rmagick
|
42
|
+
rmagick
|
43
|
+
erubis (2.6.6)
|
44
|
+
abstract (>= 1.0.0)
|
24
45
|
git (1.2.5)
|
25
46
|
i18n (0.5.0)
|
26
47
|
jeweler (1.5.2)
|
27
48
|
bundler (~> 1.0.0)
|
28
49
|
git (>= 1.2.5)
|
29
50
|
rake
|
51
|
+
mail (2.2.19)
|
52
|
+
activesupport (>= 2.3.6)
|
53
|
+
i18n (>= 0.4.0)
|
54
|
+
mime-types (~> 1.16)
|
55
|
+
treetop (~> 1.4.8)
|
56
|
+
mime-types (1.16)
|
30
57
|
orm_adapter (0.0.5)
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
58
|
+
polyglot (0.3.1)
|
59
|
+
rack (1.2.3)
|
60
|
+
rack-mount (0.6.14)
|
61
|
+
rack (>= 1.0.0)
|
62
|
+
rack-test (0.5.7)
|
63
|
+
rack (>= 1.0)
|
64
|
+
rails (3.0.7)
|
65
|
+
actionmailer (= 3.0.7)
|
66
|
+
actionpack (= 3.0.7)
|
67
|
+
activerecord (= 3.0.7)
|
68
|
+
activeresource (= 3.0.7)
|
69
|
+
activesupport (= 3.0.7)
|
70
|
+
bundler (~> 1.0)
|
71
|
+
railties (= 3.0.7)
|
37
72
|
rails_email_validator (0.1.4)
|
38
73
|
activemodel (>= 3.0.0)
|
39
|
-
|
74
|
+
railties (3.0.7)
|
75
|
+
actionpack (= 3.0.7)
|
76
|
+
activesupport (= 3.0.7)
|
77
|
+
rake (>= 0.8.7)
|
78
|
+
thor (~> 0.14.4)
|
79
|
+
rake (0.9.2)
|
40
80
|
rcov (0.9.9)
|
81
|
+
rmagick (2.13.1)
|
82
|
+
thor (0.14.6)
|
83
|
+
treetop (1.4.9)
|
84
|
+
polyglot (>= 0.3.1)
|
41
85
|
tzinfo (0.3.27)
|
42
86
|
warden (1.0.4)
|
43
87
|
rack (>= 1.0)
|
@@ -48,7 +92,8 @@ PLATFORMS
|
|
48
92
|
DEPENDENCIES
|
49
93
|
bundler (~> 1.0.0)
|
50
94
|
devise
|
95
|
+
easy_captcha
|
51
96
|
jeweler (~> 1.5.2)
|
52
|
-
rails
|
97
|
+
rails (~> 3.0.0)
|
53
98
|
rails_email_validator
|
54
99
|
rcov
|
data/README.rdoc
CHANGED
@@ -2,6 +2,13 @@
|
|
2
2
|
|
3
3
|
an security extension for devise
|
4
4
|
|
5
|
+
== Features
|
6
|
+
|
7
|
+
* expire passwords (update password with current password)
|
8
|
+
* strong password validation
|
9
|
+
* save old passwords for check new passwords
|
10
|
+
* captcha support for sign_up, sign_in, recover an unlock
|
11
|
+
|
5
12
|
== Installation
|
6
13
|
add to Gemfile
|
7
14
|
gem 'devise_security_extension'
|
@@ -10,7 +17,7 @@ after bundle execute
|
|
10
17
|
rails g devise_security_extension:install
|
11
18
|
|
12
19
|
for :secure_validatable you need to add
|
13
|
-
gem 'rails_email_validator'
|
20
|
+
gem 'rails_email_validator'
|
14
21
|
|
15
22
|
== Configuration
|
16
23
|
|
@@ -27,11 +34,37 @@ for :secure_validatable you need to add
|
|
27
34
|
# Deny old password (true, false, count)
|
28
35
|
# config.deny_old_passwords = true
|
29
36
|
|
37
|
+
# captcha integration for recover form
|
38
|
+
# config.captcha_for_recover = true
|
39
|
+
|
40
|
+
# captcha integration for sign up form
|
41
|
+
# config.captcha_for_sign_up = true
|
42
|
+
|
43
|
+
# captcha integration for sign in form
|
44
|
+
# config.captcha_for_sign_in = true
|
45
|
+
|
46
|
+
# captcha integration for unlock form
|
47
|
+
# config.captcha_for_unlock = true
|
48
|
+
|
49
|
+
== Captcha-Support
|
50
|
+
|
51
|
+
=== Installation
|
52
|
+
|
53
|
+
1. add to Gemfile "gem 'easy_captcha'"
|
54
|
+
2. install easy_captcha "rails g easy_captcha:install"
|
55
|
+
3. enable captcha - see "Configuration"
|
56
|
+
4. add captcha source in views of devise for each controller you have activate
|
57
|
+
|
58
|
+
<p><%= captcha_tag %></p>
|
59
|
+
<p><%= text_field_tag :captcha %></p>
|
60
|
+
|
61
|
+
That's all!
|
62
|
+
|
30
63
|
== Model modules
|
31
64
|
|
32
|
-
|
33
|
-
|
34
|
-
|
65
|
+
* :password_expirable - activate that passwords will expire
|
66
|
+
* :secure_validatable - better way to validate model. don't use with :validatable!!!
|
67
|
+
* :password_archivable - save password in old_passwords for history checks
|
35
68
|
|
36
69
|
== Schema
|
37
70
|
|
@@ -53,23 +86,15 @@ for :secure_validatable you need to add
|
|
53
86
|
* devise (https://github.com/plataformatec/devise)
|
54
87
|
* Rails 3 (http://github.com/rails/rails)
|
55
88
|
|
56
|
-
== Features
|
57
|
-
|
58
|
-
* expire passwords (update password with current password)
|
59
|
-
* strong password validation
|
60
|
-
* save old passwords for check new passwords
|
61
|
-
|
62
89
|
== Todo
|
63
90
|
|
64
|
-
|
65
|
-
* easy_captcha for password forgotten
|
66
|
-
* easy_captcha for unlock instructions
|
67
|
-
* disable inactive users after time
|
91
|
+
* disable inactive users after time
|
68
92
|
|
69
93
|
== History
|
70
|
-
|
71
|
-
|
72
|
-
|
94
|
+
* 0.1 expire passwords
|
95
|
+
* 0.2 strong password validation
|
96
|
+
* 0.3 password archivable with validation
|
97
|
+
* 0.4 captcha support for sign_up, sign_in, recover an unlock
|
73
98
|
|
74
99
|
== Maintainers
|
75
100
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/config/locales/de.yml
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
de:
|
2
2
|
errors:
|
3
3
|
messages:
|
4
|
-
taken_in_past: wurde bereits in der Vergangenheit verwendet!
|
5
|
-
equal_to_current_password: darf nicht dem aktuellen Passwort entsprechen!
|
4
|
+
taken_in_past: "wurde bereits in der Vergangenheit verwendet!"
|
5
|
+
equal_to_current_password: "darf nicht dem aktuellen Passwort entsprechen!"
|
6
6
|
devise:
|
7
|
+
invalid_captcha: "Die Captchaeingabe ist nicht gültig!"
|
7
8
|
password_expired:
|
8
9
|
updated: "Das neue Passwort wurde übernommen."
|
9
|
-
change_required: Ihr Passwort ist abgelaufen. Bitte vergeben sie ein neues Passwort!
|
10
|
+
change_required: "Ihr Passwort ist abgelaufen. Bitte vergeben sie ein neues Passwort!"
|
data/config/locales/en.yml
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
en:
|
2
2
|
errors:
|
3
3
|
messages:
|
4
|
-
taken_in_past: was already taken in the past!
|
5
|
-
equal_to_current_password: must be different to the current password!
|
4
|
+
taken_in_past: "was already taken in the past!"
|
5
|
+
equal_to_current_password: "must be different to the current password!"
|
6
6
|
devise:
|
7
|
+
invalid_captcha: "The captcha input is not valid!"
|
7
8
|
password_expired:
|
8
|
-
updated: Your new password is saved.
|
9
|
-
change_required: Your password is expired. Please renew your password!
|
9
|
+
updated: "Your new password is saved."
|
10
|
+
change_required: "Your password is expired. Please renew your password!"
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{devise_security_extension}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Marco Scholl"]
|
12
|
-
s.date = %q{2011-06-
|
12
|
+
s.date = %q{2011-06-07}
|
13
13
|
s.description = %q{a gem for extend devise for more password security}
|
14
14
|
s.email = %q{team@phatworx.de}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -37,6 +37,8 @@ Gem::Specification.new do |s|
|
|
37
37
|
"lib/devise_security_extension/models/password_expirable.rb",
|
38
38
|
"lib/devise_security_extension/models/secure_validatable.rb",
|
39
39
|
"lib/devise_security_extension/orm/active_record.rb",
|
40
|
+
"lib/devise_security_extension/patches.rb",
|
41
|
+
"lib/devise_security_extension/patches/controller_captcha.rb",
|
40
42
|
"lib/devise_security_extension/rails.rb",
|
41
43
|
"lib/devise_security_extension/routes.rb",
|
42
44
|
"lib/devise_security_extension/schema.rb",
|
@@ -58,24 +60,27 @@ Gem::Specification.new do |s|
|
|
58
60
|
s.specification_version = 3
|
59
61
|
|
60
62
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
61
|
-
s.add_runtime_dependency(%q<rails>, ["
|
63
|
+
s.add_runtime_dependency(%q<rails>, ["~> 3.0.0"])
|
62
64
|
s.add_runtime_dependency(%q<devise>, [">= 0"])
|
63
|
-
s.
|
65
|
+
s.add_development_dependency(%q<rails_email_validator>, [">= 0"])
|
66
|
+
s.add_development_dependency(%q<easy_captcha>, [">= 0"])
|
64
67
|
s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
|
65
68
|
s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
|
66
69
|
s.add_development_dependency(%q<rcov>, [">= 0"])
|
67
70
|
else
|
68
|
-
s.add_dependency(%q<rails>, ["
|
71
|
+
s.add_dependency(%q<rails>, ["~> 3.0.0"])
|
69
72
|
s.add_dependency(%q<devise>, [">= 0"])
|
70
73
|
s.add_dependency(%q<rails_email_validator>, [">= 0"])
|
74
|
+
s.add_dependency(%q<easy_captcha>, [">= 0"])
|
71
75
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
72
76
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
73
77
|
s.add_dependency(%q<rcov>, [">= 0"])
|
74
78
|
end
|
75
79
|
else
|
76
|
-
s.add_dependency(%q<rails>, ["
|
80
|
+
s.add_dependency(%q<rails>, ["~> 3.0.0"])
|
77
81
|
s.add_dependency(%q<devise>, [">= 0"])
|
78
82
|
s.add_dependency(%q<rails_email_validator>, [">= 0"])
|
83
|
+
s.add_dependency(%q<easy_captcha>, [">= 0"])
|
79
84
|
s.add_dependency(%q<bundler>, ["~> 1.0.0"])
|
80
85
|
s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
|
81
86
|
s.add_dependency(%q<rcov>, [">= 0"])
|
@@ -5,7 +5,7 @@ require 'active_support/ordered_hash'
|
|
5
5
|
require 'active_support/concern'
|
6
6
|
require 'devise'
|
7
7
|
|
8
|
-
module Devise # :nodoc:
|
8
|
+
module Devise # :nodoc:
|
9
9
|
|
10
10
|
# Should the password expire (e.g 3.months)
|
11
11
|
mattr_accessor :expire_password_after
|
@@ -22,22 +22,48 @@ module Devise # :nodoc:
|
|
22
22
|
# Deny old password (true, false, count)
|
23
23
|
mattr_accessor :deny_old_passwords
|
24
24
|
@@deny_old_passwords = true
|
25
|
+
|
26
|
+
# enable email validation for :secure_validatable. (true, false, validation_options)
|
27
|
+
# dependency: need an email validator like rails_email_validator
|
28
|
+
mattr_accessor :email_validation
|
29
|
+
@@email_validation = true
|
30
|
+
|
31
|
+
# captcha integration for recover form
|
32
|
+
mattr_accessor :captcha_for_recover
|
33
|
+
@@captcha_for_recover = false
|
34
|
+
|
35
|
+
# captcha integration for sign up form
|
36
|
+
mattr_accessor :captcha_for_sign_up
|
37
|
+
@@captcha_for_sign_up = false
|
38
|
+
|
39
|
+
# captcha integration for sign in form
|
40
|
+
mattr_accessor :captcha_for_sign_in
|
41
|
+
@@captcha_for_sign_in = false
|
42
|
+
|
43
|
+
# captcha integration for unlock form
|
44
|
+
mattr_accessor :captcha_for_unlock
|
45
|
+
@@captcha_for_unlock = false
|
46
|
+
|
25
47
|
end
|
26
48
|
|
27
49
|
# an security extension for devise
|
28
50
|
module DeviseSecurityExtension
|
29
51
|
autoload :Schema, 'devise_security_extension/schema'
|
52
|
+
autoload :Patches, 'devise_security_extension/patches'
|
30
53
|
|
31
54
|
module Controllers # :nodoc:
|
32
55
|
autoload :Helpers, 'devise_security_extension/controllers/helpers'
|
33
56
|
end
|
34
57
|
end
|
35
58
|
|
59
|
+
# modules
|
36
60
|
Devise.add_module :password_expirable, :controller => :password_expirable, :model => 'devise_security_extension/models/password_expirable', :route => :password_expired
|
37
61
|
Devise.add_module :secure_validatable, :model => 'devise_security_extension/models/secure_validatable'
|
38
62
|
Devise.add_module :password_archivable, :model => 'devise_security_extension/models/password_archivable'
|
39
63
|
|
64
|
+
# requires
|
40
65
|
require 'devise_security_extension/routes'
|
41
66
|
require 'devise_security_extension/rails'
|
42
67
|
require 'devise_security_extension/orm/active_record'
|
43
68
|
require 'devise_security_extension/models/old_password'
|
69
|
+
|
@@ -6,7 +6,23 @@ module DeviseSecurityExtension
|
|
6
6
|
included do
|
7
7
|
before_filter :handle_password_change
|
8
8
|
end
|
9
|
+
|
10
|
+
module ClassMethods
|
11
|
+
# helper for captcha
|
12
|
+
def init_recover_password_captcha
|
13
|
+
p "init"
|
14
|
+
p self.inspect
|
15
|
+
|
16
|
+
include RecoverPasswordCaptcha
|
17
|
+
end
|
18
|
+
end
|
9
19
|
|
20
|
+
module RecoverPasswordCaptcha
|
21
|
+
def new
|
22
|
+
p "Check here captcha"
|
23
|
+
super
|
24
|
+
end
|
25
|
+
end
|
10
26
|
|
11
27
|
# controller instance methods
|
12
28
|
module InstanceMethods
|
@@ -11,7 +11,6 @@ module Devise
|
|
11
11
|
# * +password_regex+: need strong password. Defaults to /(?=.*\d)(?=.*[a-z])(?=.*[A-Z])/
|
12
12
|
#
|
13
13
|
module SecureValidatable
|
14
|
-
|
15
14
|
def self.included(base)
|
16
15
|
base.extend ClassMethods
|
17
16
|
assert_secure_validations_api!(base)
|
@@ -23,8 +22,8 @@ module Devise
|
|
23
22
|
|
24
23
|
# validates email
|
25
24
|
validates :email, :presence => true, :if => :email_required?
|
26
|
-
validates :email, :email =>
|
27
|
-
|
25
|
+
validates :email, :email => email_validation if email_validation # use rails_email_validator or similar
|
26
|
+
|
28
27
|
# validates password
|
29
28
|
validates :password, :presence => true, :length => password_length, :format => password_regex, :confirmation => true, :if => :password_required?
|
30
29
|
|
@@ -39,10 +38,10 @@ module Devise
|
|
39
38
|
|
40
39
|
def current_equal_password_validation
|
41
40
|
if not self.new_record? and not self.encrypted_password_change.nil?
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
41
|
+
dummy = self.class.new
|
42
|
+
dummy.encrypted_password = self.encrypted_password_change.first
|
43
|
+
dummy.password_salt = self.password_salt_change.first if self.respond_to? :password_salt_change and not self.password_salt_change.nil?
|
44
|
+
self.errors.add(:password, :equal_to_current_password) if dummy.valid_password?(self.password)
|
46
45
|
end
|
47
46
|
end
|
48
47
|
|
@@ -60,7 +59,7 @@ module Devise
|
|
60
59
|
end
|
61
60
|
|
62
61
|
module ClassMethods
|
63
|
-
Devise::Models.config(self, :password_regex, :password_length)
|
62
|
+
Devise::Models.config(self, :password_regex, :password_length, :email_validation)
|
64
63
|
end
|
65
64
|
end
|
66
65
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module DeviseSecurityExtension
|
2
|
+
module Patches
|
3
|
+
autoload :ControllerCaptcha, 'devise_security_extension/patches/controller_captcha'
|
4
|
+
|
5
|
+
class << self
|
6
|
+
def apply
|
7
|
+
Devise::PasswordsController.send(:include, Patches::ControllerCaptcha) if Devise.captcha_for_recover
|
8
|
+
Devise::UnlocksController.send(:include, Patches::ControllerCaptcha) if Devise.captcha_for_unlock
|
9
|
+
Devise::RegistrationsController.send(:include, Patches::ControllerCaptcha) if Devise.captcha_for_sign_up
|
10
|
+
Devise::SessionsController.send(:include, Patches::ControllerCaptcha) if Devise.captcha_for_sign_in
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module DeviseSecurityExtension::Patches
|
2
|
+
# patch passwords controller for captcha
|
3
|
+
module ControllerCaptcha
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
included do
|
6
|
+
# here the patch
|
7
|
+
|
8
|
+
alias_method :create_without_captcha_check, :create
|
9
|
+
define_method :create do
|
10
|
+
if valid_captcha? params[:captcha]
|
11
|
+
create_without_captcha_check
|
12
|
+
else
|
13
|
+
build_resource
|
14
|
+
clean_up_passwords(resource)
|
15
|
+
flash[:alert] = I18n.translate('devise.invalid_captcha')
|
16
|
+
render_with_scope :new
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -15,7 +15,10 @@ module DeviseSecurityExtension
|
|
15
15
|
" # How often save old passwords in archive\n" +
|
16
16
|
" # config.password_archiving_count = 5\n\n" +
|
17
17
|
" # Deny old password (true, false, count)\n" +
|
18
|
-
" # config.deny_old_passwords = true" +
|
18
|
+
" # config.deny_old_passwords = true\n\n" +
|
19
|
+
" # enable email validation for :secure_validatable. (true, false, validation_options)\n" +
|
20
|
+
" # dependency: need an email validator like rails_email_validator\n" +
|
21
|
+
" # config.email_validation = true" +
|
19
22
|
"\n", :before => /end[ |\n|]+\Z/
|
20
23
|
end
|
21
24
|
|
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.4.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,23 +9,23 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2011-06-
|
12
|
+
date: 2011-06-07 00:00:00.000000000 +02:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: rails
|
17
|
-
requirement: &
|
17
|
+
requirement: &26315300 !ruby/object:Gem::Requirement
|
18
18
|
none: false
|
19
19
|
requirements:
|
20
|
-
- -
|
20
|
+
- - ~>
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
22
|
+
version: 3.0.0
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
|
-
version_requirements: *
|
25
|
+
version_requirements: *26315300
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: devise
|
28
|
-
requirement: &
|
28
|
+
requirement: &26314820 !ruby/object:Gem::Requirement
|
29
29
|
none: false
|
30
30
|
requirements:
|
31
31
|
- - ! '>='
|
@@ -33,21 +33,32 @@ dependencies:
|
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
|
-
version_requirements: *
|
36
|
+
version_requirements: *26314820
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: rails_email_validator
|
39
|
-
requirement: &
|
39
|
+
requirement: &26314340 !ruby/object:Gem::Requirement
|
40
40
|
none: false
|
41
41
|
requirements:
|
42
42
|
- - ! '>='
|
43
43
|
- !ruby/object:Gem::Version
|
44
44
|
version: '0'
|
45
|
-
type: :
|
45
|
+
type: :development
|
46
|
+
prerelease: false
|
47
|
+
version_requirements: *26314340
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: easy_captcha
|
50
|
+
requirement: &26313860 !ruby/object:Gem::Requirement
|
51
|
+
none: false
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
type: :development
|
46
57
|
prerelease: false
|
47
|
-
version_requirements: *
|
58
|
+
version_requirements: *26313860
|
48
59
|
- !ruby/object:Gem::Dependency
|
49
60
|
name: bundler
|
50
|
-
requirement: &
|
61
|
+
requirement: &26313380 !ruby/object:Gem::Requirement
|
51
62
|
none: false
|
52
63
|
requirements:
|
53
64
|
- - ~>
|
@@ -55,10 +66,10 @@ dependencies:
|
|
55
66
|
version: 1.0.0
|
56
67
|
type: :development
|
57
68
|
prerelease: false
|
58
|
-
version_requirements: *
|
69
|
+
version_requirements: *26313380
|
59
70
|
- !ruby/object:Gem::Dependency
|
60
71
|
name: jeweler
|
61
|
-
requirement: &
|
72
|
+
requirement: &26312900 !ruby/object:Gem::Requirement
|
62
73
|
none: false
|
63
74
|
requirements:
|
64
75
|
- - ~>
|
@@ -66,10 +77,10 @@ dependencies:
|
|
66
77
|
version: 1.5.2
|
67
78
|
type: :development
|
68
79
|
prerelease: false
|
69
|
-
version_requirements: *
|
80
|
+
version_requirements: *26312900
|
70
81
|
- !ruby/object:Gem::Dependency
|
71
82
|
name: rcov
|
72
|
-
requirement: &
|
83
|
+
requirement: &26312420 !ruby/object:Gem::Requirement
|
73
84
|
none: false
|
74
85
|
requirements:
|
75
86
|
- - ! '>='
|
@@ -77,7 +88,7 @@ dependencies:
|
|
77
88
|
version: '0'
|
78
89
|
type: :development
|
79
90
|
prerelease: false
|
80
|
-
version_requirements: *
|
91
|
+
version_requirements: *26312420
|
81
92
|
description: a gem for extend devise for more password security
|
82
93
|
email: team@phatworx.de
|
83
94
|
executables: []
|
@@ -106,6 +117,8 @@ files:
|
|
106
117
|
- lib/devise_security_extension/models/password_expirable.rb
|
107
118
|
- lib/devise_security_extension/models/secure_validatable.rb
|
108
119
|
- lib/devise_security_extension/orm/active_record.rb
|
120
|
+
- lib/devise_security_extension/patches.rb
|
121
|
+
- lib/devise_security_extension/patches/controller_captcha.rb
|
109
122
|
- lib/devise_security_extension/rails.rb
|
110
123
|
- lib/devise_security_extension/routes.rb
|
111
124
|
- lib/devise_security_extension/schema.rb
|
@@ -128,7 +141,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
128
141
|
version: '0'
|
129
142
|
segments:
|
130
143
|
- 0
|
131
|
-
hash:
|
144
|
+
hash: 1577265530715182103
|
132
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
146
|
none: false
|
134
147
|
requirements:
|