Files
danbooru/script/fixes/119_renormalize_emails.rb
evazion 0cfd0ff436 emails: add fix script to renormalize email addresses.
Whenever the email address normalization procedure changes, the
`normalized_address` column of the email address table must be updated.
This is normally when the list of canonical domain mappings changes.

Renormalizing addresses may also require deleting duplicates.
2022-10-03 02:55:30 -05:00

26 lines
1009 B
Ruby
Executable File

#!/usr/bin/env ruby
require_relative "base"
with_confirmation do
emails = EmailAddress.find_each do |email|
normalized_address = EmailValidator.normalize(email.address)
if email.normalized_address != normalized_address
dupe_emails = EmailAddress.where(normalized_address: normalized_address).joins(:user).to_a
if dupe_emails.present?
dupe_emails += [email]
dupe_emails.sort_by! { |dupe_email| [-dupe_email.user.last_logged_in_at.to_i, -dupe_email.user.id] }
dupe_emails => [keep, *dupes]
puts "#{"#{keep.address} (#{keep.user.name}##{keep.user.id})".ljust(60, " ")} DELETE #{dupes.map { |dupe| "#{dupe.address} (#{dupe.user.name}##{dupe.user.id})" }.join(" ")}"
dupes.each(&:destroy) if ENV.fetch("FIX", "false").truthy?
else
puts "#{email.normalized_address.ljust(60, " ")} #{normalized_address}"
email.update!(normalized_address: normalized_address) if ENV.fetch("FIX", false).to_s.truthy?
end
end
end
end