# Needed for rm_r. require 'fileutils' require 'common/filesystem' require 'common/mailstore' require 'common/dovecot_mailstore_plugin' require 'rm/rm_plugin' class DovecotMailstoreRm < Mailstore include DovecotMailstorePlugin include RmPlugin def delete_domain(domain) domain_path = self.get_domain_path(domain) FileUtils.rm_r(domain_path) end def delete_account(account) account_path = self.get_account_path(account) FileUtils.rm_r(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 end