diff options
| author | Azul <azul@riseup.net> | 2016-07-05 09:27:35 +0200 | 
|---|---|---|
| committer | Azul <azul@riseup.net> | 2016-07-05 09:27:35 +0200 | 
| commit | 8666b74ce75856421a87d25452aafaa9301de3fd (patch) | |
| tree | 38f4f1b2d54c8c4ff6b1bc07616cadff1271de4b /lib/local_email.rb | |
| parent | 949e17c7c30c5b179ba6545782ae995178481f78 (diff) | |
| parent | bf77b0b1f53753ba239ef8c2668bc76603cd96e5 (diff) | |
Merge remote-tracking branch 'pr/225' into develop
Fix install issue and update the documentation
During the rails 4 update db:migrate stopped working because the way couchrest loads all models broke. This includes a fix and also updates the install instructions.
I tried to separate advanced topics in development from the others by marking the sections (advanced) in doc/DEVELOP.md
Diffstat (limited to 'lib/local_email.rb')
| -rw-r--r-- | lib/local_email.rb | 67 | 
1 files changed, 67 insertions, 0 deletions
| diff --git a/lib/local_email.rb b/lib/local_email.rb new file mode 100644 index 0000000..7c592e1 --- /dev/null +++ b/lib/local_email.rb @@ -0,0 +1,67 @@ +require 'email' +class LocalEmail < Email + +  BLACKLIST_FROM_RFC2142 = [ +    'postmaster', 'hostmaster', 'domainadmin', 'webmaster', 'www', +    'abuse', 'noc', 'security', 'usenet', 'news', 'uucp', +    'ftp', 'sales', 'marketing', 'support', 'info' +  ] + +  def self.domain +    APP_CONFIG[:domain] +  end + +  validates :email, +    :format => { +      :with => /@#{domain}\Z/i, +      :message => "needs to end in @#{domain}" +    } + +  validate :handle_allowed + +  def initialize(s) +    super +    append_domain_if_needed +  end + +  def to_key +    [handle] +  end + +  def domain +    LocalEmail.domain +  end + +  protected + +  def append_domain_if_needed +    unless self.index('@') +      self << '@' + domain +    end +  end + +  def handle_allowed +    errors.add(:handle, "is reserved.") if handle_reserved? +  end + +  def handle_reserved? +    # *ARRAY in a case statement tests if ARRAY includes the handle. +    case handle +    when *APP_CONFIG[:handle_blacklist] +      true +    when *APP_CONFIG[:handle_whitelist] +      false +    when *BLACKLIST_FROM_RFC2142 +      true +    else +      handle_in_passwd? +    end +  end + +  def handle_in_passwd? +    Etc.getpwnam(handle).present? +  rescue ArgumentError +    # handle was not found +    return false +  end +end | 
