X-Git-Url: http://gitweb.michael.orlitzky.com/?p=mailshears.git;a=blobdiff_plain;f=lib%2Fcommon%2Fdovecot_mailstore_plugin.rb;fp=lib%2Fcommon%2Fdovecot_mailstore_plugin.rb;h=ff901ee43417e8e7d66562763792aeb75e13eb14;hp=0000000000000000000000000000000000000000;hb=e3826d8926e11763837a591986d453e9ef5d9dec;hpb=a6ae98f0423603445b621a8eaa17443c8d590b45 diff --git a/lib/common/dovecot_mailstore_plugin.rb b/lib/common/dovecot_mailstore_plugin.rb new file mode 100644 index 0000000..ff901ee --- /dev/null +++ b/lib/common/dovecot_mailstore_plugin.rb @@ -0,0 +1,74 @@ +require 'common/plugin' + +module DovecotMailstorePlugin + # Code that all DovecotMailstore plugins (Prune, Rm, Mv...) will + # share. That is, we implement the Plugin interface. + include Plugin + + 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 + + + protected; + + 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 + end + +end