module DovecotPlugin

Code that all Dovecot plugins ({DovecotPrune}, {DovecotRm}, and {DovecotMv}) will share.

Public Class Methods

new(cfg) click to toggle source

Initialize this Dovecot {Plugin} with values in cfg.

@param cfg [Configuration] the configuration for this plugin.

# File lib/common/dovecot_plugin.rb, line 19
def initialize(cfg)
  @domain_root = cfg.dovecot_mail_root
end

Public Instance Methods

describe_domain(domain) click to toggle source

Describe the given Dovecot domain by its filesystem path. The domain need not exist to obtain its path.

@param domain [Domain] the {Domain} object whose description we want.

@return [String] a String giving the path under which this domain's

mailboxes would reside on the filesystem.
# File lib/common/dovecot_plugin.rb, line 31
def describe_domain(domain)
  return get_domain_path(domain)
end
describe_user(user) click to toggle source

Describe the given Dovecot user by its filesystem mailbox path. The user need not exist to obtain its mailbox path.

@param user [User] the {User} object whose description we want.

@return [String] a String giving the path where this user's

mailbox would reside on the filesystem.
# File lib/common/dovecot_plugin.rb, line 44
def describe_user(user)
  return get_user_path(user)
end

Protected Instance Methods

get_domain_path(domain) click to toggle source

Return the filesystem path for the given {Domain} object.

@param domain [Domain] the {Domain} whose path we want.

@return [String] the filesystem path where this domain's mail

would be located.
# File lib/common/dovecot_plugin.rb, line 58
def get_domain_path(domain)
  return File.join(@domain_root, domain.to_s())
end
get_user_path(user) click to toggle source

Return the filesystem path of this {User}'s mailbox.

@param user [User] the {User} whose mailbox path we want.

@return [String] the filesystem path where this user's mail

would be located.
# File lib/common/dovecot_plugin.rb, line 70
def get_user_path(user)
  domain_path = get_domain_path(user.domain())
  return File.join(domain_path, user.localpart())
end
list_domains() click to toggle source

Produce a list of domains that exist in the Dovecot mailstore.

@return [Array<Domain>] an array of {Domain} objects that have

corresponding directories within the Dovecot mailstore.
# File lib/common/dovecot_plugin.rb, line 81
def list_domains()
  return Filesystem.get_subdirs(@domain_root).map{ |d| Domain.new(d) }
end
list_domains_users(domains) click to toggle source

Produce a list of users belonging to the given domains in the Dovecot mailstore.

@param domains [Array<Domain>] an array of {Domain} objects whose

users we'd like to find.

@return [Array<User>] an array of {User} objects that have

corresponding directories within the Dovecot mailstore belonging
to the specified *domains*.
# File lib/common/dovecot_plugin.rb, line 96
def list_domains_users(domains)
  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 users.
      domain_path = get_domain_path(domain)
      usernames = Filesystem.get_subdirs(domain_path)

      usernames.each do |username|
        users << User.new("#{username}@#{domain}")
      end
    rescue NonexistentDomainError
      # Party hard.
    end
  end

  return users
end
list_users() click to toggle source

Produce a list of all users in the Dovecot mailstore.

@return [Array<User>] a list of users who have mailbox directories

within the Dovecot mailstore.
# File lib/common/dovecot_plugin.rb, line 124
def list_users()
  domains = list_domains()
  users = list_domains_users(domains)
  return users
end