~barry/mailman/events-and-web

« back to all changes in this revision

Viewing changes to Mailman/Commands/cmd_password.py

  • Committer: bwarsaw
  • Date: 2002-05-02 02:54:46 UTC
  • Revision ID: vcs-imports@canonical.com-20020502025446-b313ukw9hobqh11p
New architecture for email commands.  Instead of the monolithic (and
unmaintainable) MailCommandHandler.py file, we've now got a framework
where each command is implemented in a separate file.  This means it's
both more extensible and more flexible:

- you can easily add new commands for things I haven't thought of
  <wink>, and the `help' command will automatically adjust

- you can disable commands entirely by removing the appropriate file

- you can disable, change, or add commands on a per-list (or even
  per-message or per-sender) basis

CommandRunner.py is the module that calls into this framework.  Each
command is implemented as a cmd_<command>.py file.  The `set' command
is the most complicated.  The help text is currently implemented as
module docstrings (for most commands), so the i18n catalogs must be
updated.  Also the help.txt files will be updated.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# Copyright (C) 2002 by the Free Software Foundation, Inc.
 
2
#
 
3
# This program is free software; you can redistribute it and/or
 
4
# modify it under the terms of the GNU General Public License
 
5
# as published by the Free Software Foundation; either version 2
 
6
# of the License, or (at your option) any later version.
 
7
#
 
8
# This program is distributed in the hope that it will be useful,
 
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
# GNU General Public License for more details.
 
12
#
 
13
# You should have received a copy of the GNU General Public License
 
14
# along with this program; if not, write to the Free Software
 
15
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
16
 
 
17
"""
 
18
    password [<oldpassword> <newpassword>] [address=<address>]
 
19
        Retrieve or change your password.  With no arguments, this returns
 
20
        your current password.  With arguments <oldpassword> and <newpassword>
 
21
        you can change your password.
 
22
 
 
23
        If you're posting from an address other than your membership address,
 
24
        specify your membership address with `address=<address>' (no brackets
 
25
        around the email address, and no quotes!).  Note that in this case the
 
26
        response is always sent to the subscribed address.
 
27
"""
 
28
 
 
29
from email.Utils import parseaddr
 
30
 
 
31
from Mailman import mm_cfg
 
32
from Mailman.i18n import _
 
33
 
 
34
STOP = 1
 
35
 
 
36
 
 
37
 
 
38
def gethelp(mlist):
 
39
    return _(__doc__)
 
40
 
 
41
 
 
42
 
 
43
def process(res, args):
 
44
    mlist = res.mlist
 
45
    address = None
 
46
    if not args:
 
47
        # They just want to get their existing password
 
48
        realname, address = parseaddr(res.msg['from'])
 
49
        if mlist.isMember(address):
 
50
            password = mlist.getMemberPassword(address)
 
51
            res.results.append(_('Your password is: %(password)s'))
 
52
        else:
 
53
            listname = mlist.real_name
 
54
            res.results.append(
 
55
                _('You are not a member of the %(listname)s mailing list'))
 
56
            return STOP
 
57
    elif len(args) == 1 and args[0].startswith('address='):
 
58
        # They want their password, but they're posting from a different
 
59
        # address.  We /must/ return the password to the subscribed address.
 
60
        address = args[0][8:]
 
61
        res.returnaddr = address
 
62
        if mlist.isMember(address):
 
63
            password = mlist.getMemberPassword(address)
 
64
            res.results.append(_('Your password is: %(password)s'))
 
65
        else:
 
66
            listname = mlist.real_name
 
67
            res.results.append(
 
68
                _('You are not a member of the %(listname)s mailing list'))
 
69
            return STOP
 
70
    elif len(args) == 2:
 
71
        # They are changing their password
 
72
        oldpasswd = args[0]
 
73
        newpasswd = args[1]
 
74
        realname, address = parseaddr(res.msg['from'])
 
75
        if mlist.isMember(address):
 
76
            if mlist.Authenticate((mm_cfg.AuthUser, mm_cfg.AuthListAdmin),
 
77
                                  oldpasswd, address):
 
78
                mlist.setMemberPassword(address, newpasswd)
 
79
                res.results.append(_('Password successfully changed.'))
 
80
            else:
 
81
                res.results.append(_("""\
 
82
You did not give the correct old password, so your password has not been
 
83
changed.  Use the no argument version of the password command to retrieve your
 
84
current password, then try again."""))
 
85
                res.results.append(_('\nUsage:'))
 
86
                res.results.append(gethelp(mlist))
 
87
                return STOP
 
88
        else:
 
89
            listname = mlist.real_name
 
90
            res.results.append(
 
91
                _('You are not a member of the %(listname)s mailing list'))
 
92
            return STOP
 
93
    elif len(args) == 3 and args[2].startswith('address='):
 
94
        # They want to change their password, and they're sending this from a
 
95
        # different address than what they're subscribed with.  Be sure the
 
96
        # response goes to the subscribed address.
 
97
        oldpasswd = args[0]
 
98
        newpasswd = args[1]
 
99
        address = args[2][8:]
 
100
        res.returnaddr = address
 
101
        if mlist.isMember(address):
 
102
            if mlist.Authenticate((mm_cfg.AuthUser, mm_cfg.AuthListAdmin),
 
103
                                  oldpasswd, address):
 
104
                mlist.setMemberPassword(address, newpasswd)
 
105
                res.results.append(_('Password successfully changed.'))
 
106
            else:
 
107
                res.results.append(_("""\
 
108
You did not give the correct old password, so your password has not been
 
109
changed.  Use the no argument version of the password command to retrieve your
 
110
current password, then try again."""))
 
111
                res.results.append(_('\nUsage:'))
 
112
                res.results.append(gethelp(mlist))
 
113
                return STOP
 
114
        else:
 
115
            listname = mlist.real_name
 
116
            res.results.append(
 
117
                _('You are not a member of the %(listname)s mailing list'))
 
118
            return STOP