devise-secure_password 2.0.1 → 2.2.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.
@@ -63,7 +63,7 @@ module Devise
63
63
 
64
64
  # do what devise would do under normal circumstances but also be aware of
65
65
  # secure_password or other validators that would be ignored by devise.
66
- result = if resource.errors.count.zero?
66
+ result = if resource.errors.none?
67
67
  resource.update(params)
68
68
  else
69
69
  false
@@ -24,12 +24,16 @@ Gem::Specification.new do |spec|
24
24
  spec.files = Dir['./**/*'].reject do |f|
25
25
  f.match(%r{^./(test|spec|features|lib/tasks)/|Gemfile.lock.ci})
26
26
  end
27
+
28
+ spec.metadata = {
29
+ 'rubygems_mfa_required' => 'true'
30
+ }
31
+
27
32
  spec.executables = spec.files.grep(%r{^bin/}).map { |f| File.basename(f) }
28
- spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
29
33
  spec.require_paths = ['lib']
30
34
 
31
- spec.add_runtime_dependency 'devise', '>= 4.0.0', '< 5.0.0'
32
- spec.add_runtime_dependency 'railties', '>= 5.0.0', '< 7.0.0'
35
+ spec.add_dependency 'devise', '>= 4.0.0', '< 5.0.0'
36
+ spec.add_dependency 'railties', '>= 5.0.0', '< 9.0.0'
33
37
 
34
38
  spec.add_development_dependency 'bundler', '>= 2.2.14'
35
39
  spec.add_development_dependency 'capybara', '>= 3.35.3'
@@ -38,7 +42,7 @@ Gem::Specification.new do |spec|
38
42
  spec.add_development_dependency 'devise', '~> 4.0'
39
43
  spec.add_development_dependency 'flay', '>= 2.10.0'
40
44
  spec.add_development_dependency 'launchy', '>= 2.4.3'
41
- spec.add_development_dependency 'rails', '>= 5.2.0'
45
+ spec.add_development_dependency 'rails', '>= 7.0'
42
46
  spec.add_development_dependency 'rake', '>= 12.3'
43
47
  spec.add_development_dependency 'rspec', '>= 3.7'
44
48
  spec.add_development_dependency 'rspec_junit_formatter', '>= 0.3'
@@ -50,7 +54,7 @@ Gem::Specification.new do |spec|
50
54
  spec.add_development_dependency 'selenium-webdriver', '>= 3.7.0'
51
55
  spec.add_development_dependency 'simplecov', '>= 0.18.2'
52
56
  spec.add_development_dependency 'simplecov-console', '>= 0.4.2'
53
- spec.add_development_dependency 'sqlite3', '>= 1.3.13'
57
+ spec.add_development_dependency 'sqlite3', '>= 1.7.0'
54
58
 
55
- spec.required_ruby_version = '>= 2.7'
59
+ spec.required_ruby_version = '>= 3.2'
56
60
  end
