Modoboa offers a plugin API to expand its capabilities. The current implementation provides the following possibilities:
Plugins are nothing more than Django applications with an extra piece of code that integrates them into Modoboa. Usually, the __init__.py file will contain a complete description of the plugin:
The communication between both applications is provided by Available events. Modoboa offers some kind of hooks to let plugin add custom actions.
The following subsections describe plugin architecture and explain how you can create your own plugin.
To create a new plugin, just start a new django application like this (into modoboa’s directory):
$ python manage.py startapp
Then, you need to register this application using the provided API. Just copy/paste the following example into the __init__.py file of the future extension:
from modoboa.extensions import ModoExtension, exts_pool
class MyExtension(ModoExtension):
name = "myext"
label = "My Extension"
version = "0.1"
description = "A description"
url = "myext_root_location" # optional, name is used if not defined
def init(self):
"""This method is called when the extension is activated.
"""
pass
def load(self):
"""This method is called when Modoboa loads available and activated plugins.
Declare parameters and register events here.
"""
pass
def destroy(self):
"""This function is called when a plugin is disabled from the interface.
Unregister parameters and events here.
"""
pass
exts_pool.register_extension(MyExtension)
Once done, simply add your plugin’s module name to the INSTALLED_APPS variable located inside settings.py. Optionaly, run python manage.py syncdb if your plugin provides custom tables and python manage.py collectstatic to update static files.
A plugin can declare its own parameters. There are two levels available:
To declare a new administration parameter, use the following function:
from modoboa.lib import parameters
parameters.register_admin(name, **kwargs)
To declare a new user parameter, use the following function:
parameter.register_user(name, **kwargs)
Both functions accept extra arguments listed here:
To undeclare parameters (for example when a plugin is disabled is disabled from the interface), use the following function:
parameters.unregister_app(appname)
appname corresponds to your plugin’s name, ie. the name of the directory containing the source code.
Modoboa uses Django’s internal permission system. Administrative roles are nothing more than groups (Group instances).
If an extension needs to add new roles, it needs to follow those steps: