diff options
| author | Barry Warsaw | 2015-05-10 22:13:14 +0000 |
|---|---|---|
| committer | Barry Warsaw | 2015-05-10 22:13:14 +0000 |
| commit | d6e93bd29f06f0b4d73e455c0170ee1616a17e21 (patch) | |
| tree | b8aa13d329c16a0f97903d7072a99699537dd093 /src/mailman/rest/users.py | |
| parent | e214f22aeac9d037518e4de3440248c509ed14cb (diff) | |
| parent | fe57f807c0cfa36949fb8287e345002fc90948fd (diff) | |
| download | mailman-d6e93bd29f06f0b4d73e455c0170ee1616a17e21.tar.gz mailman-d6e93bd29f06f0b4d73e455c0170ee1616a17e21.tar.zst mailman-d6e93bd29f06f0b4d73e455c0170ee1616a17e21.zip | |
Diffstat (limited to 'src/mailman/rest/users.py')
| -rw-r--r-- | src/mailman/rest/users.py | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/mailman/rest/users.py b/src/mailman/rest/users.py index 7b1ec8040..4521593d4 100644 --- a/src/mailman/rest/users.py +++ b/src/mailman/rest/users.py @@ -96,12 +96,23 @@ def create_user(arguments, response): # after the fact if successful. password = arguments.pop('password', None) is_server_owner = arguments.pop('is_server_owner', False) + user_manager = getUtility(IUserManager) try: - user = getUtility(IUserManager).create_user(**arguments) + user = user_manager.create_user(**arguments) except ExistingAddressError as error: - bad_request( - response, 'Address already exists: {}'.format(error.address)) - return None + # The address already exists. If the address already has a user + # linked to it, raise an error, otherwise create a new user and link + # it to this address. + email = arguments.pop('email') + user = user_manager.get_user(email) + if user is None: + address = user_manager.get_address(email) + user = user_manager.create_user(**arguments) + user.link(address) + else: + bad_request( + response, 'User already exists: {}'.format(error.address)) + return None if password is None: # This will have to be reset since it cannot be retrieved. password = generate(int(config.passwords.password_length)) |