@@ -0,0 +1,67 @@
1
+ source 'https://rubygems.org'
2
+ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
+
4
+ ENV['RAILS_TARGET'] ||= '7.0'
5
+
6
+ gemspec path: '../'
7
+
8
+ # Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main"
9
+ gem 'rails', '~> 7.1.3', '>= 7.1.3.4'
10
+
11
+ # The original asset pipeline for Rails [https://github.com/rails/sprockets-rails]
12
+ gem 'sprockets-rails'
13
+
14
+ # Use sqlite3 as the database for Active Record
15
+ gem 'sqlite3', '~> 1.4'
16
+
17
+ # Use the Puma web server [https://github.com/puma/puma]
18
+ gem 'puma', '~> 6.0'
19
+
20
+ # Use JavaScript with ESM import maps [https://github.com/rails/importmap-rails]
21
+ gem 'importmap-rails'
22
+
23
+ # Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev]
24
+ gem 'turbo-rails'
25
+
26
+ # Hotwire's modest JavaScript framework [https://stimulus.hotwired.dev]
27
+ gem 'stimulus-rails'
28
+
29
+ # Build JSON APIs with ease [https://github.com/rails/jbuilder]
30
+ gem 'jbuilder'
31
+
32
+ # Use Redis adapter to run Action Cable in production
33
+ # gem "redis", ">= 4.0.1"
34
+
35
+ # Use Kredis to get higher-level data types in Redis [https://github.com/rails/kredis]
36
+ # gem "kredis"
37
+
38
+ # Use Active Model has_secure_password [https://guides.rubyonrails.org/active_model_basics.html#securepassword]
39
+ # gem "bcrypt", "~> 3.1.7"
40
+
41
+ # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
42
+ gem 'tzinfo-data', platforms: %i(windows jruby)
43
+
44
+ # Reduces boot times through caching; required in config/boot.rb
45
+ gem 'bootsnap', require: false
46
+
47
+ # Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]
48
+ # gem "image_processing", "~> 1.2"
49
+
50
+ group :development do
51
+ # Use console on exceptions pages [https://github.com/rails/web-console]
52
+ gem 'web-console'
53
+
54
+ # Speed up commands on slow machines / big apps [https://github.com/rails/spring]
55
+ # gem "spring"
56
+ end
57
+
58
+ group :test do
59
+ # Adds support for Capybara system testing and selenium driver
60
+ gem 'capybara', '>= 3.26'
61
+ gem 'codecov', require: false
62
+ gem 'selenium-webdriver'
63
+ gem 'shoulda-matchers'
64
+ # Easy installation and use of web drivers to run system tests with browsers
65
+ gem 'webdrivers'
66
+ gem 'webrick'
67
+ end
@@ -0,0 +1,71 @@
1
+ source 'https://rubygems.org'
2
+ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
+
4
+ ENV['RAILS_TARGET'] ||= '8.0'
5
+
6
+ gemspec path: '../'
7
+
8
+ # Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main"
9
+ gem 'rails', '~> 8.0.2', '>= 8.0.2.1'
10
+ # The modern asset pipeline for Rails [https://github.com/rails/propshaft]
11
+ gem 'propshaft'
12
+ # Use sqlite3 as the database for Active Record
13
+ gem 'sqlite3', '>= 2.1'
14
+ # Use the Puma web server [https://github.com/puma/puma]
15
+ gem 'puma', '~> 6.0'
16
+ # Use JavaScript with ESM import maps [https://github.com/rails/importmap-rails]
17
+ gem 'importmap-rails'
18
+ # Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev]
19
+ gem 'turbo-rails'
20
+ # Hotwire's modest JavaScript framework [https://stimulus.hotwired.dev]
21
+ gem 'stimulus-rails'
22
+ # Build JSON APIs with ease [https://github.com/rails/jbuilder]
23
+ gem 'jbuilder'
24
+
25
+ # Use Active Model has_secure_password [https://guides.rubyonrails.org/active_model_basics.html#securepassword]
26
+ # gem "bcrypt", "~> 3.1.7"
27
+
28
+ # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
29
+ gem 'tzinfo-data', platforms: %i(windows jruby)
30
+
31
+ # Use the database-backed adapters for Rails.cache, Active Job, and Action Cable
32
+ gem 'solid_cable'
33
+ gem 'solid_cache'
34
+ gem 'solid_queue'
35
+
36
+ # Reduces boot times through caching; required in config/boot.rb
37
+ gem 'bootsnap', require: false
38
+
39
+ # Deploy this application anywhere as a Docker container [https://kamal-deploy.org]
40
+ gem 'kamal', require: false
41
+
42
+ # Add HTTP asset caching/compression and X-Sendfile acceleration to Puma [https://github.com/basecamp/thruster/]
43
+ gem 'thruster', require: false
44
+
45
+ # Use Active Storage variants [https://guides.rubyonrails.org/active_storage_overview.html#transforming-images]
46
+ # gem "image_processing", "~> 1.2"
47
+
48
+ group :development, :test do
49
+ # See https://guides.rubyonrails.org/debugging_rails_applications.html#debugging-with-the-debug-gem
50
+ gem 'debug', platforms: %i(mri windows), require: 'debug/prelude'
51
+
52
+ # Static analysis for security vulnerabilities [https://brakemanscanner.org/]
53
+ gem 'brakeman', require: false
54
+
55
+ # Omakase Ruby styling [https://github.com/rails/rubocop-rails-omakase/]
56
+ gem 'rubocop-rails-omakase', require: false
57
+ end
58
+
59
+ group :development do
60
+ # Use console on exceptions pages [https://github.com/rails/web-console]
61
+ gem 'web-console'
62
+ end
63
+
64
+ group :test do
65
+ # Use system testing [https://guides.rubyonrails.org/testing.html#system-testing]
66
+ gem 'capybara'
67
+ gem 'codecov', require: false
68
+ gem 'selenium-webdriver'
69
+ gem 'shoulda-matchers'
70
+ gem 'webrick'
71
+ end
@@ -24,7 +24,7 @@ module Devise
24
24
  errors.add(:base, error_string)
