from __future__ import nested_scopes
from email.Utils import parseaddr
from Mailman import mm_cfg
from Mailman import i18n
STOP = 1
def _(s): return s
PUBLICHELP = _("""
who
See everyone who is on this mailing list.
""")
MEMBERSONLYHELP = _("""
who password [address=<address>]
See everyone who is on this mailing list. The roster is limited to
list members only, and you must supply your membership password to
retrieve it. If you're posting from an address other than your
membership address, specify your membership address with
`address=<address>' (no brackets around the email address, and no
quotes!)
""")
ADMINONLYHELP = _("""
who password
See everyone who is on this mailing list. The roster is limited to
list administrators and moderators only; you must supply the list
admin or moderator password to retrieve the roster.
""")
_ = i18n._
def gethelp(mlist):
if mlist.private_roster == 0:
return _(PUBLICHELP)
elif mlist.private_roster == 1:
return _(MEMBERSONLYHELP)
elif mlist.private_roster == 2:
return _(ADMINONLYHELP)
def usage(res):
res.results.append(_('Usage:'))
res.results.append(gethelp(res.mlist))
def process(res, args):
mlist = res.mlist
address = None
password = None
ok = 0
if mlist.private_roster == 0:
if args:
usage(res)
return STOP
ok = 1
elif mlist.private_roster == 1:
if len(args) == 1:
password = args[0]
realname, address = parseaddr(res.msg['from'])
elif len(args) == 2 and args[1].startswith('address='):
password = args[0]
address = args[1][8:]
else:
usage(res)
return STOP
if mlist.isMember(address) and mlist.Authenticate(
(mm_cfg.AuthUser,
mm_cfg.AuthListModerator,
mm_cfg.AuthListAdmin),
password, address):
ok = 1
else:
if len(args) <> 1:
usage(res)
return STOP
if mlist.Authenticate((mm_cfg.AuthListModerator,
mm_cfg.AuthListAdmin),
args[0]):
ok = 1
if not ok:
res.results.append(
_('You are not allowed to retrieve the list membership.'))
return STOP
dmembers = mlist.getDigestMemberKeys()
rmembers = mlist.getRegularMemberKeys()
if not dmembers and not rmembers:
res.results.append(_('This list has no members.'))
return
def addmembers(members):
for member in members:
if mlist.getMemberOption(member, mm_cfg.ConcealSubscription):
continue
realname = mlist.getMemberName(member)
if realname:
res.results.append(' %s (%s)' % (member, realname))
else:
res.results.append(' %s' % member)
if rmembers:
res.results.append(_('Non-digest (regular) members:'))
addmembers(rmembers)
if dmembers:
res.results.append(_('Digest members:'))
addmembers(dmembers)