]> gitweb.michael.orlitzky.com - mailshears.git/blobdiff - bin/mailshears
Delete accounts before domains.
[mailshears.git] / bin / mailshears
index 6e84751161ae0566387a8a5e34b0f4876fdb9bfb..803da46f417941f6d289ee2fdc4f9894e7211651 100755 (executable)
@@ -34,9 +34,12 @@ require 'bin/configuration'
 # And the necessary classes.
 require 'src/errors.rb'
 require 'src/exit_codes.rb'
-require 'src/dovecot_mailstore'
 require 'src/postfixadmin_db'
 
+Configuration::PLUGINS.each do |plugin_file|
+  require "src/plugins/#{plugin_file}"
+end
+
 pgadb = PostfixadminDb.new(Configuration::DBHOST,
                            Configuration::DBPORT,
                            Configuration::DBOPTS,
@@ -63,9 +66,7 @@ rescue DatabaseError => e
 end
 
 
-Configuration::PLUGINS.each do |plugin_name|
-  # Convert a string into a class.
-  plugin_class = Kernel.const_get(plugin_name)
+Plugin.includers.each do |plugin_class|
   plugin = plugin_class.new()
 
   begin
@@ -96,7 +97,7 @@ Configuration::PLUGINS.each do |plugin_name|
       header += current_time.to_s + "\n"
     end
 
-    header += 'Plugin: ' + plugin_name + "\n"
+    header += 'Plugin: ' + plugin_class.to_s + "\n"
     puts header
     puts '-' * header.size # Underline the header.
 
@@ -109,14 +110,21 @@ Configuration::PLUGINS.each do |plugin_name|
     end
 
     if Configuration::I_MEAN_BUSINESS
-      leftover_domains.each do |domain|
-        plugin.delete_domain(domain)
-        puts "Removed: #{domain} (#{plugin.describe_domain(domain)})"
-      end
-
+      # We have to delete the accounts before the domain,
+      # otherwise they'd already be gone.
       leftover_accounts.each do |account|
+        # Get the description before we delete the domain.
+        # This can still fail if the account's domain is gone.
+        account_description = plugin.describe_account(account)
         plugin.delete_account(account)
-        puts "Removed: #{account} (#{plugin.describe_account(account)})"
+        puts "Removed: #{account} (#{account_description})"
+      end
+      
+      leftover_domains.each do |domain|
+        # Get the description before we delete the domain.
+        domain_description = plugin.describe_domain(domain)
+        plugin.delete_domain(domain)
+        puts "Removed: #{domain} (#{domain_description})"
       end
     end