Overhaul everything to get consistent error reports.
[mailshears.git] / lib / rm / rm_plugin.rb
index cad493d9f85c95ae8a3c79bee121e59c508a8efb..fd0c541a44cb25ed7ffbe7e96db3c19b59426265 100644 (file)
@@ -1,34 +1,47 @@
+require 'common/plugin.rb'
+
 module RmPlugin
   #
-  # Plugins for the removal of accounts.
+  # Plugins for the removal of users.
   #
 
-  def RmPlugin.included(c)
-    # Callback, called whenever another class or module includes this
-    # one. The parameter given is the name of the class or module
-    # that included us.
-    @includers ||= []
-    @includers << c
+  extend Plugin::Run
+
+  def self.runner()
+    return RmRunner
   end
 
-  def RmPlugin.includers
-    return @includers
+  def self.dummy_runner()
+    return RmDummyRunner
   end
 
-  def delete_domain(domain)
-    # Delete the given domain.
-    raise NotImplementedError
+  def delete(target)
+    # A generic version of delete_user/delete_domain that
+    # dispatches base on the class of the target.
+    if target.is_a?(User)
+      return delete_user(target)
+    elsif target.is_a?(Domain)
+      return delete_domain(target)
+    else
+      raise NotImplementedError
+    end
   end
 
-  def delete_account(account)
-    # Delete the given account.
-    raise NotImplementedError
+  def delete_domain(domain)
+    # Delete the given domain. Some plugins don't have a concept of
+    # domains, so just delete all users with a username that looks
+    # like it's in the given domain.
+    users = list_domains_users([domain])
+
+    raise NonexistentDomainError.new(domain.to_s()) if users.empty?
+
+    users.each do |u|
+      delete_user(u)
+    end
   end
 
-  def get_domain_usernames(domain)
-    # Get a list of usernames for a given domain,
-    # needed to delete accounts before removing
-    # a domain.
+  def delete_user(user)
+    # Delete the given user.
     raise NotImplementedError
   end