Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
lacre:ideas [2023/12/08 20:43] – add: advanced logging features pfmlacre:ideas [2024/04/14 20:34] (current) – add: rewrite in Rust pfm
Line 14: Line 14:
  
 See [[https://packaging.python.org/en/latest/|Python Packaging User Guide]]. See [[https://packaging.python.org/en/latest/|Python Packaging User Guide]].
 +
 +There's a [[https://github.com/pypa/sampleproject/blob/db5806e0a3204034c51b1c00dde7d5eb3fa2532e/setup.py|very well documented setup.py example]].
  
 ===== Use database migration framework ===== ===== Use database migration framework =====
Line 28: Line 30:
  
 Read more in [[https://docs.python.org/3/howto/logging-cookbook.html#use-of-contextvars|Logging Cookbook - Use of contextvars]] and documentation of [[https://docs.python.org/3/library/contextvars.html|contextvars]] module. Read more in [[https://docs.python.org/3/howto/logging-cookbook.html#use-of-contextvars|Logging Cookbook - Use of contextvars]] and documentation of [[https://docs.python.org/3/library/contextvars.html|contextvars]] module.
 +
 +===== Provide a Milter =====
 +
 +Instead of using after-queue mail filters, we could use Sendmail 8's [[https://www.postfix.org/MILTER_README.html|Milter API]]. They can be written in Python too (see [[https://pymilter.org/|Python milters]]).
 +
 +With Lacre being a Milter, it would become available for a wider audience (i.e. for Postfix //and// Sendmail admins).
 +
 +===== Rewrite in Rust =====
 +
 +Since Python has some limitations (e.g. its ''email'' module makes it hard to process messages without modifying their contents), I'm considering rewriting Lacre in Rust.
 +
 +Crates I consider using:
 +
 +  * [[https://crates.io/crates/actix-server|actix-server]], a generic TCP server --- I assume it's something like Python's ''asyncio'';
 +  * [[https://github.com/rpgp/rpgp|rpgp]], a Rust crate to work with Open PGP;
 +  * [[https://crates.io/crates/email-address-parser|email-address-parser]], an RFC-compliant address parser;
 +  * [[https://crates.io/crates/mime|mime]], a strongly typed MIME-Type support;
 +  * something to parse MIME--compliant messages;