summaryrefslogtreecommitdiff
path: root/src/mailman/app/subscriptions.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/mailman/app/subscriptions.py')
-rw-r--r--src/mailman/app/subscriptions.py10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/mailman/app/subscriptions.py b/src/mailman/app/subscriptions.py
index 8794fb78a..1593b4d58 100644
--- a/src/mailman/app/subscriptions.py
+++ b/src/mailman/app/subscriptions.py
@@ -159,9 +159,13 @@ class SubscriptionWorkflow(Workflow):
def _set_token(self, token_owner):
assert isinstance(token_owner, TokenOwner)
+ pendings = getUtility(IPendings)
+ # Clear out the previous pending token if there is one.
+ if self.token is not None:
+ pendings.confirm(self.token)
# Create a new token to prevent replay attacks. It seems like this
- # should produce the same token, but it won't because the pending adds
- # a bit of randomization.
+ # would produce the same token, but it won't because the pending adds a
+ # bit of randomization.
self.token_owner = token_owner
if token_owner is TokenOwner.no_one:
self.token = None
@@ -173,7 +177,7 @@ class SubscriptionWorkflow(Workflow):
when=now().replace(microsecond=0).isoformat(),
token_owner=token_owner.name,
)
- self.token = getUtility(IPendings).add(pendable, timedelta(days=3650))
+ self.token = pendings.add(pendable, timedelta(days=3650))
def _step_sanity_checks(self):
# Ensure that we have both an address and a user, even if the address