aboutsummaryrefslogtreecommitdiff
path: root/src/mailman_pgp/rest/lists.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman_pgp/rest/lists.py')
-rw-r--r--src/mailman_pgp/rest/lists.py22
1 files changed, 21 insertions, 1 deletions
diff --git a/src/mailman_pgp/rest/lists.py b/src/mailman_pgp/rest/lists.py
index 708635f..9cd7a4b 100644
--- a/src/mailman_pgp/rest/lists.py
+++ b/src/mailman_pgp/rest/lists.py
@@ -33,7 +33,7 @@ from zope.component import getUtility
from mailman_pgp.config import config
from mailman_pgp.database import transaction
from mailman_pgp.model.list import PGPMailingList
-from mailman_pgp.utils.pgp import key_from_blob
+from mailman_pgp.utils.pgp import key_from_blob, key_merge
from mailman_pgp.utils.rest import enumflag_validator, workflow_validator
from mailman_pgp.workflows.key_change import (KeyChangeModWorkflow,
KeyChangeWorkflow)
@@ -213,3 +213,23 @@ class AListPubkey:
resource = dict(public_key=str(pubkey),
key_fingerprint=str(pubkey.fingerprint))
okay(response, etag(resource))
+
+ def on_put(self, request, response):
+ """/lists/<list_id>/pubkey"""
+ # merge pubkey with the current one. Assume all new sigs are valid.
+ try:
+ validator = Validator(public_key=GetterSetter(key_from_blob))
+ values = validator(request)
+ except (ValueError, PGPError) as error:
+ bad_request(response, str(error))
+ return
+
+ key = values.pop('public_key')
+ try:
+ key_merge(self._mlist.key, key)
+ self._mlist.fs_key.save()
+ except ValueError as e:
+ bad_request(response, str(e))
+ return
+
+ accepted(response)