-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_user(user)
- begin
- user_path = get_user_path(user)
- return user_path
- rescue NonexistentUserError => e
- return "Doesn't exist: #{e.to_s}"
- end
+ 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_user_path(user, existence_check = true)
- # Return the filesystem path of this user's mailbox. With
- # existence_check = true, it only works if the user exists!
- # We always require that the domain exists.
- if not user.include?('@')
- msg = "#{user}: Users must contain an '@' symbol."
- raise InvalidUserError.new(msg)
- end
-
- user_parts = user.split('@')
- local_part = user_parts[0]
- domain_part = user_parts[1]
-
- begin
- domain_path = get_domain_path(domain_part)
- rescue NonexistentDomainError
- raise NonexistentUserError.new(user)
- end
-
- user_path = File.join(domain_path, local_part)
-
- return user_path if not existence_check
-
- if File.directory?(user_path)
- return user_path
- else
- raise NonexistentUserError.new(user)
- 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)
usernames = Filesystem.get_subdirs(domain_path)
usernames.each do |username|
- users << "#{username}@#{domain}"
+ users << User.new("#{username}@#{domain}")
end
rescue NonexistentDomainError
# Party hard.