Way too many changes to mention. The 'rm' mode works now.
[mailshears.git] / lib / rm / rm_runner.rb
1 require 'common/runner'
2
3 class RmRunner
4 include Runner
5
6 def run(plugin, *targets)
7 targets.each do |target|
8 # Why think too hard? An account has an @, a domain doesn't.
9 if target.include?('@') then
10 begin
11 account_description = plugin.describe_account(target)
12 plugin.delete_account(target)
13 report(plugin, "Removed account: #{target} (#{account_description})")
14
15 rescue NonexistentAccountError => e
16 report(plugin, "Account not found: #{e.to_s}")
17 rescue StandardError => e
18 report(plugin, "There was an error removing the account: #{e.to_s}")
19 Kernel.exit(ExitCodes::DATABASE_ERROR)
20 end
21 else
22 begin
23 # We must delete all accounts belonging to the domain first.
24 # This prevents us from leaving behind accounts. Not a
25 # problem with the mailstore, since we'll delete the domain
26 # directory anyway, but it is for the database plugins.
27 usernames = plugin.get_domain_usernames(target)
28 usernames.each { |u| run(plugin, u) }
29
30 domain_description = plugin.describe_domain(target)
31 plugin.delete_domain(target)
32 report(plugin, "Removed domain: #{target} (#{domain_description})")
33
34 rescue NonexistentAccountError => e
35 # Can happen in the usernames.each... block.
36 report(plugin, "Account not found: #{e.to_s}")
37 rescue NonexistentDomainError => e
38 report(plugin, "Domain not found: #{e.to_s}")
39 rescue StandardError => e
40 report(plugin, "There was an error removing the domain: #{e.to_s}")
41 Kernel.exit(ExitCodes::DATABASE_ERROR)
42 end
43 end
44 end
45
46 end
47
48 end