aboutsummaryrefslogtreecommitdiff
path: root/src/mailman_pgp/workflows/base.py
diff options
context:
space:
mode:
authorJ08nY2017-07-10 23:43:44 +0200
committerJ08nY2017-07-10 23:43:44 +0200
commit4d98c0bcc1ee4eb7d2de38a7ae21f97f1b0c9943 (patch)
tree169225d3e034fcf733dfcc46f59839520c670a92 /src/mailman_pgp/workflows/base.py
parent7b136683c76afae000c07f5dc54f3785b038695f (diff)
downloadmailman-pgp-4d98c0bcc1ee4eb7d2de38a7ae21f97f1b0c9943.tar.gz
mailman-pgp-4d98c0bcc1ee4eb7d2de38a7ae21f97f1b0c9943.tar.zst
mailman-pgp-4d98c0bcc1ee4eb7d2de38a7ae21f97f1b0c9943.zip
Diffstat (limited to 'src/mailman_pgp/workflows/base.py')
-rw-r--r--src/mailman_pgp/workflows/base.py32
1 files changed, 27 insertions, 5 deletions
diff --git a/src/mailman_pgp/workflows/base.py b/src/mailman_pgp/workflows/base.py
index 40ff4d7..3f4ba8d 100644
--- a/src/mailman_pgp/workflows/base.py
+++ b/src/mailman_pgp/workflows/base.py
@@ -18,9 +18,11 @@
""""""
from mailman.email.message import UserNotification
from mailman.interfaces.subscriptions import TokenOwner
+from pgpy import PGPKey
from mailman_pgp.model.address import PGPAddress
from mailman_pgp.model.list import PGPMailingList
+from mailman_pgp.pgp.utils import copy_headers
from mailman_pgp.pgp.wrapper import PGPWrapper
KEY_REQUEST = """\
@@ -43,12 +45,29 @@ Token: {}
class PubkeyMixin:
- def __init__(self, pubkey=None):
+ def __init__(self, pubkey=None, pre_confirmed=False):
self.pubkey = pubkey
+ self.pubkey_confirmed = pre_confirmed
+
+ @property
+ def pubkey_key(self):
+ if self.pubkey is None:
+ return None
+ return str(self.pubkey)
+
+ @pubkey_key.setter
+ def pubkey_key(self, value):
+ if value is not None:
+ self.pubkey, _ = PGPKey.from_blob(value)
+ else:
+ self.pubkey = None
def _step_pubkey_checks(self):
if not self.pubkey:
self.push('send_key_request')
+ else:
+ if not self.pubkey_confirmed:
+ self.push('send_confirm_request')
def _step_send_key_request(self):
self._set_token(TokenOwner.subscriber)
@@ -65,14 +84,15 @@ class PubkeyMixin:
def _step_receive_key(self):
pgp_address = PGPAddress.for_address(self.address)
- if pgp_address is None or pgp_address.key:
+ if pgp_address is None or pgp_address.key is None:
# The workflow was confirmed but we still dont have an address
# or the pubkey. So resend request and wait.
self.push('send_key_request')
return
else:
self.pubkey = pgp_address.key
- self.push('send_confirm_request')
+ if not self.pubkey_confirmed:
+ self.push('send_confirm_request')
def _step_send_confirm_request(self):
self._set_token(TokenOwner.subscriber)
@@ -86,10 +106,12 @@ class PubkeyMixin:
self.token))
pgp_list = PGPMailingList.for_list(self.mlist)
wrapped = PGPWrapper(msg)
- encrypted = wrapped.encrypt(self.pubkey, pgp_list.pubkey)
+ encrypted = wrapped.sign_encrypt(pgp_list.key, self.pubkey,
+ pgp_list.pubkey)
# XXX: This is not good:
- msg.set_payload(encrypted)
+ msg.set_payload(encrypted.get_payload())
+ copy_headers(encrypted, msg, True)
msg.send(self.mlist)
raise StopIteration