aboutsummaryrefslogtreecommitdiff
path: root/src/mailman_pgp/workflows/base.py
diff options
context:
space:
mode:
authorJ08nY2017-08-07 00:50:19 +0200
committerJ08nY2017-08-07 00:50:19 +0200
commit59ec076d04340245101de98633705d312374d9fe (patch)
tree8614919b84fa1f2d6cc3edeb39f197bd7bfe518b /src/mailman_pgp/workflows/base.py
parent570dfe8007d21593816d90df21f9f4fa25a7dae3 (diff)
downloadmailman-pgp-feature/key-revocation.tar.gz
mailman-pgp-feature/key-revocation.tar.zst
mailman-pgp-feature/key-revocation.zip
Diffstat (limited to 'src/mailman_pgp/workflows/base.py')
-rw-r--r--src/mailman_pgp/workflows/base.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/mailman_pgp/workflows/base.py b/src/mailman_pgp/workflows/base.py
index bffcf94..9fc5d58 100644
--- a/src/mailman_pgp/workflows/base.py
+++ b/src/mailman_pgp/workflows/base.py
@@ -16,7 +16,15 @@
# this program. If not, see <http://www.gnu.org/licenses/>.
""""""
+from datetime import timedelta
+
+from mailman.interfaces.pending import IPendings
+from mailman.interfaces.subscriptions import TokenOwner
+from mailman.utilities.datetime import now
+from mailman.utilities.modules import abstract_component
+from mailman.workflows.common import SubscriptionBase
from public import public
+from zope.component import getUtility
from mailman_pgp.database import transaction
from mailman_pgp.model.address import PGPAddress
@@ -29,6 +37,8 @@ class PGPMixin:
self.mlist = mlist
self.pgp_list = PGPMailingList.for_list(mlist)
self.pgp_address = pgp_address
+ if self.pgp_address is not None:
+ self.address = self.pgp_address.address
@property
def address_key(self):
@@ -45,3 +55,36 @@ class PGPMixin:
with transaction() as t:
self.pgp_address = PGPAddress(self.address)
t.add(self.pgp_address)
+
+ def _step_restore_address(self):
+ self.pgp_address = PGPAddress.for_address(self.address)
+
+ def _set_token(self, token_owner):
+ assert isinstance(token_owner, TokenOwner)
+ pendings = getUtility(IPendings)
+ if self.token is not None:
+ pendings.confirm(self.token)
+ self.token_owner = token_owner
+ if token_owner is TokenOwner.no_one:
+ self.token = None
+ return
+
+ pendable = self.pendable_class()(
+ list_id=self.mlist.list_id,
+ email=self.address.email,
+ display_name=self.address.display_name,
+ when=now().replace(microsecond=0).isoformat(),
+ token_owner=token_owner.name,
+ )
+ self.token = pendings.add(pendable, timedelta(days=3650))
+
+
+@public
+@abstract_component
+class PGPSubscriptionBase(SubscriptionBase, PGPMixin):
+ def __init__(self, mlist, subscriber=None, *, pgp_address=None):
+ SubscriptionBase.__init__(self, mlist, subscriber)
+ PGPMixin.__init__(self, mlist, pgp_address=pgp_address)
+
+ def _step_restore_subscriber(self):
+ self._restore_subscriber()