Просмотр исходного кода

Fixes #4159 - Allow very long email address

Mantas 2 лет назад
Родитель
Сommit
58e75b02f3

+ 6 - 0
config/initializers/email_address_validator.rb

@@ -6,7 +6,13 @@ Rails.application.config.after_initialize do
     local_encoding:   :unicode,
     host_local:       true,
     host_fqdn:        false,
+    address_size:     3..250, # EmailAdress#email database field is limited to 250 characters, User#email is 255
     host_auto_append: false
   )
+
+  # Allow emails with very long local part. For example Google Docs notifications emails
+  EmailAddressValidator::Local.send(:remove_const, :STANDARD_MAX_SIZE)
+  EmailAddressValidator::Local.const_set(:STANDARD_MAX_SIZE, 200)
+
   EmailAddressValidator::Config.providers.clear
 end

+ 14 - 2
spec/lib/email_address_validation_spec.rb

@@ -47,14 +47,26 @@ RSpec.describe EmailAddressValidation do
       include_examples 'email address validity', valid: true, check_mx: false
     end
 
+    describe 'when very long local part' do
+      let(:email_address) { 'd+aorgprcb5rboeldeti12rh-4fs92usdgsdzkw1xfppexrzd_efcxum1rxchmhjlplidc99k0141zduz2rmsvi2boiep-8b3-xh1dtbdvqjqn7lhguq6zh4nza8jmc2pv3thujtjatgtk@docs.google.com' }
+
+      include_examples 'email address validity', valid: true, check_mx: false
+    end
+
     describe 'when max length' do
-      let(:email_address) { 'trulyverylongpastasdomainnamehere.trulyverylongpastasdomainnamee@trulyverylongpastasdomainnameheredoublethatloremipsumnamecodena.trulyverylongpastasdomainnameheredoublethatloremipsumnamecodena.trulyverylongpastasdomainnameheredoublethatloremipsumname.com' }
+      let(:email_address) { 'trulyverylongpastasdomainnamehere.trulyverylongpastasdomain@trulyverylongpastasdomainnameheredoublethatloremipsumnamecodena.trulyverylongpastasdomainnameheredoublethatloremipsumnamecodena.trulyverylongpastasdomainnameheredoublethatloremipsumname.com' }
 
       include_examples 'email address validity', valid: true, check_mx: false
     end
 
+    describe 'when over max length' do
+      let(:email_address) { 'trulyverylongpastasdomainnamehere.trulyverylongpastasdomainnamee@trulyverylongpastasdomainnameheredoublethatloremipsumnamecodena.trulyverylongpastasdomainnameheredoublethatloremipsumnamecodena.trulyverylongpastasdomainnameheredoublethatloremipsumname.com' }
+
+      include_examples 'email address validity', valid: false, check_mx: false
+    end
+
     describe 'when max length with unicode characters' do
-      let(:email_address) { 'trulyverylongpaštasdomainnamehere.trulyverylongpaštasdomainnamee@trulyverylongpaštasdomainnameheredoublethatloremipsumnamecodena.trulyverylongpaštasdomainnameheredoublethatloremipsumnamecodena.trulyverylongpaštasdomainnameheredob.com' }
+      let(:email_address) { 'trulyverylongpaštasdomainnamehere.trulyverylongpaštasdomain@trulyverylongpaštasdomainnameheredoublethatloremipsumnamecodena.trulyverylongpaštasdomainnameheredoublethatloremipsumnamecodena.trulyverylongpaštasdomainnameheredob.com' }
 
       include_examples 'email address validity', valid: true, check_mx: false
     end