-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
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
# 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