# 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,
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
--- /dev/null
+# All plugins should include this module. It defines the basic
+# operations that all plugins are supposed to support.
+module Plugin
+
+ def Plugin.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
+ end
+
+ def Plugin.includers
+ return @includers
+ 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
+ end
+
+ def describe_account(account)
+ # Provide a "description" of the account. This is output along
+ # with the domain name and can be anything of use to the system
+ # administrator.
+ raise NotImplementedError
+ end
+
+ def delete_domain(domain)
+ # Delete the given domain.
+ raise NotImplementedError
+ end
+
+ def delete_account(account)
+ # Delete the given account.
+ raise NotImplementedError
+ end
+
+ def get_leftover_domains(db_domains)
+ # Given a list of domains, determine which domains belonging to this plugin
+ # are not contained in the given list.
+ raise NotImplementedError
+ end
+
+ def get_leftover_accounts(db_accounts)
+ # Given a list of accounts, determine which accounts belonging to this plugin
+ # are not contained in the given list.
+ raise NotImplementedError
+ end
+end