diff --git a/seahub/api2/views.py b/seahub/api2/views.py index 34b1ffc21f..c24e0b4799 100644 --- a/seahub/api2/views.py +++ b/seahub/api2/views.py @@ -292,10 +292,15 @@ class Account(APIView): copy['email'] = email serializer = AccountSerializer(data=copy) if serializer.is_valid(): - user = User.objects.create_user(serializer.object['email'], - serializer.object['password'], - serializer.object['is_staff'], - serializer.object['is_active']) + try: + user = User.objects.create_user(serializer.object['email'], + serializer.object['password'], + serializer.object['is_staff'], + serializer.object['is_active']) + except User.DoesNotExist as e: + logger.error(e) + return api_error(status.HTTP_403_FORBIDDEN, + 'Fail to add user.') self._update_account_profile(request, user.username) @@ -332,7 +337,11 @@ class Account(APIView): if is_active is not None: user.is_active = is_active - user.save() + result_code = user.save() + if result_code == -1: + return api_error(status.HTTP_403_FORBIDDEN, + 'Fail to update user.') + self._update_account_profile(request, user.username) try: diff --git a/seahub/base/accounts.py b/seahub/base/accounts.py index 88ffcd8411..d04cab0a17 100644 --- a/seahub/base/accounts.py +++ b/seahub/base/accounts.py @@ -160,15 +160,18 @@ class User(object): else: source = "LDAP" - ccnet_threaded_rpc.update_emailuser(source, - emailuser.id, - self.password, - int(self.is_staff), - int(self.is_active)) + result_code = ccnet_threaded_rpc.update_emailuser(source, + emailuser.id, + self.password, + int(self.is_staff), + int(self.is_active)) else: - ccnet_threaded_rpc.add_emailuser(self.username, self.password, - int(self.is_staff), - int(self.is_active)) + result_code = ccnet_threaded_rpc.add_emailuser(self.username, + self.password, + int(self.is_staff), + int(self.is_active)) + # -1 stands for failed; 0 stands for success + return result_code def delete(self): """ diff --git a/seahub/views/sysadmin.py b/seahub/views/sysadmin.py index 55774b5aae..ddda76d2a4 100644 --- a/seahub/views/sysadmin.py +++ b/seahub/views/sysadmin.py @@ -867,7 +867,10 @@ def user_toggle_status(request, email): try: user = User.objects.get(email) user.is_active = bool(user_status) - user.save() + result_code = user.save() + if result_code == -1: + return HttpResponse(json.dumps({'success': False}), status=403, + content_type=content_type) if user.is_active is True: try: