summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mailman/app/events.py2
-rw-r--r--src/mailman/app/subscriptions.py42
-rw-r--r--src/mailman/interfaces/subscriptions.py27
-rw-r--r--src/mailman/workflows/common.py31
4 files changed, 23 insertions, 79 deletions
diff --git a/src/mailman/app/events.py b/src/mailman/app/events.py
index bf7f2ece8..a3fca30a8 100644
--- a/src/mailman/app/events.py
+++ b/src/mailman/app/events.py
@@ -38,7 +38,5 @@ def initialize():
passwords.handle_ConfigurationUpdatedEvent,
style_manager.handle_ConfigurationUpdatedEvent,
subscriptions.handle_ListDeletingEvent,
- subscriptions.handle_SubscriptionConfirmationNeededEvent,
- subscriptions.handle_UnsubscriptionConfirmationNeededEvent,
switchboard.handle_ConfigurationUpdatedEvent,
])
diff --git a/src/mailman/app/subscriptions.py b/src/mailman/app/subscriptions.py
index e1c1d8993..cc28ea859 100644
--- a/src/mailman/app/subscriptions.py
+++ b/src/mailman/app/subscriptions.py
@@ -18,16 +18,11 @@
"""Handle subscriptions."""
from mailman.database.transaction import flush
-from mailman.email.message import UserNotification
from mailman.interfaces.listmanager import ListDeletingEvent
from mailman.interfaces.pending import IPendings
from mailman.interfaces.subscriptions import (
- ISubscriptionManager, ISubscriptionService,
- SubscriptionConfirmationNeededEvent,
- UnsubscriptionConfirmationNeededEvent)
-from mailman.interfaces.template import ITemplateLoader
+ ISubscriptionManager, ISubscriptionService)
from mailman.interfaces.workflows import IWorkflowStateManager
-from mailman.utilities.string import expand
from mailman.workflows.common import (PendableSubscription,
PendableUnsubscription)
from public import public
@@ -81,41 +76,6 @@ class SubscriptionManager:
getUtility(IWorkflowStateManager).discard(token)
-def _handle_confirmation_needed_events(event, template_name):
- subject = 'confirm {}'.format(event.token)
- confirm_address = event.mlist.confirm_address(event.token)
- email_address = event.email
- # Send a verification email to the address.
- template = getUtility(ITemplateLoader).get(template_name, event.mlist)
- text = expand(template, event.mlist, dict(
- token=event.token,
- subject=subject,
- confirm_email=confirm_address,
- user_email=email_address,
- # For backward compatibility.
- confirm_address=confirm_address,
- email_address=email_address,
- domain_name=event.mlist.domain.mail_host,
- contact_address=event.mlist.owner_address,
- ))
- msg = UserNotification(email_address, confirm_address, subject, text)
- msg.send(event.mlist, add_precedence=False)
-
-
-@public
-def handle_SubscriptionConfirmationNeededEvent(event):
- if not isinstance(event, SubscriptionConfirmationNeededEvent):
- return
- _handle_confirmation_needed_events(event, 'list:user:action:subscribe')
-
-
-@public
-def handle_UnsubscriptionConfirmationNeededEvent(event):
- if not isinstance(event, UnsubscriptionConfirmationNeededEvent):
- return
- _handle_confirmation_needed_events(event, 'list:user:action:unsubscribe')
-
-
@public
def handle_ListDeletingEvent(event):
"""Delete a mailing list's members when the list is being deleted."""
diff --git a/src/mailman/interfaces/subscriptions.py b/src/mailman/interfaces/subscriptions.py
index 40c66cb1f..4a82da096 100644
--- a/src/mailman/interfaces/subscriptions.py
+++ b/src/mailman/interfaces/subscriptions.py
@@ -78,33 +78,6 @@ class TokenOwner(Enum):
@public
-class SubscriptionConfirmationNeededEvent:
- """Triggered when a subscription needs confirmation.
-
- Addresses must be verified before they can receive messages or post
- to mailing list. The confirmation message is sent to the user when
- this event is triggered.
- """
- def __init__(self, mlist, token, email):
- self.mlist = mlist
- self.token = token
- self.email = email
-
-
-@public
-class UnsubscriptionConfirmationNeededEvent:
- """Triggered when an unsubscription request needs confirmation.
-
- The confirmation message is sent to the user when this event is
- triggered.
- """
- def __init__(self, mlist, token, email):
- self.mlist = mlist
- self.token = token
- self.email = email
-
-
-@public
class ISubscriptionService(Interface):
"""General subscription services."""
diff --git a/src/mailman/workflows/common.py b/src/mailman/workflows/common.py
index 8593d0997..41733f6e5 100644
--- a/src/mailman/workflows/common.py
+++ b/src/mailman/workflows/common.py
@@ -33,9 +33,8 @@ from mailman.interfaces.member import (AlreadySubscribedError, MemberRole,
MembershipIsBannedError,
NotAMemberError)
from mailman.interfaces.pending import IPendable, IPendings
-from mailman.interfaces.subscriptions import (
- SubscriptionConfirmationNeededEvent, SubscriptionPendingError, TokenOwner,
- UnsubscriptionConfirmationNeededEvent)
+from mailman.interfaces.subscriptions import (SubscriptionPendingError,
+ TokenOwner)
from mailman.interfaces.template import ITemplateLoader
from mailman.interfaces.user import IUser
from mailman.interfaces.usermanager import IUserManager
@@ -45,7 +44,6 @@ from mailman.utilities.datetime import now
from mailman.utilities.string import expand, wrap
from mailman.workflows.base import Workflow
from zope.component import getUtility
-from zope.event import notify
from zope.interface import implementer
from zope.interface.exceptions import DoesNotImplement
@@ -266,13 +264,28 @@ class RequestMixin:
self.push('do_confirm_verify')
self.save()
if self._workflow is WhichWorkflow.subscription:
- event_class = SubscriptionConfirmationNeededEvent
+ template_name = 'list:user:action:subscribe'
else:
- event_class = UnsubscriptionConfirmationNeededEvent
+ template_name = 'list:user:action:unsubscribe'
- # Triggering this event causes the confirmation message to be sent.
- notify(event_class(
- self.mlist, self.token, self.address.email))
+ subject = 'confirm {}'.format(self.token)
+ confirm_address = self.mlist.confirm_address(self.token)
+ email_address = self.address.email
+ # Send a verification email to the address.
+ template = getUtility(ITemplateLoader).get(template_name, self.mlist)
+ text = expand(template, self.mlist, dict(
+ token=self.token,
+ subject=subject,
+ confirm_email=confirm_address,
+ user_email=email_address,
+ # For backward compatibility.
+ confirm_address=confirm_address,
+ email_address=email_address,
+ domain_name=self.mlist.domain.mail_host,
+ contact_address=self.mlist.owner_address,
+ ))
+ msg = UserNotification(email_address, confirm_address, subject, text)
+ msg.send(self.mlist, add_precedence=False)
# Now we wait for the confirmation.
raise StopIteration