diff --git a/frontend/src/pages/sys-admin/admin-logs/operation-logs.js b/frontend/src/pages/sys-admin/admin-logs/operation-logs.js index f3ae46f052..df754bbada 100644 --- a/frontend/src/pages/sys-admin/admin-logs/operation-logs.js +++ b/frontend/src/pages/sys-admin/admin-logs/operation-logs.js @@ -105,6 +105,7 @@ class Item extends Component { case 'group_delete': return gettext('Delete Group'); case 'user_add': return gettext('Add User'); case 'user_delete': return gettext('Delete User'); + case 'user_migrate': return gettext('Migrate User'); default: return ''; } }; @@ -184,6 +185,12 @@ class Item extends Component { .replace('{user}', '' + detail.email+ ''); return detailText; + case 'user_migrate': + detailText = gettext('User migrate from {user_from} to {user_to}') + .replace('{user_from}', '' + detail.from + '') + .replace('{user_to}', '' + detail.to+ ''); + return detailText; + default: return ''; } }; diff --git a/seahub/admin_log/models.py b/seahub/admin_log/models.py index b577445d0a..b0373226a1 100644 --- a/seahub/admin_log/models.py +++ b/seahub/admin_log/models.py @@ -28,9 +28,12 @@ USER_ADD = 'user_add' # 'user_delete': {'email': deleted_user} USER_DELETE = 'user_delete' +# 'user_migrate': {'from': from_user, 'to': to_user} +USER_MIGRATE = 'user_migrate' + ADMIN_LOG_OPERATION_TYPE = (REPO_TRANSFER, REPO_DELETE, GROUP_CREATE, GROUP_TRANSFER, GROUP_DELETE, - USER_ADD, USER_DELETE) + USER_ADD, USER_DELETE, USER_MIGRATE) class AdminLogManager(models.Manager): diff --git a/seahub/api2/endpoints/admin/account.py b/seahub/api2/endpoints/admin/account.py index a24626d40e..af3661cefe 100644 --- a/seahub/api2/endpoints/admin/account.py +++ b/seahub/api2/endpoints/admin/account.py @@ -13,6 +13,8 @@ from rest_framework.views import APIView import seaserv from seaserv import seafile_api, ccnet_threaded_rpc, ccnet_api +from seahub.admin_log.models import USER_MIGRATE +from seahub.admin_log.signals import admin_operation from seahub.api2.authentication import TokenAuthentication from seahub.api2.serializers import AccountSerializer from seahub.api2.throttling import UserRateThrottle @@ -21,6 +23,7 @@ from seahub.base.accounts import User from seahub.base.templatetags.seahub_tags import email2nickname from seahub.profile.models import Profile, DetailedProfile from seahub.institutions.models import Institution +from seahub.share.models import UploadLinkShare, FileShare from seahub.utils import is_valid_username, is_org_context from seahub.utils.file_size import get_file_size_unit from seahub.group.utils import is_group_member @@ -107,6 +110,21 @@ class Account(APIView): if from_user == g.creator_name: ccnet_threaded_rpc.set_group_creator(g.id, to_user) + # reshare repo to links + try: + UploadLinkShare.objects.filter(username=from_user).update(username=to_user) + FileShare.objects.filter(username=from_user).update(username=to_user) + except Exception as e: + logger.error(e) + error_msg = 'Internal Server Error' + return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg) + + admin_op_detail = { + "from": from_user, + "to": to_user + } + admin_operation.send(sender=None, admin_name=request.user.username, + operation=USER_MIGRATE, detail=admin_op_detail) return Response({'success': True}) else: return api_error(status.HTTP_400_BAD_REQUEST, 'op can only be migrate.')