summaryrefslogtreecommitdiff
path: root/Mailman/interfaces/usermanager.py
blob: f201b3591b42f4dfebd4e882b9d3e98c4b2b6220 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
# Copyright (C) 2007 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.

"""Interface describing a user manager service."""

from zope.interface import Interface, Attribute



class IUserManager(Interface):
    """The interface of a global user manager service.

    Different user managers have different concepts of what a user is, and the
    users managed by different IUserManagers are completely independent.  This
    is how you can separate the user contexts for different domains, on a
    multiple domain system.

    There is one special roster, the null roster ('') which contains all
    IUsers in all IRosters.
    """

    def create_user(address=None, real_name=None):
        """Create and return an IUser.

        When address is given, an IAddress is also created and linked to the
        new IUser object.  If the address already exists, an
        ExistingAddressError is raised.  If the address exists but is already
        linked to another user, an AddressAlreadyLinkedError is raised.

        When real_name is given, the IUser's real_name is set to this string.
        If an IAddress is also created and linked, its real_name is set to the
        same string.
        """

    def delete_user(user):
        """Delete the given IUser."""

    def get_user(address):
        """Get the user that controls the given email address, or None.

        'address' is a text email address.
        """

    users = Attribute(
        """An iterator over all the IUsers managed by this user manager.""")

    def create_address(address, real_name=None):
        """Create and return an unlinked IAddress object.

        address is the text email address.  If real_name is not given, it
        defaults to the empty string.  If the IAddress already exists an
        ExistingAddressError is raised.
        """

    def delete_address(address):
        """Delete the given IAddress object.

        If this IAddress linked to a user, it is first unlinked before it is
        deleted.
        """

    def get_address(address):
        """Find and return an IAddress.

        'address' is a text email address.  None is returned if there is no
        registered IAddress for the given text address.
        """

    addresses = Attribute(
        """An iterator over all the IAddresses managed by this manager.""")