]> gitweb.michael.orlitzky.com - mailshears.git/blobdiff - lib/rm/plugins/dovecot_mailstore.rb
Move domain removal into the plugins.
[mailshears.git] / lib / rm / plugins / dovecot_mailstore.rb
index 7c2f02166fe26d5dc4c89da748547149e1685e6b..72c80c83537559bef358868dc9fc57c0dc905890 100644 (file)
-# Needed for rm_rf.
+# Needed for rm_r.
 require 'fileutils'
 
-require 'common/filesystem'
-require 'common/mailstore'
-require 'common/plugin'
+require 'common/dovecot_mailstore_plugin'
 require 'rm/rm_plugin'
 
-class DovecotMailstore < Mailstore
+class DovecotMailstoreRm
 
-  include Plugin
+  include DovecotMailstorePlugin
   include RmPlugin
 
-  def initialize
-    cfg = Configuration.new()
-    @domain_root = cfg.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
-  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
-  end
 
   def delete_domain(domain)
     domain_path = self.get_domain_path(domain)
-    FileUtils.rm_rf(domain_path)
+    FileUtils.rm_r(domain_path)
   end
 
   def delete_account(account)
     account_path = self.get_account_path(account)
-    FileUtils.rm_rf(account_path)
-  end
-
-  def get_leftover_domains(db_domains)
-    # Get the list of domains according to the filesystem.
-    fs_domains = self.get_domains_from_filesystem()
-
-    # Return the list of domains on the filesystem that aren't in the DB.
-    return (fs_domains - db_domains)
-  end
-
-  def get_leftover_accounts(db_accounts)
-    # Get the list of accounts according to the filesystem.
-    fs_domains = self.get_domains_from_filesystem()
-    fs_accounts = self.get_accounts_from_filesystem(fs_domains)
-
-    # And return the accounts on the filesystem that aren't in the DB.
-    return (fs_accounts - db_accounts)
-  end
-
-  protected;
-
-  def get_domains_from_filesystem()
-    return Filesystem.get_subdirs(@domain_root)
-  end
-
-  def get_accounts_from_filesystem(domains)
-    accounts = []
-
-    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.
-        domain_path = get_domain_path(domain)
-        usernames = Filesystem.get_subdirs(domain_path)
-
-        usernames.each do |username|
-          accounts << "#{username}@#{domain}"
-        end
-      rescue NonexistentDomainError
-        # Party hard.
-      end
-    end
-
-    return accounts
-  end
-
-
-  def get_domain_path(domain)
-    # 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
-  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?('@')
-      raise InvalidAccountError.new("#{account}: Accounts must contain an '@' symbol.")
-    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(account)
-    end
+    FileUtils.rm_r(account_path)
   end
 
 end