From 1683c0e288d65d2cb99c118a98f8b581ebd492dc Mon Sep 17 00:00:00 2001 From: J08nY Date: Thu, 22 Jun 2017 14:16:15 +0200 Subject: Check signatures via a custom chain + rule. --- src/mailman_pgp/rules/__init__.py | 0 src/mailman_pgp/rules/signature.py | 70 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 70 insertions(+) create mode 100644 src/mailman_pgp/rules/__init__.py create mode 100644 src/mailman_pgp/rules/signature.py (limited to 'src/mailman_pgp/rules') diff --git a/src/mailman_pgp/rules/__init__.py b/src/mailman_pgp/rules/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/mailman_pgp/rules/signature.py b/src/mailman_pgp/rules/signature.py new file mode 100644 index 0000000..28d05e4 --- /dev/null +++ b/src/mailman_pgp/rules/signature.py @@ -0,0 +1,70 @@ +# Copyright (C) 2017 Jan Jancar +# +# This file is a part of the Mailman PGP plugin. +# +# This program is free software; you can redistribute it and/or modify it under +# the terms of the GNU General Public License as published by the Free +# Software Foundation, either version 3 of the License, or (at your option) +# any later version. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program. If not, see . + +"""""" + +from mailman.core.i18n import _ +from mailman.interfaces.rules import IRule +from public import public +from zope.interface import implementer + +from mailman_pgp.database import query +from mailman_pgp.model.list import EncryptedMailingList +from mailman_pgp.pgp.wrapper import PGPWrapper + + +@public +@implementer(IRule) +class Signature: + """""" + + name = 'signature' + + description = _( + """ + """) + + record = True + + def _record_action(self, msgdata, action, sender, reason): + msgdata['moderation_action'] = action + msgdata['moderation_sender'] = sender + msgdata.setdefault('moderation_reasons', []).append(reason) + + def check(self, mlist, msg, msgdata): + """See `IRule`.""" + enc_list = query(EncryptedMailingList).filter_by( + list_id=mlist.list_id).first() + if enc_list is None: + raise ValueError('Encrypted mailing list not found.') + wrapped = PGPWrapper(msg) + + if not wrapped.is_signed(): + action = enc_list.unsigned_msg_action + if action is not None: + self._record_action(msgdata, action, msg.sender, + 'The message is unsigned.') + return True + + if wrapped.is_inline_signed(): + action = enc_list.inline_pgp_action + if action is not None: + self._record_action(msgdata, action, msg.sender, + 'Inline PGP is not allowed.') + return True + + # TODO finish this \ No newline at end of file -- cgit v1.2.3-70-g09d2