aboutsummaryrefslogtreecommitdiff
path: root/src/mailman_pgp/rest/addresses.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman_pgp/rest/addresses.py')
-rw-r--r--src/mailman_pgp/rest/addresses.py38
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))