X-Git-Url: http://gitweb.michael.orlitzky.com/?p=mailshears.git;a=blobdiff_plain;f=lib%2Frm%2Frm_runner.rb;h=0392d1192acbac86218c0813218e37b5b5c56929;hp=039ae61f7d489c9a0a7807608b959fd912f3c99c;hb=51f027b01e242737956c3ab5aecdd322d6ceeeed;hpb=a6ae98f0423603445b621a8eaa17443c8d590b45 diff --git a/lib/rm/rm_runner.rb b/lib/rm/rm_runner.rb index 039ae61..0392d11 100644 --- a/lib/rm/rm_runner.rb +++ b/lib/rm/rm_runner.rb @@ -1,32 +1,48 @@ +require 'common/runner' + class RmRunner include Runner - def run(plugin, targets) + def run(plugin, *targets) targets.each do |target| # Why think too hard? An account has an @, a domain doesn't. if target.include?('@') then begin account_description = plugin.describe_account(target) plugin.delete_account(target) - puts "Removed account: #{target} (#{account_description})" + report(plugin, "Removed account: #{target} (#{account_description})") + + rescue NonexistentAccountError => e + report(plugin, "Account not found: #{e.to_s}") rescue StandardError => e - puts "There was an error removing the account: #{e.to_s}" + report(plugin, "There was an error removing the account: #{e.to_s}") Kernel.exit(ExitCodes::DATABASE_ERROR) end else begin - # TODO: Delete all accounts first. + # We must delete all accounts belonging to the domain first. + # This prevents us from leaving behind accounts. Not a + # problem with the mailstore, since we'll delete the domain + # directory anyway, but it is for the database plugins. + usernames = plugin.get_domain_usernames(target) + usernames.each { |u| run(plugin, u) } + domain_description = plugin.describe_domain(target) plugin.delete_domain(target) - puts "Removed domain: #{target} (#{domain_description})" + report(plugin, "Removed domain: #{target} (#{domain_description})") + + rescue NonexistentAccountError => e + # Can happen in the usernames.each... block. + report(plugin, "Account not found: #{e.to_s}") + rescue NonexistentDomainError => e + report(plugin, "Domain not found: #{e.to_s}") rescue StandardError => e - puts "There was an error removing the domain: #{e.to_s}" + report(plugin, "There was an error removing the domain: #{e.to_s}") Kernel.exit(ExitCodes::DATABASE_ERROR) end end end - # TODO: remove from postfixadmin as well. end end