diff --git a/data/model/legacy.py b/data/model/legacy.py index 49717c556..b22bd1457 100644 --- a/data/model/legacy.py +++ b/data/model/legacy.py @@ -19,7 +19,7 @@ from data.database import (User, Repository, Image, AccessToken, Role, Repositor db, BUILD_PHASE, QuayUserField, ImageStorageSignature, QueueItem, ImageStorageSignatureKind, validate_database_url, db_for_update, AccessTokenKind, Star, get_epoch_timestamp, RepositoryActionCount) -from peewee import JOIN_LEFT_OUTER, fn, SQL +from peewee import JOIN_LEFT_OUTER, fn, SQL, IntegrityError from util.validation import (validate_username, validate_email, validate_password, INVALID_PASSWORD_MESSAGE) from util.names import format_robot_username, parse_robot_username @@ -1131,9 +1131,12 @@ def change_user_tag_expiration(user, tag_expiration_s): def update_email(user, new_email, auto_verify=False): - user.email = new_email - user.verified = auto_verify - user.save() + try: + user.email = new_email + user.verified = auto_verify + user.save() + except IntegrityError: + raise DataModelException('E-mail address already used') def get_all_user_permissions(user): diff --git a/endpoints/api/superuser.py b/endpoints/api/superuser.py index 01dbc5cb2..42bf67c08 100644 --- a/endpoints/api/superuser.py +++ b/endpoints/api/superuser.py @@ -304,7 +304,7 @@ class SuperUserManagement(ApiResource): model.change_password(user, user_data['password']) if 'email' in user_data: - model.update_email(user, user_data['email']) + model.update_email(user, user_data['email'], auto_verify=True) return user_view(user) diff --git a/static/js/pages/superuser.js b/static/js/pages/superuser.js index 1d3fc7dde..f0a3c6046 100644 --- a/static/js/pages/superuser.js +++ b/static/js/pages/superuser.js @@ -124,6 +124,11 @@ $('#changePasswordModal').modal({}); }; + $scope.showChangeEmail = function(user) { + $scope.userToChange = user; + $('#changeEmailModal').modal({}); + }; + $scope.createUser = function() { $scope.creatingUser = true; $scope.createdUser = null; @@ -160,6 +165,24 @@ $('#confirmDeleteUserModal').modal({}); }; + $scope.changeUserEmail = function(user) { + $('#changeEmailModal').modal('hide'); + + var params = { + 'username': user.username + }; + + var data = { + 'email': user.newemail + }; + + ApiService.changeInstallUser(data, params).then(function(resp) { + $scope.loadUsersInternal(); + user.email = user.newemail; + delete user.newemail; + }, ApiService.errorDisplay('Could not change user')); + }; + $scope.changeUserPassword = function(user) { $('#changePasswordModal').modal('hide'); diff --git a/static/partials/super-user.html b/static/partials/super-user.html index 1326462e8..52fc67b3d 100644 --- a/static/partials/super-user.html +++ b/static/partials/super-user.html @@ -137,13 +137,9 @@