25
25
  end
26
26
 
27
- errors.count.zero?
27
+ errors.none?
28
28
  end
29
29
 
30
30
  def password_recent?
@@ -37,15 +37,15 @@ module Devise
37
37
  def before_resource_initialized
38
38
  return if self.class.respond_to?(:password_previously_used_count)
39
39
 
40
- raise ConfigurationError, <<-ERROR.strip_heredoc
40
+ raise ConfigurationError, <<~ERROR
41
41
 
42
- The password_disallows_frequent_changes module depends on the
43
- password_disallows_frequent_reuse module. Verify that you have
44
- added both modules to your model, for example:
42
+ The password_disallows_frequent_changes module depends on the
43
+ password_disallows_frequent_reuse module. Verify that you have
44
+ added both modules to your model, for example:
45
45
 
46
- devise :database_authenticatable, :registerable,
47
- :password_disallows_frequent_reuse,
48
- :password_disallows_frequent_changes
46
+ devise :database_authenticatable, :registerable,
47
+ :password_disallows_frequent_reuse,
48
+ :password_disallows_frequent_changes
49
49
  ERROR
50
50
  end
51
51
 
@@ -27,7 +27,7 @@ module Devise
27
27
  errors.add(:base, error_string)
28
28
  end
29
29
 
30
- errors.count.zero?
30
+ errors.none?
31
31
  end
32
32
 
33
33
  protected
@@ -41,7 +41,7 @@ module Devise
41
41
  end
42
42
 
43
43
  def previous_password?(password)
44
- salts = previous_passwords.select(:salt).map(&:salt)
44
+ salts = previous_passwords.pluck(:salt)
45
45
  pepper = self.class.pepper.presence || ''
46
46
 
47
47
  salts.each do |salt|
@@ -17,7 +17,7 @@ module Devise
17
17
  self.password ||= ''
18
18
  errors.delete(:password)
19
19
  validate_password_content_for(:password)
20
- errors[:password].count.zero?
20
+ errors[:password].none?
21
21
  end
22
22
 
23
23
  def validate_password_confirmation_content
@@ -25,7 +25,7 @@ module Devise
25
25
 
26
26
  errors.delete(:password_confirmation)
27
27
  validate_password_content_for(:password_confirmation)
28
- errors[:password_confirmation].count.zero?
28
+ errors[:password_confirmation].none?
29
29
  end
30
30
 
31
31
  def validate_password_confirmation
@@ -35,7 +35,7 @@ module Devise
35
35
  human_attribute_name = self.class.human_attribute_name(:password)
36
36
  errors.add(:password_confirmation, :confirmation, attribute: human_attribute_name)
37
37
  end
38
- errors[:password_confirmation].count.zero?
38
+ errors[:password_confirmation].none?
39
39
  end
40
40
 
41
41
  def validate_password_content_for(attr)
@@ -20,15 +20,15 @@ module Devise
20
20
  def before_regular_update_initialized
21
21
  return if self.class.respond_to?(:password_previously_used_count)
22
22
 
23
- raise ConfigurationError, <<-ERROR.strip_heredoc
23
+ raise ConfigurationError, <<~ERROR
24
24
 
25
- The password_requires_regular_updates module depends on the
26
- password_disallows_frequent_reuse module. Verify that you have
27
- added both modules to your model, for example:
25
+ The password_requires_regular_updates module depends on the
26
+ password_disallows_frequent_reuse module. Verify that you have
27
+ added both modules to your model, for example:
28
28
 
29
- devise :database_authenticatable, :registerable,
30
- :password_disallows_frequent_reuse,
31
- :password_requires_regular_updates
29
+ devise :database_authenticatable, :registerable,
30
+ :password_disallows_frequent_reuse,
31
+ :password_requires_regular_updates
32
32
  ERROR
