#!/usr/local/bin/python """Process listinfo form submission, ie subscriptions or roster requests.""" __version__ = "$Revision: 482 $" import sys sys.path.append('/home/mailman/mailman/modules') import os, cgi, string from regsub import gsub import mm_utils, maillist, mm_err, mm_message, mm_cfg, htmlformat try: sys.stderr = mm_utils.StampedLogger("error", label = 'subscribe', manual_reprime=1, nofail=0) except IOError: pass # Oh well - SOL on redirect, errors show thru. NEED_CONFIRM_NOTICE = """ A request for subscription of your address to the %s@%s mailing list has been received via the web%s This is a confirmation request, to prevent anyone from subscribing you against your wishes. In order to complete this subscription you must send a confirming email, to %s, by replying to this mail, and including just the line: subscribe %s%s in the body or as the subject line. If you do not actually wish to subscribe you need not do anything. Upon subscribing you will receive a message welcoming you to the list and describing how to tailor your account. Questions or comments? Send them to """ + mm_cfg.MAILMAN_OWNER UNKNOWN_ERROR = '''An unknown error occured.
Please send mail to %s explaining exactly what you did to get this error.
''' % (mm_cfg.MAILMAN_OWNER,
mm_cfg.MAILMAN_OWNER)
doc = htmlformat.Document()
path = os.environ['PATH_INFO']
list_info = mm_utils.GetPathPieces(path)
list_name = string.lower(list_info[0])
if len(list_info) < 1:
doc.AddItem(htmlformat.Header(2, "Error"))
doc.AddItem(htmlformat.Bold("Invalid options to CGI script."))
print doc.Format()
sys.exit(0)
try:
list = maillist.MailList(list_name)
except:
doc.AddItem(htmlformat.Header(2, "Error"))
doc.AddItem(htmlformat.Bold("%s: No such list." % list_name ))
print doc.Format()
sys.exit(0)
if not list._ready:
doc.AddItem(htmlformat.Header(2, "Error"))
doc.AddItem(htmlformat.Bold("%s: No such list." % list_name ))
print doc.Format()
sys.exit(0)
form = cgi.FieldStorage()
error = 0
results = ''
def call_script(which, pathinfo):
"A little bit of a hack to call one of the scripts..."
os.environ['PATH_INFO'] = string.join(pathinfo, '/')
file = os.path.join(mm_cfg.MAILMAN_DIR, 'cgi/%s' % which)
list.Unlock()
execfile(file)
sys.exit(0)
#######
# Preliminaries done, actual processing of the form input below.
if (form.has_key("UserOptions")
or (form.has_key("info") and not form.has_key("email"))):
# Go to user options section.
if not form.has_key("info"):
doc.AddItem(htmlformat.Header(2, "Error"))
doc.AddItem(htmlformat.Bold("You must supply your email address."))
doc.AddItem(list.GetMailmanFooter())
print doc.Format()
sys.exit(0)
addr = form['info'].value
member = list.FindUser(addr)
if not list.FindUser(addr):
doc.AddItem(htmlformat.Header(2, "Error"))
doc.AddItem(htmlformat.Bold("%s has no subscribed addr %s."
% (list.real_name, addr)))
doc.AddItem(list.GetMailmanFooter())
print doc.Format()
sys.exit(0)
call_script('options', [list._internal_name, member])
if not form.has_key("email"):
error = 1
results = results + "You must supply a valid email address. ")
except mm_err.MMWebSubscribeRequiresConfirmation:
results = results + ("Confirmation from your email address is "
"required, to prevent anyone from covertly "
"subscribing you. Instructions are being "
"sent to you at %s." % email)
if os.environ.has_key('REMOTE_HOST'):
remote = ", from\n%s. " % os.environ['REMOTE_HOST']
elif os.environ.has_key('REMOTE_ADDR'):
remote = ", from\n%s." % os.environ['REMOTE_ADDR']
else:
remote = "."
if digest:
digesting = " digest"
else:
digesting = ""
list.SendTextToUser(subject = 'Subscribing to %s' % list.real_name,
recipient = email,
sender = list.GetAdminEmail(),
text = (NEED_CONFIRM_NOTICE
% (list.real_name,
list.host_name,
remote,
list.GetRequestEmail(),
pw,
digesting)),
add_headers = ["Reply-to: %s"
% list.GetRequestEmail(),
"Errors-To: %s"
% list.GetAdminEmail()])
except mm_err.MMBadEmailError:
results = results + ("Mailman won't accept the given email "
"address as a valid address. (Does it "
"have an @ in it???) ")
except mm_err.MMListNotReady:
results = results + ("The list is not fully functional, and "
"can not accept subscription requests. ")
except mm_err.MMNeedApproval, x:
results = results + ("Subscription was deferred "
"because: Your request must "
"be approved by the list admin. "
"You will receive email informing you "
"of the moderator's descision when they "
"get to your request. " % x)
except mm_err.MMHostileAddress:
results = results + ("Your subscription is not allowed because "
"the email address you gave is insecure. ")
except mm_err.MMAlreadyAMember:
results = results + "You are already subscribed! "
except:
results = results + UNKNOWN_ERROR
PrintResults()
"
else:
email = form["email"].value
if not form.has_key("pw") or not form.has_key("pw-conf"):
error = 1
results = results + "You must supply a valid password, and confirm it.
"
else:
pw = form["pw"].value
pwc = form["pw-conf"].value
if not error and (pw <> pwc):
error = 1
results = results + "Your passwords did not match.
"
if form.has_key("digest"):
digest = eval(form["digest"].value)
if not list.digestable:
digest = 0
elif not list.nondigestable:
digest = 1
def PrintResults():
replacements = list.GetStandardReplacements()
replacements['
%s