diff options
| author | J08nY | 2017-07-10 23:43:44 +0200 |
|---|---|---|
| committer | J08nY | 2017-07-10 23:43:44 +0200 |
| commit | 4d98c0bcc1ee4eb7d2de38a7ae21f97f1b0c9943 (patch) | |
| tree | 169225d3e034fcf733dfcc46f59839520c670a92 /src/mailman_pgp/workflows/base.py | |
| parent | 7b136683c76afae000c07f5dc54f3785b038695f (diff) | |
| download | mailman-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.py | 32 |
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 |
