]> gitweb.michael.orlitzky.com - mailshears.git/blobdiff - lib/common/dovecot_plugin.rb
Stop pretending that we'll ever work with another DBMS.
[mailshears.git] / lib / common / dovecot_plugin.rb
index 02e92957cf6994df0e01ebc1a67fa4d07ffbe591..fa61d5367b593d959c1839de143f1f0c767490db 100644 (file)
@@ -1,5 +1,8 @@
-require 'common/plugin'
+require 'common/domain'
 require 'common/filesystem'
+require 'common/plugin'
+require 'common/user'
+
 
 module DovecotPlugin
   # Code that all Dovecot plugins (Prune, Rm, Mv...) will
@@ -7,25 +10,15 @@ module DovecotPlugin
   include Plugin
 
   def initialize(cfg)
-    @domain_root = cfg.mail_root
+    @domain_root = cfg.dovecot_mail_root
   end
 
   def describe_domain(domain)
-    begin
-      domain_path = get_domain_path(domain)
-      return domain_path
-    rescue NonexistentDomainError => e
-      return "Doesn't exist: #{e.to_s}"
-    end
+    return get_domain_path(domain)
   end
 
   def describe_user(user)
-    begin
-      user_path = get_user_path(user)
-      return user_path
-    rescue NonexistentUserError => e
-      return "Doesn't exist: #{e.to_s}"
-    end
+    return get_user_path(user)
   end
 
 
@@ -35,46 +28,19 @@ module DovecotPlugin
     # Return the filesystem path for the given domain.
     # That is, the directory where its mail is stored.
     # Only works if the domain directory exists!
-    domain_path = File.join(@domain_root, domain)
-
-    if File.directory?(domain_path)
-      return domain_path
-    else
-      raise NonexistentDomainError.new(domain)
-    end
+    return File.join(@domain_root, domain.to_s())
   end
 
 
   def get_user_path(user)
     # Return the filesystem path of this user's mailbox.
-    # Only works if the user exists!
-    if not user.include?('@')
-      msg = "#{user}: Users must contain an '@' symbol."
-      raise InvalidUserError.new(msg)
-    end
-
-    user_parts = user.split('@')
-    local_part = user_parts[0]
-    domain_part = user_parts[1]
-
-    begin
-      domain_path = get_domain_path(domain_part)
-    rescue NonexistentDomainError
-      raise NonexistentUserError.new(user)
-    end
-
-    user_path = File.join(domain_path, local_part)
-
-    if File.directory?(user_path)
-      return user_path
-    else
-      raise NonexistentUserError.new(user)
-    end
+    domain_path = get_domain_path(user.domain())
+    return File.join(domain_path, user.localpart())
   end
 
 
   def list_domains()
-    return Filesystem.get_subdirs(@domain_root)
+    return Filesystem.get_subdirs(@domain_root).map{ |d| Domain.new(d) }
   end
 
   def list_domains_users(domains)
@@ -89,7 +55,7 @@ module DovecotPlugin
         usernames = Filesystem.get_subdirs(domain_path)
 
         usernames.each do |username|
-          users << "#{username}@#{domain}"
+          users << User.new("#{username}@#{domain}")
         end
       rescue NonexistentDomainError
         # Party hard.