diff options
Diffstat (limited to 'Mailman/Cgi/rmlist.py')
| -rw-r--r-- | Mailman/Cgi/rmlist.py | 243 |
1 files changed, 0 insertions, 243 deletions
diff --git a/Mailman/Cgi/rmlist.py b/Mailman/Cgi/rmlist.py deleted file mode 100644 index ac6fe3800..000000000 --- a/Mailman/Cgi/rmlist.py +++ /dev/null @@ -1,243 +0,0 @@ -# Copyright (C) 2001-2008 by the Free Software Foundation, Inc. -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, -# USA. - -"""Remove/delete mailing lists through the web.""" - -import os -import cgi -import sys -import errno -import shutil -import logging - -from Mailman import Errors -from Mailman import MailList -from Mailman import Utils -from Mailman import i18n -from Mailman.configuration import config -from Mailman.htmlformat import * - -# Set up i18n -_ = i18n._ -i18n.set_language(config.DEFAULT_SERVER_LANGUAGE) - -log = logging.getLogger('mailman.error') -mlog = logging.getLogger('mailman.mischief') - - - -def main(): - doc = Document() - doc.set_language(config.DEFAULT_SERVER_LANGUAGE) - - cgidata = cgi.FieldStorage() - parts = Utils.GetPathPieces() - - if not parts: - # Bad URL specification - title = _('Bad URL specification') - doc.SetTitle(title) - doc.AddItem( - Header(3, Bold(FontAttr(title, color='#ff0000', size='+2')))) - doc.AddItem('<hr>') - doc.AddItem(MailmanLogo()) - print doc.Format() - log.error('Bad URL specification: %s', parts) - return - - listname = parts[0].lower() - try: - mlist = MailList.MailList(listname, lock=0) - except Errors.MMListError, e: - # Avoid cross-site scripting attacks - safelistname = Utils.websafe(listname) - title = _('No such list <em>%(safelistname)s</em>') - doc.SetTitle(title) - doc.AddItem( - Header(3, - Bold(FontAttr(title, color='#ff0000', size='+2')))) - doc.AddItem('<hr>') - doc.AddItem(MailmanLogo()) - print doc.Format() - log.error('No such list "%s": %s\n', listname, e) - return - - # Now that we have a valid mailing list, set the language - i18n.set_language(mlist.preferred_language) - doc.set_language(mlist.preferred_language) - - # Be sure the list owners are not sneaking around! - if not config.OWNERS_CAN_DELETE_THEIR_OWN_LISTS: - title = _("You're being a sneaky list owner!") - doc.SetTitle(title) - doc.AddItem( - Header(3, Bold(FontAttr(title, color='#ff0000', size='+2')))) - doc.AddItem(mlist.GetMailmanFooter()) - print doc.Format() - mlog.error('Attempt to sneakily delete a list: %s', listname) - return - - if cgidata.has_key('doit'): - process_request(doc, cgidata, mlist) - print doc.Format() - return - - request_deletion(doc, mlist) - # Always add the footer and print the document - doc.AddItem(mlist.GetMailmanFooter()) - print doc.Format() - - - -def process_request(doc, cgidata, mlist): - password = cgidata.getvalue('password', '').strip() - try: - delarchives = int(cgidata.getvalue('delarchives', '0')) - except ValueError: - delarchives = 0 - - # Removing a list is limited to the list-creator (a.k.a. list-destroyer), - # the list-admin, or the site-admin. Don't use WebAuthenticate here - # because we want to be sure the actual typed password is valid, not some - # password sitting in a cookie. - if mlist.Authenticate((config.AuthCreator, - config.AuthListAdmin, - config.AuthSiteAdmin), - password) == config.UnAuthorized: - request_deletion( - doc, mlist, - _('You are not authorized to delete this mailing list')) - return - - # Do the MTA-specific list deletion tasks - if config.MTA: - modname = 'Mailman.MTA.' + config.MTA - __import__(modname) - sys.modules[modname].remove(mlist, cgi=1) - - REMOVABLES = ['lists/%s'] - - if delarchives: - REMOVABLES.extend(['archives/private/%s', - 'archives/private/%s.mbox', - 'archives/public/%s', - 'archives/public/%s.mbox', - ]) - - problems = 0 - listname = mlist.internal_name() - for dirtmpl in REMOVABLES: - dir = os.path.join(config.VAR_DIR, dirtmpl % listname) - if os.path.islink(dir): - try: - os.unlink(dir) - except OSError, e: - if e.errno not in (errno.EACCES, errno.EPERM): raise - problems += 1 - log.error('link %s not deleted due to permission problems', dir) - elif os.path.isdir(dir): - try: - shutil.rmtree(dir) - except OSError, e: - if e.errno not in (errno.EACCES, errno.EPERM): raise - problems += 1 - log.error('directory %s not deleted due to permission problems', - dir) - - title = _('Mailing list deletion results') - doc.SetTitle(title) - table = Table(border=0, width='100%') - table.AddRow([Center(Bold(FontAttr(title, size='+1')))]) - table.AddCellInfo(table.GetCurrentRowIndex(), 0, - bgcolor=config.WEB_HEADER_COLOR) - if not problems: - table.AddRow([_('''You have successfully deleted the mailing list - <b>%(listname)s</b>.''')]) - else: - sitelist = mlist.no_reply_address - table.AddRow([_('''There were some problems deleting the mailing list - <b>%(listname)s</b>. Contact your site administrator at %(sitelist)s - for details.''')]) - doc.AddItem(table) - doc.AddItem('<hr>') - doc.AddItem(_('Return to the ') + - Link(Utils.ScriptURL('listinfo'), - _('general list overview')).Format()) - doc.AddItem(_('<br>Return to the ') + - Link(Utils.ScriptURL('admin'), - _('administrative list overview')).Format()) - doc.AddItem(MailmanLogo()) - - - -def request_deletion(doc, mlist, errmsg=None): - realname = mlist.real_name - title = _('Permanently remove mailing list <em>%(realname)s</em>') - doc.SetTitle(title) - - table = Table(border=0, width='100%') - table.AddRow([Center(Bold(FontAttr(title, size='+1')))]) - table.AddCellInfo(table.GetCurrentRowIndex(), 0, - bgcolor=config.WEB_HEADER_COLOR) - - # Add any error message - if errmsg: - table.AddRow([Header(3, Bold( - FontAttr(_('Error: '), color='#ff0000', size='+2').Format() + - Italic(errmsg).Format()))]) - - table.AddRow([_("""This page allows you as the list owner, to permanent - remove this mailing list from the system. <strong>This action is not - undoable</strong> so you should undertake it only if you are absolutely - sure this mailing list has served its purpose and is no longer necessary. - - <p>Note that no warning will be sent to your list members and after this - action, any subsequent messages sent to the mailing list, or any of its - administrative addreses will bounce. - - <p>You also have the option of removing the archives for this mailing list - at this time. It is almost always recommended that you do - <strong>not</strong> remove the archives, since they serve as the - historical record of your mailing list. - - <p>For your safety, you will be asked to reconfirm the list password. - """)]) - GREY = config.WEB_ADMINITEM_COLOR - form = Form(mlist.GetScriptURL('rmlist')) - ftable = Table(border=0, cols='2', width='100%', - cellspacing=3, cellpadding=4) - - ftable.AddRow([Label(_('List password:')), PasswordBox('password')]) - ftable.AddCellInfo(ftable.GetCurrentRowIndex(), 0, bgcolor=GREY) - ftable.AddCellInfo(ftable.GetCurrentRowIndex(), 1, bgcolor=GREY) - - ftable.AddRow([Label(_('Also delete archives?')), - RadioButtonArray('delarchives', (_('No'), _('Yes')), - checked=0, values=(0, 1))]) - ftable.AddCellInfo(ftable.GetCurrentRowIndex(), 0, bgcolor=GREY) - ftable.AddCellInfo(ftable.GetCurrentRowIndex(), 1, bgcolor=GREY) - - ftable.AddRow([Center(Link( - mlist.GetScriptURL('admin'), - _('<b>Cancel</b> and return to list administration')))]) - ftable.AddCellInfo(ftable.GetCurrentRowIndex(), 0, colspan=2) - - ftable.AddRow([Center(SubmitButton('doit', _('Delete this list')))]) - ftable.AddCellInfo(ftable.GetCurrentRowIndex(), 0, colspan=2) - form.AddItem(ftable) - table.AddRow([form]) - doc.AddItem(table) |
