cd4fbc011c
Replace all occurrences of reverse_merge with with_defaults across the codebase. The with_defaults method provides clearer intent and better readability when setting default values for hash parameters. Changes: - app/helpers/columns_helper.rb: Update column_frame_tag method - app/models/user/email_address_changeable.rb: Update generate_email_address_change_token method - app/models/account.rb: Update create_with_owner method - app/controllers/concerns/filter_scoped.rb: Update filter_params method This refactoring maintains the same functionality while improving code clarity.
51 lines
1.4 KiB
Ruby
51 lines
1.4 KiB
Ruby
module User::EmailAddressChangeable
|
|
EMAIL_CHANGE_TOKEN_PURPOSE = "change_email_address"
|
|
EMAIL_CHANGE_TOKEN_EXPIRATION = 30.minutes
|
|
|
|
extend ActiveSupport::Concern
|
|
|
|
def change_email_address_using_token(token)
|
|
parsed_token = SignedGlobalID.parse(token, for: EMAIL_CHANGE_TOKEN_PURPOSE)
|
|
|
|
old_email_address = parsed_token&.params&.fetch("old_email_address")
|
|
new_email_address = parsed_token&.params&.fetch("new_email_address")
|
|
|
|
if parsed_token.nil? || parsed_token.find != self || identity.email_address != old_email_address
|
|
false
|
|
else
|
|
change_email_address(new_email_address)
|
|
end
|
|
end
|
|
|
|
def send_email_address_change_confirmation(new_email_address)
|
|
token = generate_email_address_change_token(
|
|
to: new_email_address,
|
|
expires_in: EMAIL_CHANGE_TOKEN_EXPIRATION
|
|
)
|
|
|
|
UserMailer.email_change_confirmation(
|
|
email_address: new_email_address,
|
|
token: token,
|
|
user: self
|
|
).deliver_later
|
|
end
|
|
|
|
def change_email_address(new_email_address)
|
|
transaction do
|
|
new_identity = Identity.find_or_create_by!(email_address: new_email_address)
|
|
update!(identity: new_identity)
|
|
end
|
|
end
|
|
|
|
private
|
|
def generate_email_address_change_token(from: identity.email_address, to:, **options)
|
|
options = options.with_defaults(
|
|
for: EMAIL_CHANGE_TOKEN_PURPOSE,
|
|
old_email_address: from,
|
|
new_email_address: to,
|
|
)
|
|
|
|
to_sgid(**options).to_s
|
|
end
|
|
end
|