mirror of
https://github.com/meineerde/redmine.git
synced 2026-01-31 19:47: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:
parent
c1fa75386c
commit
4517a4684e
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user