summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbwarsaw2001-04-02 06:23:04 +0000
committerbwarsaw2001-04-02 06:23:04 +0000
commitcab0c65c44c84f59f6346c04298471d1cf373267 (patch)
treeb3a3cb449d91e7254ff9d959f2e745228261422f
parent9ebd43d17f9459e404387d41cfca3aa906628cc1 (diff)
downloadmailman-cab0c65c44c84f59f6346c04298471d1cf373267.tar.gz
mailman-cab0c65c44c84f59f6346c04298471d1cf373267.tar.zst
mailman-cab0c65c44c84f59f6346c04298471d1cf373267.zip
-rw-r--r--Mailman/MailList.py69
1 files changed, 55 insertions, 14 deletions
diff --git a/Mailman/MailList.py b/Mailman/MailList.py
index 19bffeffa..36cad1fd4 100644
--- a/Mailman/MailList.py
+++ b/Mailman/MailList.py
@@ -52,9 +52,10 @@ from Mailman.Autoresponder import Autoresponder
from Mailman.Logging.Syslog import syslog
# other useful classes
-from Mailman.pythonlib.StringIO import StringIO
from Mailman import Message
+from Mailman import Pending
from Mailman.i18n import _
+from Mailman.pythonlib.StringIO import StringIO
EMPTYSTRING = ''
@@ -1019,8 +1020,8 @@ class MailList(MailCommandHandler, HTMLFormatter, Deliverer, ListAdmin,
self.ApprovedAddMember(name, password, digest, lang)
elif self.subscribe_policy == 1 or self.subscribe_policy == 3:
# User confirmation required
- import Pending
- cookie = Pending.new(name, password, digest, lang)
+ cookie = Pending.new(Pending.SUBSCRIPTION,
+ name, password, digest, lang)
if remote is not None:
by = " " + remote
remote = _(" from %(remote)s")
@@ -1062,21 +1063,61 @@ class MailList(MailCommandHandler, HTMLFormatter, Deliverer, ListAdmin,
'subscriptions to %(realname)s require administrator approval')
def ProcessConfirmation(self, cookie):
- import Pending
data = Pending.confirm(cookie)
if data is None:
- raise Errors.MMBadConfirmation
+ raise Errors.MMBadConfirmation, 'data is None'
try:
- addr, password, digest, lang = data
+ op, data = data
except ValueError:
- raise Errors.MMBadConfirmation
- if self.subscribe_policy == 3: # confirm + approve
- self.HoldSubscription(addr, password, digest, lang)
- name = self.real_name
- raise Errors.MMNeedApproval, _(
- 'subscriptions to %(name)s require administrator approval')
- self.ApprovedAddMember(addr, password, digest, lang)
- return addr, password, digest, lang
+ raise Errors.MMBadConfirmation, 'op-less data %s' % data
+ if op == Pending.SUBSCRIPTION:
+ try:
+ addr, password, digest, lang = data
+ except ValueError:
+ raise Errors.MMBadConfirmation, 'bad subscr data %s' % data
+ if self.subscribe_policy == 3: # confirm + approve
+ self.HoldSubscription(addr, password, digest, lang)
+ name = self.real_name
+ raise Errors.MMNeedApproval, _(
+ 'subscriptions to %(name)s require administrator approval')
+ self.ApprovedAddMember(addr, password, digest, lang)
+ return op, addr, password, digest, lang
+ elif op == Pending.UNSUBSCRIPTION:
+ addr = data
+ # Can raise MMNoSuchUserError if they unsub'd via other means
+ self.DeleteMember(addr, whence='web confirmation')
+ return op, addr
+
+ def ConfirmUnsubscription(self, addr, lang=None, remote=None):
+ if lang is None:
+ lang = self.GetPreferredLanguage(addr)
+ cookie = Pending.new(Pending.UNSUBSCRIPTION, addr)
+ confirmurl = '%s/%s' % (self.GetScriptURL('confirm', absolute=1),
+ cookie)
+ realname = self.real_name
+ if remote is not None:
+ by = " " + remote
+ remote = _(" from %(remote)s")
+ else:
+ by = ""
+ remote = ""
+ text = Utils.maketext(
+ 'unsub.txt',
+ {'email' : addr,
+ 'listaddr' : self.GetListEmail(),
+ 'listname' : realname,
+ 'cookie' : cookie,
+ 'requestaddr' : self.GetRequestEmail(),
+ 'remote' : remote,
+ 'listadmin' : self.GetAdminEmail(),
+ 'confirmurl' : confirmurl,
+ }, lang=lang)
+ msg = Message.UserNotification(
+ addr, self.GetRequestEmail(),
+ _('%(realname)s -- confirmation of removal -- confirm %(cookie)s'),
+ text)
+ msg['Reply-To'] = self.GetRequestEmail()
+ msg.send(self)
def ApprovedAddMember(self, name, password, digest,
ack=None, admin_notif=None, lang=None):