From bdad984ace267a274b8530535503d937ba9c14e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Valim?= Date: Tue, 19 Apr 2011 14:22:14 +0200 Subject: [PATCH] Use Devise::Email::EXACT_PATTERN. --- Gemfile.lock | 2 +- lib/devise.rb | 9 ++++----- lib/devise/email.rb | 38 +++++++++++++++++++------------------- 3 files changed, 24 insertions(+), 25 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 2b5109c747..f0cea8db93 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - devise (1.3.0) + devise (1.3.1) bcrypt-ruby (~> 2.1.2) orm_adapter (~> 0.0.3) warden (~> 1.0.3) diff --git a/lib/devise.rb b/lib/devise.rb index 34a361e6e1..17be323513 100644 --- a/lib/devise.rb +++ b/lib/devise.rb @@ -10,7 +10,7 @@ module Devise autoload :PathChecker, 'devise/path_checker' autoload :Schema, 'devise/schema' autoload :TestHelpers, 'devise/test_helpers' - autoload :EmailAddressValidation, 'devise/email' + autoload :Email, 'devise/email' module Controllers autoload :Helpers, 'devise/controllers/helpers' @@ -92,12 +92,11 @@ module Strategies mattr_accessor :http_authentication_realm @@http_authentication_realm = "Application" - # Email regex used to validate email formats. Based on RFC 822 and retrieved from - # Sixarm email validation gem + # Email regex used to validate email formats. Based on RFC 822 and + # retrieved from Sixarm email validation gem # (https://github.com/SixArm/sixarm_ruby_email_address_validation). - include EmailAddressValidation mattr_accessor :email_regexp - @@email_regexp = EMAIL_ADDRESS_EXACT_PATTERN + @@email_regexp = Devise::Email::EXACT_PATTERN # Range validation for password length mattr_accessor :password_length diff --git a/lib/devise/email.rb b/lib/devise/email.rb index 3627782663..520aac7747 100644 --- a/lib/devise/email.rb +++ b/lib/devise/email.rb @@ -1,23 +1,23 @@ -# This e-mail validation regexes were retrieved from SixArm Ruby e-mail validation gem (https://github.com/SixArm/sixarm_ruby_email_address_validation) - +# This e-mail validation regexes were retrieved from SixArm Ruby +# e-mail validation gem (https://github.com/SixArm/sixarm_ruby_email_address_validation) # As said on https://github.com/SixArm/sixarm_ruby_email_address_validation/blob/master/LICENSE.txt, # we added it using Ruby license terms. -module EmailAddressValidation - - EMAIL_ADDRESS_QTEXT = Regexp.new '[^\\x0d\\x22\\x5c\\x80-\\xff]', nil, 'n' - EMAIL_ADDRESS_DTEXT = Regexp.new '[^\\x0d\\x5b-\\x5d\\x80-\\xff]', nil, 'n' - EMAIL_ADDRESS_ATOM = Regexp.new '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+', nil, 'n' - EMAIL_ADDRESS_QUOTED_PAIR = Regexp.new '\\x5c[\\x00-\\x7f]', nil, 'n' - EMAIL_ADDRESS_DOMAIN_LITERAL = Regexp.new "\\x5b(?:#{EMAIL_ADDRESS_DTEXT}|#{EMAIL_ADDRESS_QUOTED_PAIR})*\\x5d", nil, 'n' - EMAIL_ADDRESS_QUOTED_STRING = Regexp.new "\\x22(?:#{EMAIL_ADDRESS_QTEXT}|#{EMAIL_ADDRESS_QUOTED_PAIR})*\\x22", nil, 'n' - EMAIL_ADDRESS_DOMAIN_REF = EMAIL_ADDRESS_ATOM - EMAIL_ADDRESS_SUB_DOMAIN = "(?:#{EMAIL_ADDRESS_DOMAIN_REF}|#{EMAIL_ADDRESS_DOMAIN_LITERAL})" - EMAIL_ADDRESS_WORD = "(?:#{EMAIL_ADDRESS_ATOM}|#{EMAIL_ADDRESS_QUOTED_STRING})" - EMAIL_ADDRESS_DOMAIN = "#{EMAIL_ADDRESS_SUB_DOMAIN}(?:\\x2e#{EMAIL_ADDRESS_SUB_DOMAIN})*" - EMAIL_ADDRESS_LOCAL_PART = "#{EMAIL_ADDRESS_WORD}(?:\\x2e#{EMAIL_ADDRESS_WORD})*" - EMAIL_ADDRESS_SPEC = "#{EMAIL_ADDRESS_LOCAL_PART}\\x40#{EMAIL_ADDRESS_DOMAIN}" - EMAIL_ADDRESS_PATTERN = Regexp.new "#{EMAIL_ADDRESS_SPEC}", nil, 'n' - EMAIL_ADDRESS_EXACT_PATTERN = Regexp.new "\\A#{EMAIL_ADDRESS_SPEC}\\z", nil, 'n' - +module Devise + module Email + QTEXT = Regexp.new '[^\\x0d\\x22\\x5c\\x80-\\xff]', nil, 'n' + DTEXT = Regexp.new '[^\\x0d\\x5b-\\x5d\\x80-\\xff]', nil, 'n' + ATOM = Regexp.new '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+', nil, 'n' + QUOTED_PAIR = Regexp.new '\\x5c[\\x00-\\x7f]', nil, 'n' + DOMAIN_LITERAL = Regexp.new "\\x5b(?:#{DTEXT}|#{QUOTED_PAIR})*\\x5d", nil, 'n' + QUOTED_STRING = Regexp.new "\\x22(?:#{QTEXT}|#{QUOTED_PAIR})*\\x22", nil, 'n' + DOMAIN_REF = ATOM + SUB_DOMAIN = "(?:#{DOMAIN_REF}|#{DOMAIN_LITERAL})" + WORD = "(?:#{ATOM}|#{QUOTED_STRING})" + DOMAIN = "#{SUB_DOMAIN}(?:\\x2e#{SUB_DOMAIN})*" + LOCAL_PART = "#{WORD}(?:\\x2e#{WORD})*" + SPEC = "#{LOCAL_PART}\\x40#{DOMAIN}" + PATTERN = Regexp.new "#{SPEC}", nil, 'n' + EXACT_PATTERN = Regexp.new "\\A#{SPEC}\\z", nil, 'n' + end end \ No newline at end of file