This shows you the differences between two versions of the page.
Next revision | Previous revision Next revision Both sides next revision | ||
devel:blueprints:mailin [2009/01/30 09:19] morten created |
devel:blueprints:mailin [2009/01/30 10:45] morten |
||
---|---|---|---|
Line 7: | Line 7: | ||
The University of Tromsø have already started writing a MailIn replacement in Python, and this is up and running at the University, but with only a single plugin. | The University of Tromsø have already started writing a MailIn replacement in Python, and this is up and running at the University, but with only a single plugin. | ||
- | This blueprint specifies the design required to include such a software component in NAV. | + | This blueprint specifies the design required to include such a software component in NAV, and most of is derived from the [[http://drift.uninett.no/~andreas/mailin/|good documentation of the Perl version]]. |
+ | ===== System overview ===== | ||
+ | |||
+ | * The core of MailIn will be a small plugin-invoking engine with a minimal API offered to its plugins. | ||
+ | * The MailIn program will be invoked by an MDA (Mail Delivery Agent), and must expect to be fed an email payload on //stdin//. | ||
+ | * The payload will be offered in turn to each registered plugin. | ||
+ | * Once a plugin accepts the payload, MailIn core will not offer it to any other plugin. | ||
+ | * MailIn core verifies that the plugin offers its own ''authorize'' function. If it doesn't, MailIn core attempts to authorize the payload according to global rules. | ||
+ | * When the plugin offers its own authorize function, this is called. The plugin will check its authorization configuration, to see whether the email is allowed to generate an event. Typically, the headers are inspected to find the source of the email. | ||
+ | * If authorized, MailIn core will ask the plugin to process the payload. | ||
+ | * The plugin will process the payload in whatever manner it sees fit, and using the ''nav.event'' API, one or more events should be generated and posted to the event queue. | ||
+ | |||
+ | ==== Plugin API ==== | ||
+ | A MailIn plugin consists of a Python module, which should provide three functions: | ||
+ | |||
+ | ^ function ^ required ^ description ^ | ||
+ | | ''accept(payload)'' | yes | Must return a true value if the payload can be processed by this plugin. | | ||
+ | | ''authorize(payload)'' | no | Must return a true value if the payload is authorized to generate an event, according to plugin-internal rules/configuration. If this function is not supplied by the plugin, the MailIn core must use a global authorize function to perform authorization according to globally configured rules. | | ||
+ | | ''process(payload)'' | yes | Process the payload, generate and post a single or multiple events. Return a true value if successful. | | ||
+ | |||
+ | The plugin must expect the ''payload'' object to be a message object from [[http://docs.python.org/library/email.html|Python's standard email library]]. |