]>
gitweb.michael.orlitzky.com - mailshears.git/blob - lib/common/dovecot_plugin.rb
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_account(account
)
24 account_path
= get_account_path(account
)
26 rescue NonexistentAccountError
=> 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_account_path(account
)
49 # Return the filesystem path of this account's mailbox.
50 # Only works if the account exists!
51 if not account
.include?('@')
52 msg
= "#{account}: Accounts must contain an '@' symbol."
53 raise InvalidAccountError
.new(msg
)
56 account_parts
= account
.split('@')
57 user_part
= account_parts
[0]
58 domain_part
= account_parts
[1]
61 domain_path
= get_domain_path(domain_part
)
62 rescue NonexistentDomainError
63 raise NonexistentAccountError
.new(account
)
66 account_path
= File
.join(domain_path
, user_part
)
68 if File
.directory
?(account_path
)
71 raise NonexistentAccountError
.new(account
)
77 return Filesystem
.get_subdirs(@domain_root)
80 def list_domains_users(domains
)
83 domains
.each
do |domain
|
85 # Throws a NonexistentDomainError if the domain's path
86 # doesn't exist on the filesystem. In this case, we want
87 # to report zero accounts.
88 domain_path
= get_domain_path(domain
)
89 usernames
= Filesystem
.get_subdirs(domain_path
)
91 usernames
.each
do |username
|
92 accounts
<< "#{username}@#{domain}"
94 rescue NonexistentDomainError
104 domains
= list_domains()
105 users
= list_domains_users(domains
)