]>
gitweb.michael.orlitzky.com - mailshears.git/blob - lib/common/dovecot_plugin.rb
dfd87494c797642d68614ad3ca8e0a0f5a6169ad
1 require 'common/plugin'
2 require 'common/filesystem'
5 # Code that all Dovecot plugins (Prune, Rm, Mv...) will
6 # share. That is, we implement the Plugin interface.
10 @domain_root = cfg
.mail_root
13 def describe_domain(domain
)
15 domain_path
= get_domain_path(domain
)
17 rescue NonexistentDomainError
=> e
18 return "Doesn't exist: #{e.to_s}"
22 def describe_user(user
)
24 user_path
= get_user_path(user
)
26 rescue NonexistentUserError
=> e
27 return "Doesn't exist: #{e.to_s}"
34 def get_domain_path(domain
)
35 # Return the filesystem path for the given domain.
36 # That is, the directory where its mail is stored.
37 # Only works if the domain directory exists!
38 domain_path
= File
.join(@domain_root, domain
)
40 if File
.directory
?(domain_path
)
43 raise NonexistentDomainError
.new(domain
)
48 def get_user_path(user
, existence_check
= true)
49 # Return the filesystem path of this user's mailbox. With
50 # existence_check = true, it only works if the user exists!
51 # We always require that the domain exists.
52 if not user
.include?('@')
53 msg
= "#{user}: Users must contain an '@' symbol."
54 raise InvalidUserError
.new(msg
)
57 user_parts
= user
.split('@')
58 local_part
= user_parts
[0]
59 domain_part
= user_parts
[1]
62 domain_path
= get_domain_path(domain_part
)
63 rescue NonexistentDomainError
64 raise NonexistentUserError
.new(user
)
67 user_path
= File
.join(domain_path
, local_part
)
69 return user_path
if not existence_check
71 if File
.directory
?(user_path
)
74 raise NonexistentUserError
.new(user
)
80 return Filesystem
.get_subdirs(@domain_root)
83 def list_domains_users(domains
)
86 domains
.each
do |domain
|
88 # Throws a NonexistentDomainError if the domain's path
89 # doesn't exist on the filesystem. In this case, we want
90 # to report zero users.
91 domain_path
= get_domain_path(domain
)
92 usernames
= Filesystem
.get_subdirs(domain_path
)
94 usernames
.each
do |username
|
95 users
<< "#{username}@#{domain}"
97 rescue NonexistentDomainError
107 domains
= list_domains()
108 users
= list_domains_users(domains
)