Clean up user/domain describing in the plugins.
[mailshears.git] / lib / common / plugin.rb
index c6f750bc3f4d4c2f20e1c11c31f372e849afd711..702b621ff5da9c1ee18ccbd0fd29352950a63386 100644 (file)
@@ -55,26 +55,36 @@ module Plugin
     # A generic version of describe_user/describe_domain that
     # dispatches base on the class of the target.
     if target.is_a?(User)
-      return describe_user(target)
+      if user_exists(target) then
+        return describe_user(target)
+      else
+        return 'User not found'
+      end
     elsif target.is_a?(Domain)
-      return describe_domain(target)
+      if domain_exists(target) then
+        return describe_domain(target)
+      else
+        return 'Domain not found'
+      end
     else
       raise NotImplementedError
     end
   end
 
   def describe_domain(domain)
-    # Provide a "description" of the domain. This is output along
-    # with the domain name and can be anything of use to the system
-    # administrator.
-    raise NotImplementedError
+    # Provide a "description" of the domain. This is output along with
+    # the domain name and can be anything of use to the system
+    # administrator. The default doesn't do anything useful and should
+    # be overridden.
+    return domain.to_s()
   end
 
   def describe_user(user)
     # Provide a "description" of the user. This is output along
     # with the domain name and can be anything of use to the system
-    # administrator.
-    raise NotImplementedError
+    # administrator. The default doesn't do anything useful and should
+    # be overridden.
+    return user.to_s()
   end
 
   def list_users()
@@ -82,6 +92,14 @@ module Plugin
     raise NotImplementedError
   end
 
+  def list_domains()
+    # Compute the domains from a list of users. Obviously much worse
+    # than getting the domains the "smart" way, if such a way exists.
+    users = list_users()
+    domains = users.map{ |u| u.domain() }
+    return domains.uniq()
+  end
+
   def user_exists(user)
     # Does the given username exist for this plugin? We use a naive
     # implementation here based on list_users() which is required to
@@ -90,6 +108,14 @@ module Plugin
     return users.include?(user)
   end
 
+  def domain_exists(domain)
+    # Does the given domain exist for this plugin? We use a naive
+    # implementation here based on list_domains() which is required to
+    # exist above. Plugins can override this with something fast.
+    domains = list_domains()
+    return domains.include?(domain)
+  end
+
   def list_domains_users(domains)
     # Get all users belonging to the given domains. If a user has
     # domainpart "example.com" then it belongs to the domain