diff --git a/CHANGELOG.md b/CHANGELOG.md index 58bfa77..5bdca4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,13 +3,14 @@ ## Version 0.1.3 -Bugfix release +Bugfixes and small improvements in reporting ### Changes - RFC 3156 compliance: Don't base64-encode encrypted reports - Include conflicts in admin reports +- Fix: user conflict message emails were sent multiple times to chosen email diff --git a/multischleuder/reporting.py b/multischleuder/reporting.py index edca363..b98ed5c 100644 --- a/multischleuder/reporting.py +++ b/multischleuder/reporting.py @@ -172,7 +172,7 @@ class UserConflictMessage(Message): super().__init__( schleuder=schleuder, mail_from=mail_from, - mail_to=chosen.email, + mail_to=subscriber, content=content, encrypt_to=[chosen.key.blob] ) @@ -205,8 +205,19 @@ class AdminReport(Message): if len(subscribed) == 0 and len(unsubscribed) == 0 and len(removed) == 0 \ and len(added) == 0 and len(updated) == 0 and len(conflicts) == 0: raise ValueError('No changes, not creating admin report') - key_conflicts = [m for m in conflicts if m is not None and isinstance(m, KeyConflictMessage)] - user_conflicts = [m for m in conflicts if m is not None and isinstance(m, UserConflictMessage)] + key_conflicts: List[KeyConflictMessage] =\ + [m for m in conflicts if m is not None and isinstance(m, KeyConflictMessage)] + _user_conflicts: Dict[str, UserConflictMessage] = {} + # Make sure the user conflicts are unique + for m in conflicts: + if m is None or not isinstance(m, UserConflictMessage): + continue + assert m._chosen.key is not None + fpr = m._chosen.key.fingerprint + if fpr not in _user_conflicts: + _user_conflicts[fpr] = m + user_conflicts: List[UserConflictMessage] = list(_user_conflicts.values()) + # Assemble the content content = f''' == Admin Report for MultiSchleuder {schleuder} == ''' diff --git a/multischleuder/test/test_reporting.py b/multischleuder/test/test_reporting.py index 9663e21..048a8ce 100644 --- a/multischleuder/test/test_reporting.py +++ b/multischleuder/test/test_reporting.py @@ -29,7 +29,8 @@ def one_of_each_kind(): unsubscribed={sub}, updated={}, added={}, - removed={}) + removed={}, + conflicts=[]) msg3 = UserConflictMessage( schleuder='test@example.org', subscriber='bar@example.org', diff --git a/multischleuder/test/test_smtp.py b/multischleuder/test/test_smtp.py index 2f8ab2a..1f14d12 100644 --- a/multischleuder/test/test_smtp.py +++ b/multischleuder/test/test_smtp.py @@ -187,7 +187,8 @@ class TestSmtpClient(unittest.TestCase): unsubscribed={sub}, updated={}, added={}, - removed={}) + removed={}, + conflicts=[]) client.send_messages([msg1, msg2]) ctrl.stop() self.assertTrue(ctrl.handler.connected)