]> gitweb.michael.orlitzky.com - mailshears.git/blobdiff - bin/mailshears
Switch from constants to variables in the Configuration module. This should keep...
[mailshears.git] / bin / mailshears
index 6e84751161ae0566387a8a5e34b0f4876fdb9bfb..b1a5e00e1d66885f7ceed478f6031912b540429f 100755 (executable)
 # filesystem, but not the database.
 #
 
-# We need Pathname to get the real filesystem path
-# of this script (and not, for example, the path of
-# a symlink which points to it).
-require 'pathname'
-
-# This bit of magic adds the parent directory (the
-# project root) to the list of ruby load paths.
-# Thus, our require statements will work regardless of
-# how or from where the script was run.
-executable = Pathname.new(__FILE__).realpath.to_s
-$: << File.dirname(executable) + '/../'
-
-# Needed for rm_rf.
-require 'fileutils'
-
-# Load our config file.
-require 'bin/configuration'
-
-# And the necessary classes.
-require 'src/errors.rb'
-require 'src/exit_codes.rb'
-require 'src/dovecot_mailstore'
-require 'src/postfixadmin_db'
-
-pgadb = PostfixadminDb.new(Configuration::DBHOST,
-                           Configuration::DBPORT,
-                           Configuration::DBOPTS,
-                           Configuration::DBTTY,
-                           Configuration::DBNAME,
-                           Configuration::DBUSER,
-                           Configuration::DBPASS)
+require 'mailshears'
+
+pgadb = PostfixadminDb.new(Configuration::dbhost,
+                           Configuration::dbport,
+                           Configuration::dbopts,
+                           Configuration::dbtty,
+                           Configuration::dbname,
+                           Configuration::dbuser,
+                           Configuration::dbpass)
 
 
 begin
@@ -63,9 +41,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 +72,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.
 
@@ -108,15 +84,22 @@ Configuration::PLUGINS.each do |plugin_name|
       puts "Found: #{account} (#{plugin.describe_account(account)})"
     end
 
-    if Configuration::I_MEAN_BUSINESS
-      leftover_domains.each do |domain|
-        plugin.delete_domain(domain)
-        puts "Removed: #{domain} (#{plugin.describe_domain(domain)})"
-      end
-
+    if Configuration::i_mean_business
+      # 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