-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
end
+ def domain_exists(domain)
+ domains = list_domains()
+ return domains.include?(domain)
+ 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
+ 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.