diff options
Diffstat (limited to 'src/mailman_pgp/rules/signature.py')
| -rw-r--r-- | src/mailman_pgp/rules/signature.py | 70 |
1 files changed, 70 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>. + +"""""" + +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 |
