# 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.rest.helpers import ( child, CollectionMixin, etag, not_found, okay) from public import public from mailman_pgp.config import config from mailman_pgp.model.list import EncryptedMailingList class _EncryptedBase(CollectionMixin): def _resource_as_dict(self, emlist): """See `CollectionMixin`.""" return dict(list_id=emlist.list_id, unsigned_msg_action=emlist.unsigned_msg_action, nonencrypted_msg_action=emlist.nonencrypted_msg_action, strip_original_signature=emlist.strip_original_signature, sign_outgoing=emlist.sign_outgoing, self_link=self.api.path_to( '/plugins/{}/lists/{}'.format(config.name, emlist.list_id))) def _get_collection(self, request): """See `CollectionMixin`.""" return config.db.session.query(EncryptedMailingList).all() @public class AllEncryptedLists(_EncryptedBase): def on_get(self, request, response): """/lists""" resource = self._make_collection(request) return okay(response, etag(resource)) @public class AnEncryptedList(_EncryptedBase): def __init__(self, list_id): self._mlist = config.db.session.query(EncryptedMailingList).filter_by( list_id=list_id).first() def on_get(self, request, response): """/lists/""" if self._mlist is None: return not_found() else: okay(response, self._resource_as_json(self._mlist)) @child() def key(self, context, segments): return AListPubkey(self._mlist), [] @public class AListPubkey: def __init__(self, mlist): self._mlist = mlist def on_get(self, request, response): """/lists//key""" if self._mlist is None: return not_found() else: resource = dict(public_key=str(self._mlist.pubkey), key_fingerprint=str( self._mlist.pubkey.fingerprint)) return okay(response, etag(resource))