devise_security_extension 0.3.6 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|