1
0
mirror of https://github.com/meineerde/redmine.git synced 2026-01-31 11:37:14 +00:00

Add support for IDN (internationalized domain name) email addresses in user accounts (#29208).

Patch by Go MAEDA (@maeda).


git-svn-id: https://svn.redmine.org/redmine/trunk@22667 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
Go MAEDA 2024-02-01 08:46:41 +00:00
parent c1fa75386c
commit 4517a4684e
2 changed files with 17 additions and 1 deletions

View File

@ -39,7 +39,17 @@ class EmailAddress < ApplicationRecord
safe_attributes 'address'
def address=(arg)
write_attribute(:address, arg.to_s.strip)
normalized_address = arg.to_s.strip
# Convert internationalized domain name (IDN) to Punycode
# e.g. 'marie@société.example' => 'marie@xn--socit-esab.example'
local_part, _at, domain = normalized_address.partition('@')
if domain.present?
ascii_domain = Addressable::IDNA.to_ascii(domain)
normalized_address = "#{local_part}@#{ascii_domain}"
end
write_attribute(:address, normalized_address)
end
def destroy

View File

@ -68,4 +68,10 @@ class EmailAddressTest < ActiveSupport::TestCase
def test_should_reject_invalid_email
assert_not EmailAddress.new(address: 'invalid,email@example.com').valid?
end
def test_should_normalize_idn_email_address
email = EmailAddress.new(address: 'marie@société.example')
assert_equal 'marie@xn--socit-esab.example', email.address
assert email.valid?
end
end