+require 'src/errors'
require 'src/filesystem'
require 'src/mailstore'
accounts = []
domains.each do |domain|
- domain_path = get_domain_path(domain)
-
- if File.directory?(domain_path)
- # If domain_path isn't a directory, maybe the
- # domain folder doesn't exist? In that case, I
- # guess we want to report zero accounts.
+ 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 => e
+ # Party hard.
end
end
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)
- return domain_path
+
+ if File.directory?(domain_path)
+ return domain_path
+ else
+ raise NonexistentDomainError.new(domain_path)
+ 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]
domain_path = get_domain_path(domain_part)
account_path = File.join(domain_path, user_part)
+
+ if File.directory?(account_path)
+ return account_path
+ else
+ raise NonexistentAccountError.new(account_path)
+ end
end
end