33
33
  end
34
34
 
@@ -3,7 +3,7 @@ module Devise
3
3
  class PreviousPassword < ::ActiveRecord::Base
4
4
  self.table_name = 'previous_passwords'
5
5
  belongs_to :user
6
- default_scope -> { order(id: :desc) }
6
+ default_scope -> { order(created_at: :desc) }
7
7
  validates :user_id, presence: true
8
8
  validates :salt, presence: true
9
9
  validates :encrypted_password, presence: true
@@ -1,5 +1,5 @@
1
1
  module Devise
2
2
  module SecurePassword
3
- VERSION = '2.0.1'.freeze
3
+ VERSION = '2.2.0'.freeze
4
4
  end
5
5
  end
@@ -18,7 +18,7 @@ Devise.setup do |config|
18
18
  # The number of numbers (0-9) required in a password:
19
19
  # config.password_required_number_count = 1
20
20
 
21
- # The number of special characters (!@#$%^&*()_+-=[]{}|') required in a password:
21
+ # The number of special characters ( !@#$%^&*()_+-=[]{}|'"/\.,`<>:;?~) required in a password:
22
22
  # config.password_required_special_character_count = 1
23
23
 
24
24
  # ==> Configuration for the Devise Secure Password extension
@@ -11,7 +11,7 @@ module Support
11
11
  uppercase: characters_to_dictionary(('A'..'Z').to_a),
12
12
  lowercase: characters_to_dictionary(('a'..'z').to_a),
13
13
  number: characters_to_dictionary(('0'..'9').to_a),
