]> gitweb.michael.orlitzky.com - mailshears.git/blobdiff - lib/common/dovecot_plugin.rb
Use semantic bound on pg library.
[mailshears.git] / lib / common / dovecot_plugin.rb
index ab5a40930400af057229ded188d40516cc88b866..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_account(account)
-    begin
-      account_path = get_account_path(account)
-      return account_path
-    rescue NonexistentAccountError => e
-      return "Doesn't exist: #{e.to_s}"
-    end
+  def describe_user(user)
+    return get_user_path(user)
   end
 
 
@@ -35,68 +28,41 @@ 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_account_path(account)
-    # Return the filesystem path of this account's mailbox.
-    # Only works if the account exists!
-    if not account.include?('@')
-      msg = "#{account}: Accounts must contain an '@' symbol."
-      raise InvalidAccountError.new(msg)
-    end
-
-    account_parts = account.split('@')
-    user_part = account_parts[0]
-    domain_part = account_parts[1]
-
-    begin
-      domain_path = get_domain_path(domain_part)
-    rescue NonexistentDomainError
-      raise NonexistentAccountError.new(account)
-    end
-
-    account_path = File.join(domain_path, user_part)
-
-    if File.directory?(account_path)
-      return account_path
-    else
-      raise NonexistentAccountError.new(account)
-    end
+  def get_user_path(user)
+    # Return the filesystem path of this user's mailbox.
+    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)
-    accounts = []
+    users = []
 
     domains.each do |domain|
       begin
         # Throws a NonexistentDomainError if the domain's path
         # doesn't exist on the filesystem. In this case, we want
-        # to report zero accounts.
+        # to report zero users.
         domain_path = get_domain_path(domain)
         usernames = Filesystem.get_subdirs(domain_path)
 
         usernames.each do |username|
-          accounts << "#{username}@#{domain}"
+          users << User.new("#{username}@#{domain}")
         end
       rescue NonexistentDomainError
         # Party hard.
       end
     end
 
-    return accounts
+    return users
   end