diff options
Diffstat (limited to 'src/mailman_pgp/rest/addresses.py')
| -rw-r--r-- | src/mailman_pgp/rest/addresses.py | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/src/mailman_pgp/rest/addresses.py b/src/mailman_pgp/rest/addresses.py index 6d99a04..ff1393a 100644 --- a/src/mailman_pgp/rest/addresses.py +++ b/src/mailman_pgp/rest/addresses.py @@ -17,14 +17,15 @@ """""" -from mailman.rest.helpers import CollectionMixin, etag, not_found, okay +from mailman.rest.helpers import (child, CollectionMixin, etag, not_found, + NotFound, okay) from public.public import public from mailman_pgp.config import config from mailman_pgp.model.address import PGPAddress -class _EncryptedBase(CollectionMixin): +class _PGPAddressBase(CollectionMixin): def _resource_as_dict(self, address): """See `CollectionMixin`.""" return dict(email=address.email, @@ -41,7 +42,9 @@ class _EncryptedBase(CollectionMixin): @public -class AllAddresses(_EncryptedBase): +class AllAddresses(_PGPAddressBase): + """""" + def on_get(self, request, response): """/addresses""" resource = self._make_collection(request) @@ -49,7 +52,9 @@ class AllAddresses(_EncryptedBase): @public -class AnAddress(_EncryptedBase): +class AnAddress(_PGPAddressBase): + """""" + def __init__(self, email): self._address = PGPAddress.for_email(email) @@ -58,3 +63,28 @@ class AnAddress(_EncryptedBase): return not_found(response) else: okay(response, self._resource_as_json(self._address)) + + @child() + def key(self, context, segments): + if self._address is None: + return NotFound(), [] + return AnAddressKey(self._address), [] + + +@public +class AnAddressKey: + """""" + + def __init__(self, address): + self._address = address + + def on_get(self, request, response): + """/addresses/<email>/key""" + key = self._address.key + if key is None: + not_found(response) + else: + resource = dict(key=str(key), + key_fingerprint=str(key.fingerprint), + key_confirmed=self._address.key_confirmed) + okay(response, etag(resource)) |