14
- special: characters_to_dictionary(%w(! @ # $ % ^ & * ( ) _ + - = [ ] { } | ')),
14
+ special: characters_to_dictionary([' ', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '-', '=', '[', ']', '{', '}', '|', '"', '/', '\\', '.', ',', '`', '<', '>', ':', ';', '?', '~', "'"]),
15
15
  unknown: {}
16
16
  }
17
17
  end
Binary file
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: devise-secure_password
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.1
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mark Eissler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-04 00:00:00.000000000 Z
11
+ date: 2025-08-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: devise
@@ -39,7 +39,7 @@ dependencies:
39
39
  version: 5.0.0
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
- version: 7.0.0
42
+ version: 9.0.0
43
43
  type: :runtime
44
44
  prerelease: false
45
45
  version_requirements: !ruby/object:Gem::Requirement
@@ -49,7 +49,7 @@ dependencies:
49
49
  version: 5.0.0
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
- version: 7.0.0
52
+ version: 9.0.0
53
53
  - !ruby/object:Gem::Dependency
54
54
  name: bundler
55
55
  requirement: !ruby/object:Gem::Requirement
@@ -154,14 +154,14 @@ dependencies:
154
154
  requirements:
155
155
  - - ">="
156
156
  - !ruby/object:Gem::Version
157
- version: 5.2.0
157
+ version: '7.0'
158
158
  type: :development
159
159
  prerelease: false
160
160
  version_requirements: !ruby/object:Gem::Requirement
161
161
  requirements:
162
162
  - - ">="
163
163
  - !ruby/object:Gem::Version
164
- version: 5.2.0
164
+ version: '7.0'
165
165
  - !ruby/object:Gem::Dependency
166
166
  name: rake
167
167
  requirement: !ruby/object:Gem::Requirement
@@ -322,14 +322,14 @@ dependencies:
322
322
  requirements:
323
323
  - - ">="
324
324
  - !ruby/object:Gem::Version
325
- version: 1.3.13
325
+ version: 1.7.0
326
326
  type: :development
327
327
  prerelease: false
328
328
  version_requirements: !ruby/object:Gem::Requirement
329
329
  requirements:
330
330
  - - ">="
331
331
  - !ruby/object:Gem::Version
332
- version: 1.3.13
332
+ version: 1.7.0
333
333
  description: Adds configurable password policy enforcement to devise.
334
334
  email:
335
335
  - mark.eissler@valimail.com
@@ -353,10 +353,8 @@ files:
353
353
  - "./config/locales/en.yml"
354
354
  - "./devise-secure_password.gemspec"
355
355
  - "./docker-entrypoint.sh"
356
- - "./gemfiles/rails_6_0.gemfile"
357
- - "./gemfiles/rails_6_0.gemfile.lock"
358
- - "./gemfiles/rails_6_1.gemfile"
359
- - "./gemfiles/rails_6_1.gemfile.lock"
356
+ - "./gemfiles/rails_7_0.gemfile"
357
+ - "./gemfiles/rails_8_0.gemfile"
360
358
  - "./lib/devise/secure_password.rb"
361
359
  - "./lib/devise/secure_password/controllers/devise_helpers.rb"
362
360
  - "./lib/devise/secure_password/controllers/helpers.rb"
@@ -372,12 +370,13 @@ files:
372
370
  - "./lib/generators/devise/templates/README.txt"
373
371
  - "./lib/generators/devise/templates/secure_password.rb"
374
372
  - "./lib/support/string/character_counter.rb"
375
- - "./pkg/devise-secure_password-2.0.0.gem"
376
373
  - "./pkg/devise-secure_password-2.0.1.gem"
374
+ - "./pkg/devise-secure_password-2.1.0.gem"
377
375
  homepage: https://github.com/valimail/devise-secure_password
378
376
  licenses:
379
377
  - MIT
380
- metadata: {}
378
+ metadata:
379
+ rubygems_mfa_required: 'true'
381
380
  post_install_message:
382
381
  rdoc_options: []
383
382
  require_paths:
@@ -386,14 +385,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
386
385
  requirements:
387
386
  - - ">="
388
387
  - !ruby/object:Gem::Version
389
- version: '2.7'
388
+ version: '3.2'
390
389
  required_rubygems_version: !ruby/object:Gem::Requirement
391
390
  requirements:
392
391
  - - ">="
393
392
  - !ruby/object:Gem::Version
394
393
  version: '0'
395
394
  requirements: []
396
- rubygems_version: 3.2.16
395
+ rubygems_version: 3.5.11
397
396
  signing_key:
398
397
  specification_version: 4
399
398
  summary: A devise password policy enforcement extension.
@@ -1,57 +0,0 @@
1
- source 'https://rubygems.org'
2
- git_source(:github) { |repo| "https://github.com/#{repo}.git" }
3
-
4
- ENV['RAILS_TARGET'] ||= '6.0'
5
-
6
- gemspec path: '../'
7
-
8
- # Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
9
- gem 'rails', '~> 6.0.3', '>= 6.0.3.6'
10
- # Use sqlite3 as the database for Active Record
11
- gem 'sqlite3', '~> 1.4'
12
- # Use Puma as the app server
13
- gem 'puma', '~> 4.1'
14
- # Use SCSS for stylesheets
15
- gem 'sass-rails', '>= 6'
16
- # Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker
17
- gem 'webpacker', '~> 4.0'
18
- # Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
19
- gem 'turbolinks', '~> 5'
20
- # Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
21
- gem 'jbuilder', '~> 2.7'
22
- # Use Redis adapter to run Action Cable in production
23
- # gem 'redis', '~> 4.0'
24
- # Use Active Model has_secure_password
25
- # gem 'bcrypt', '~> 3.1.7'
26
-
27
- # Use Active Storage variant
28
- # gem 'image_processing', '~> 1.2'
29
-
30
- # Reduces boot times through caching; required in config/boot.rb
31
- gem 'bootsnap', '>= 1.4.2', require: false
32
-
33
- group :development, :test do
34
- # Call 'byebug' anywhere in the code to stop execution and get a debugger console
35
- gem 'byebug', platforms: %i(mri mingw x64_mingw)
36
- end
37
-
38
- group :development do
39
- # Access an interactive console on exception pages or by calling 'console' anywhere in the code.
40
- gem 'listen', '~> 3.2'
41
- gem 'web-console', '>= 3.3.0'
42
- end
43
-
44
- group :test do
45
- # Adds support for Capybara system testing and selenium driver
46
- gem 'capybara', '>= 2.15'
47
- gem 'codecov', require: false
48
- gem 'selenium-webdriver'
49
- gem 'shoulda-matchers'
50
- # Easy installation and use of web drivers to run system tests with browsers
51
- gem 'webdrivers'
52
- end
53
-
54
- # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
55
- gem 'tzinfo-data', platforms: %i(mingw mswin x64_mingw jruby)
56
-
57
- gem 'webrick', '~> 1.7'