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 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
- actionmailer (0.6.1)
5
- actionpack (>= 0.9.5)
6
- actionpack (1.4.0)
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
- rack (1.3.0)
32
- rails (0.9.5)
33
- actionmailer (>= 0.6.1)
34
- actionpack (>= 1.4.0)
35
- activerecord (>= 1.6.0)
36
- rake (>= 0.4.15)
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
- rake (0.9.1)
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
- * :password_expirable - activate that passwords will expire
33
- * :secure_validatable - better way to validate model. don't use with :validatable!!!
34
- * :password_archivable - save password in old_passwords for history checks
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
- * easy_captcha for registration
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
- * 0.1 expire passwords
71
- * 0.2 strong password validation
72
- * 0.3 password archivable with validation
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.3.6
1
+ 0.4.0
@@ -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!"
@@ -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.3.6"
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-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>, [">= 0"])
63
+ s.add_runtime_dependency(%q<rails>, ["~> 3.0.0"])
62
64
  s.add_runtime_dependency(%q<devise>, [">= 0"])
63
- s.add_runtime_dependency(%q<rails_email_validator>, [">= 0"])
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>, [">= 0"])
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>, [">= 0"])
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 => true # use rails_email_validator
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
- dummy = self.class.new
43
- dummy.encrypted_password = self.encrypted_password_change.first
44
- dummy.password_salt = self.password_salt_change.first if self.respond_to? :password_salt_change and not self.password_salt_change.nil?
45
- self.errors.add(:password, :equal_to_current_password) if dummy.valid_password?(self.password)
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
@@ -3,5 +3,10 @@ module DeviseSecurityExtension
3
3
  ActiveSupport.on_load(:action_controller) do
4
4
  include DeviseSecurityExtension::Controllers::Helpers
5
5
  end
6
+
7
+ ActionDispatch::Callbacks.to_prepare do
8
+ DeviseSecurityExtension::Patches.apply
9
+ end
10
+
6
11
  end
7
12
  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.3.6
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-06 00:00:00.000000000 +02:00
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: &24659860 !ruby/object:Gem::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: '0'
22
+ version: 3.0.0
23
23
  type: :runtime
24
24
  prerelease: false
25
- version_requirements: *24659860
25
+ version_requirements: *26315300
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: devise
28
- requirement: &24659380 !ruby/object:Gem::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: *24659380
36
+ version_requirements: *26314820
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: rails_email_validator
39
- requirement: &24658900 !ruby/object:Gem::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: :runtime
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: *24658900
58
+ version_requirements: *26313860
48
59
  - !ruby/object:Gem::Dependency
49
60
  name: bundler
50
- requirement: &24658420 !ruby/object:Gem::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: *24658420
69
+ version_requirements: *26313380
59
70
  - !ruby/object:Gem::Dependency
60
71
  name: jeweler
61
- requirement: &24657940 !ruby/object:Gem::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: *24657940
80
+ version_requirements: *26312900
70
81
  - !ruby/object:Gem::Dependency
71
82
  name: rcov
72
- requirement: &24657460 !ruby/object:Gem::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: *24657460
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: 669408536488345234
144
+ hash: 1577265530715182103
132
145
  required_rubygems_version: !ruby/object:Gem::Requirement
133
146
  none: false
134
147
  requirements: