Commit Graph

289 Commits

Author SHA1 Message Date
pfm 002e150805 Merge pull request 'Move core logic from gpg-mailgate.py to lacre.mailgate module' (#91) from 90-core-module into master
Reviewed-on: #91
2022-06-11 19:10:36 +00:00
Piotr F. Mieszkowski 5ffbbec5f0 Rename sort_recipients to deliver_message, remove unused imports 2022-06-11 21:05:27 +02:00
Piotr F. Mieszkowski b627fde510 Move gpg-mailgate.py logic to lacre.mailgate module
gpg-mailgate.py script keeps its role, but only needs to call code defined in
lacre.mailgate.
2022-06-11 21:00:42 +02:00
pfm 8a366f2f17 Merge pull request 'Handle addresses with delimiters' (#89) from 87-handle-delimiters into master
Reviewed-on: #89
2022-06-08 19:32:27 +00:00
Piotr F. Mieszkowski 881a8d1756 Add GnuPG encryption support for addresses with delimiters
If a user registers their key for address alice@example.com but receives a
message sent to alice+something@example.com, this message should be encrypted
as well.

- Implement delimiter support for GnuPG encryption.

- Add E2E test case for a clear text message delivered to an address with
delimiter.

- Fix minor bug: wrong configuration parameter was retrieved when logging
information about enc_domain_keymap being active.
2022-06-08 21:20:58 +02:00
Piotr F. Mieszkowski c86c620668 Extract delimiter support, add unit tests
Also: fix recursive call to get_cert_for_email.
2022-06-07 22:14:32 +02:00
pfm c4781f2ac8 Merge pull request 'Record execution time and log it' (#86) from 84-measure-time into master
Reviewed-on: #86
2022-06-02 21:44:56 +00:00
Piotr F. Mieszkowski 251e6d1270 Record execution time and log it
After each execution, log an entry with information about total seconds from
the start to the end of execution and the value returned by
time.process_time() function, which returns:

	sum of the kernel and user-space CPU time

according to the documentation.

This feature can be used to collect stats about Lacre performance.
2022-06-02 23:41:14 +02:00
pfm cb219799d2 Merge pull request 'Use CRLF for line-endings' (#83) from 78-fix-encryption into master
Reviewed-on: #83
2022-06-02 18:00:17 +00:00
Piotr F. Mieszkowski 937046eb17 Use CRLF for line-endings
Mail RFCs use CRLF for line endings and it turns out things may break in
strange ways if only LF is used.
2022-06-02 19:56:32 +02:00
Piotr F. Mieszkowski 65d2a77486 Don't break Content-Type header with LF - part 2 2022-06-02 19:43:27 +02:00
Piotr F. Mieszkowski 06abbc0edd Don't break Content-Type header with LF 2022-06-02 19:37:06 +02:00
pfm 9820e42457 Merge pull request 'Handle text data carefully' (#82) from 75-unify-types into master
Reviewed-on: #82
2022-06-01 21:59:52 +00:00
Piotr F. Mieszkowski 46be24670c Fix charset resolution in Content-Type parser 2022-06-01 23:44:41 +02:00
Piotr F. Mieszkowski 55b58d25bc Use literal separator '@' in sanitize_case_sense 2022-06-01 23:23:51 +02:00
Piotr F. Mieszkowski d3b1717290 Extract PGP/INLINE checks, remove unnecessary byte-check 2022-06-01 23:00:05 +02:00
Piotr F. Mieszkowski 4c6fdc52ec Check mandatory config early, add tests
Also: extend failover logging configuration with file-based handler to make
sure that the user gets _some_ logs even if they do not configure Lacre at
all.
2022-05-31 22:09:10 +02:00
Piotr F. Mieszkowski 3bcc1151e5 Add E2E case: a user with a key and PGP/MIME configured
- Add a new test input message for a new test identity, test scenario
  configuration and a test key.

- While retrieving message payload, determine charset based on the
  Content-Type header.  When missing, default to UTF-8.

- Use more comprehensible variables names.

- Adjust logging levels.
2022-05-30 00:49:40 +02:00
Piotr F. Mieszkowski 707fc96234
Add more contract tests
- Verify that Message.get_payload() returns str, unless passed decode=True,
when it returns bytes.

- Verify that RawConfigParser returns str.
2022-05-25 22:13:40 +02:00
Piotr F. Mieszkowski 558872d9d0 Start documenting dependency contracts with unit tests
Implement some unit tests for 'email' package so we know precisely how this
package behaves.
2022-05-16 20:57:12 +02:00
pfm 35987a6654 Merge pull request 'Clean-up' (#70) from 69-cleanup into master
Reviewed-on: #70
2022-05-14 09:49:14 +00:00
Piotr F. Mieszkowski d27eef911a Update sample config
- Include helpful information about webpanel_url.
- Remove unused database settings.
- Add a hint about MySQL url to the database section.
2022-05-14 11:40:20 +02:00
Piotr F. Mieszkowski 92f3cedc51 Remove leftover .read() call 2022-05-14 11:26:49 +02:00
pfm 5639d8e5b6 Merge pull request 'Improve logging and configuration' (#65) from logging-and-config into master
- Replace custom logging code with "logging" package.
- Unify access to configuration and extract to "lacre.config" package.
- Introduce a new configuration file (with a sample included) to control how and where Lacre writes diagnostic output.
- Update sample configuration.

Reviewed-on: #65
2022-05-13 20:01:10 +00:00
Piotr F. Mieszkowski d8bef9cdb0 Explain syslog logging better in sample logging config 2022-05-13 21:57:29 +02:00
Piotr F. Mieszkowski 11b78ce0fb Adjust log entry levels for severe conditions
When Lacre is misconfigured or can't proceed, report WARNING or even ERROR
level messages.
2022-05-13 21:27:50 +02:00
Piotr F. Mieszkowski acdb2dd5c8 Log cron-job inner workings 2022-05-11 19:57:26 +02:00
Piotr F. Mieszkowski 7a8720c142 Update installation instructions, add sample logging config 2022-05-11 19:15:59 +02:00
Piotr F. Mieszkowski 8f0d8f4933 Add newlines to key material 2022-05-06 20:40:16 +02:00
Piotr F. Mieszkowski 617a208fe9 Fix indentation and names after rebase 2022-05-06 20:25:22 +02:00
Piotr F. Mieszkowski 9dfc447169 Use Lacre logging and configuration in register-handler 2022-05-06 20:13:23 +02:00
Piotr F. Mieszkowski af5a5b4176 Use Lacre logging and configuration in cron.py 2022-05-06 20:13:19 +02:00
Piotr F. Mieszkowski 75ccfb0850 Use logging module
- Replace custom logging code with calls to logging module.
- Use logging.config to provide configuration parameters.

To make Lacre's logging more flexible, use fileConfig from logging.config to
set up all parameters.  If the configuration file is missing, use dictConfig
with hardcoded reasonable defaults.
2022-05-06 19:39:56 +02:00
Piotr F. Mieszkowski baf7954270 Use list booleanness instead of comparing with empty list 2022-05-06 19:39:56 +02:00
Piotr F. Mieszkowski 031c7234f6 Reorder top-level expressions 2022-05-06 19:39:56 +02:00
Piotr F. Mieszkowski d90b50f7e7 Extract config, separate logging, split into smaller functions
- Move configuration-processing code to a separate module (lacre.config) and
  provide a simple API to access configuration parameters.
- Prepare to use builtin logging module to log diagnostic data.
- Rework the configuration-processing file to make it cleaner.
- Log additional information while processing configuration.
- Reorder functions.
2022-05-06 19:39:56 +02:00
pfm 7767dfaff9 Merge pull request 'Fix minor cron.py issues' (#64) from fix-cron-script into master
Reviewed-on: #64
2022-05-06 17:25:11 +00:00
Piotr F. Mieszkowski 55fa0d0601 [GnuPG.confirm_key] Convert email to bytes() before comparison 2022-05-06 19:14:52 +02:00
Piotr F. Mieszkowski 71afd6ed05 [GnuPG.confirm_key] Set 700 mode for temp. key home 2022-04-26 18:42:48 +02:00
Piotr F. Mieszkowski a82ff9f3f1 Use actual keys (RSA and Ed25519) in cron-test 2022-04-24 10:42:51 +02:00
Piotr F. Mieszkowski 52b31028c5 Fix config key typo 2022-04-24 10:07:52 +02:00
Piotr F. Mieszkowski b19a76e297 Update testing documentation 2022-04-23 13:13:57 +02:00
Piotr F. Mieszkowski ffc53b935a Finish migration to SQLAlchemy and automate testing cron.py 2022-04-23 13:08:40 +02:00
Piotr F. Mieszkowski 7aff414fb7 Use SQLAlchemy to access database
- Replace hardcoded MySQLdb package with sqlalchemy to support other RDBMS
backends.

- Provide a script that could eventually replace schema.sql (schema.py).

- Update sample configuration.
2022-04-23 09:39:20 +02:00
muppeth 86b725349f
added smtp auth to cron.py 2022-04-20 13:01:58 +02:00
Piotr F. Mieszkowski ea0e012c04 Use 'open' to open a file 2022-04-19 21:35:22 +02:00
Piotr F. Mieszkowski 454b519c70 Use bytes in confirm_key's line operations 2022-04-19 21:22:34 +02:00
Piotr F. Mieszkowski f472f4ac22 Use isinstance() instead of type() 2022-04-19 21:16:40 +02:00
Piotr F. Mieszkowski fdadc89c31 Use bytes in GnuPG.confirm_key too 2022-04-19 20:49:49 +02:00
Piotr F. Mieszkowski 5a34249090 Fix minor cron.py issues
Related to #63: TypeError: memoryview: a bytes-like object is required, not
'str'.

- Allow GnuPG.add_key accept either 'str' or 'bytes'.
- Import MIMEText from email.mime.text.
2022-04-10 19:03:18 +02:00