minimalist_authentication 3.2.0 → 3.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ba64bc8499dedd0f4fe8dfca813cc0c21e2d32759bd3b3b4dd8aac3c0e77605a
4
- data.tar.gz: 566e4b373c274fd7843469d4d225560baf877aabde97658b1aa5a66f3c97f65e
3
+ metadata.gz: 4b81e23298baa784d92be34aa1b6b372f585c5ea8bba51d953a85ee39ec44db5
4
+ data.tar.gz: 2cad820418a3869931fad968063d3f97e7302686b1fd534daf3a1c9f0d5dda15
5
5
  SHA512:
6
- metadata.gz: 149c5f1eb8a13319ba9d4848a7851107433d96081ed9a1bf01e43cba0366cb1e873aaa47c10eefed29aba9b973bf53076ecefd6d7b6835bb1a9300a4db8813fc
7
- data.tar.gz: 51aae04db4c7bcdf4a26009fc1278aa716aea12d95624fe74ffd21fb9d52e0c901ec78d15751df92c2ce2882544a54b80f623e72a53703e1a67b88072662aed9
6
+ metadata.gz: 3b5cd0f9f672f3084884b5385d333705d21d9835738e0b79ba8bc10853bc8bf5cbec88451ff07db26844a601fc69e685fe3f5e3961c5dbcd3616033d9cfe781a
7
+ data.tar.gz: 183194ef85c0ed224f9550c95779ecc5d37b6437ea0b05cd2e2cc32c43785d6718639bc1e4b74997df0fedf93432366e7240bc1e1d6b440008210ce64f277134
@@ -14,7 +14,7 @@ class PasswordsController < ApplicationController
14
14
 
15
15
  # Update user's password
16
16
  def update
17
- if user.update(password_params.merge(password_required: true))
17
+ if user.update(password_params)
18
18
  redirect_to new_session_path, notice: t(".notice")
19
19
  else
20
20
  render :edit, status: :unprocessable_entity
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ class PasswordExclusivityValidator < ActiveModel::EachValidator
4
+ # Ensure password does not match username or email.
5
+ def validate_each(record, attribute, value)
6
+ %w[username email].each do |field|
7
+ record.errors.add(attribute, "can not match #{field}") if value.casecmp?(record.try(field))
8
+ end
9
+ end
10
+ end
@@ -15,9 +15,6 @@ module MinimalistAuthentication
15
15
  password_salt.last(10)
16
16
  end
17
17
 
18
- # Force validations for a blank password.
19
- attribute :password_required, :boolean, default: false
20
-
21
18
  # Email validations
22
19
  validates(
23
20
  :email,
@@ -29,10 +26,13 @@ module MinimalistAuthentication
29
26
 
30
27
  # Password validations
31
28
  # Adds validations for minimum password length and exclusivity.
32
- # has_secure_password adds validations for presence, maximum length, confirmation,
33
- # and password_challenge.
34
- validates :password, length: { minimum: :password_minimum }, if: :validate_password?
35
- validate :password_exclusivity, if: :password?
29
+ # has_secure_password includes validations for presence, maximum length, confirmation, and password_challenge.
30
+ validates(
31
+ :password,
32
+ password_exclusivity: true,
33
+ length: { minimum: :password_minimum },
34
+ allow_blank: true
35
+ )
36
36
 
37
37
  # Active scope
38
38
  scope :active, ->(state = true) { where(active: state) }
@@ -74,15 +74,9 @@ module MinimalistAuthentication
74
74
  active?
75
75
  end
76
76
 
77
- # Remove the has_secure_password password blank error if password is not required.
77
+ # Remove the has_secure_password password blank error if user is inactive.
78
78
  def errors
79
- super.tap { |errors| errors.delete(:password, :blank) unless validate_password? }
80
- end
81
-
82
- # Returns true if the user is not active.
83
- def inactive?
84
- MinimalistAuthentication.deprecator.warn("Calling #inactive? is deprecated.")
85
- !active?
79
+ super.tap { |errors| errors.delete(:password, :blank) if inactive? }
86
80
  end
87
81
 
88
82
  # Returns true if password matches the hashed_password, otherwise returns false.
@@ -98,37 +92,23 @@ module MinimalistAuthentication
98
92
  email == GUEST_USER_EMAIL
99
93
  end
100
94
 
95
+ # Returns true if the user is not active.
96
+ def inactive?
97
+ !active?
98
+ end
99
+
101
100
  # Sets #last_logged_in_at to the current time without updating the updated_at timestamp.
102
101
  def logged_in
103
102
  update_column(:last_logged_in_at, Time.current)
104
103
  end
105
104
 
106
- # Checks for password presence
107
- def password?
108
- password.present?
109
- end
110
-
111
105
  private
112
106
 
113
- # Ensure password does not match username or email.
114
- def password_exclusivity
115
- %w[username email].each do |field|
116
- errors.add(:password, "can not match #{field}") if password.casecmp?(try(field))
117
- end
118
- end
119
-
120
107
  # Return true if the user matches the owner of the provided token.
121
108
  def token_owner?(purpose, token)
122
109
  self.class.find_by_token_for(purpose, token) == self
123
110
  end
124
111
 
125
- # Require password for active users that either do no have a password hash
126
- # stored OR are attempting to set a new password. Set **password_required**
127
- # to true to force validations even when the password field is blank.
128
- def validate_password?
129
- active? && (password_digest.blank? || password? || password_required?)
130
- end
131
-
132
112
  # Validate email for all users.
133
113
  # Applications can turn off email validation by setting the validate_email
134
114
  # configuration attribute to false.
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MinimalistAuthentication
4
- VERSION = "3.2.0"
4
+ VERSION = "3.2.1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minimalist_authentication
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
4
+ version: 3.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Aaron Baldwin
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2024-11-21 00:00:00.000000000 Z
12
+ date: 2024-11-22 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bcrypt
@@ -63,6 +63,7 @@ files:
63
63
  - app/helpers/minimalist_authentication/application_helper.rb
64
64
  - app/mailers/application_mailer.rb
65
65
  - app/mailers/minimalist_authentication_mailer.rb
66
+ - app/validators/password_exclusivity_validator.rb
66
67
  - app/views/email_verifications/new.html.erb
67
68
  - app/views/email_verifications/show.html.erb
68
69
  - app/views/emails/edit.html.erb