mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-08 10:22:46 +00:00
update admin log
1. add log when admin create repo 1. add log when admin batch delete user 1. update test
This commit is contained in:
@@ -9,6 +9,8 @@ from seahub.admin_log.signals import admin_operation
|
|||||||
|
|
||||||
## operation: detail
|
## operation: detail
|
||||||
|
|
||||||
|
# 'repo_create': {'id': repo_id, 'name': repo_name, 'owner': repo_owner}
|
||||||
|
REPO_CREATE = 'repo_create'
|
||||||
# 'repo_transfer': {'id': repo_id, 'name': repo_name, 'from': from_user, 'to': to_user}
|
# 'repo_transfer': {'id': repo_id, 'name': repo_name, 'from': from_user, 'to': to_user}
|
||||||
REPO_TRANSFER = 'repo_transfer'
|
REPO_TRANSFER = 'repo_transfer'
|
||||||
# 'repo_delete': {'id': repo_id, 'name': repo_name, 'owner': repo_owner}
|
# 'repo_delete': {'id': repo_id, 'name': repo_name, 'owner': repo_owner}
|
||||||
|
@@ -18,7 +18,7 @@ from seahub.base.accounts import User
|
|||||||
from seahub.signals import repo_deleted
|
from seahub.signals import repo_deleted
|
||||||
from seahub.views import get_system_default_repo_id
|
from seahub.views import get_system_default_repo_id
|
||||||
from seahub.admin_log.signals import admin_operation
|
from seahub.admin_log.signals import admin_operation
|
||||||
from seahub.admin_log.models import REPO_DELETE, REPO_TRANSFER
|
from seahub.admin_log.models import REPO_CREATE, REPO_DELETE, REPO_TRANSFER
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from seahub.settings import MULTI_TENANCY
|
from seahub.settings import MULTI_TENANCY
|
||||||
@@ -168,6 +168,15 @@ class AdminLibraries(APIView):
|
|||||||
error_msg = 'Internal Server Error'
|
error_msg = 'Internal Server Error'
|
||||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||||
|
|
||||||
|
# send admin operation log signal
|
||||||
|
admin_op_detail = {
|
||||||
|
"id": repo_id,
|
||||||
|
"name": repo_name,
|
||||||
|
"owner": repo_owner,
|
||||||
|
}
|
||||||
|
admin_operation.send(sender=None, admin_name=request.user.username,
|
||||||
|
operation=REPO_CREATE, detail=admin_op_detail)
|
||||||
|
|
||||||
repo = seafile_api.get_repo(repo_id)
|
repo = seafile_api.get_repo(repo_id)
|
||||||
repo_info = get_repo_info(repo)
|
repo_info = get_repo_info(repo)
|
||||||
return Response(repo_info)
|
return Response(repo_info)
|
||||||
|
@@ -17,6 +17,8 @@ from seahub.api2.utils import api_error
|
|||||||
|
|
||||||
from seahub.base.accounts import User
|
from seahub.base.accounts import User
|
||||||
from seahub.utils.file_size import get_file_size_unit
|
from seahub.utils.file_size import get_file_size_unit
|
||||||
|
from seahub.admin_log.models import USER_DELETE
|
||||||
|
from seahub.admin_log.signals import admin_operation
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -112,4 +114,11 @@ class AdminUsersBatch(APIView):
|
|||||||
'email': email,
|
'email': email,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
# send admin operation log signal
|
||||||
|
admin_op_detail = {
|
||||||
|
"email": email,
|
||||||
|
}
|
||||||
|
admin_operation.send(sender=None, admin_name=request.user.username,
|
||||||
|
operation=USER_DELETE, detail=admin_op_detail)
|
||||||
|
|
||||||
return Response(result)
|
return Response(result)
|
||||||
|
@@ -712,8 +712,6 @@ def user_remove(request, email):
|
|||||||
|
|
||||||
user.delete()
|
user.delete()
|
||||||
messages.success(request, _(u'Successfully deleted %s') % user.username)
|
messages.success(request, _(u'Successfully deleted %s') % user.username)
|
||||||
except User.DoesNotExist:
|
|
||||||
messages.error(request, _(u'Failed to delete: the user does not exist'))
|
|
||||||
|
|
||||||
# send admin operation log signal
|
# send admin operation log signal
|
||||||
admin_op_detail = {
|
admin_op_detail = {
|
||||||
@@ -722,6 +720,9 @@ def user_remove(request, email):
|
|||||||
admin_operation.send(sender=None, admin_name=request.user.username,
|
admin_operation.send(sender=None, admin_name=request.user.username,
|
||||||
operation=USER_DELETE, detail=admin_op_detail)
|
operation=USER_DELETE, detail=admin_op_detail)
|
||||||
|
|
||||||
|
except User.DoesNotExist:
|
||||||
|
messages.error(request, _(u'Failed to delete: the user does not exist'))
|
||||||
|
|
||||||
return HttpResponseRedirect(next)
|
return HttpResponseRedirect(next)
|
||||||
|
|
||||||
@login_required
|
@login_required
|
||||||
|
@@ -36,6 +36,13 @@ define([
|
|||||||
data.admin_user_url = user_url(data.email);
|
data.admin_user_url = user_url(data.email);
|
||||||
|
|
||||||
switch(this.model.get('operation')) {
|
switch(this.model.get('operation')) {
|
||||||
|
case 'repo_create':
|
||||||
|
data.op_title = gettext("Create Library");
|
||||||
|
data.op_details = gettext("Created library {name} with {owner} as its owner")
|
||||||
|
.replace('{name}', '<span class="bold" title="' + detail.id + '">' + Common.HTMLescape(detail.name) + '</span>')
|
||||||
|
.replace('{owner}', '<a href="' + user_url(detail.owner) + '">' + Common.HTMLescape(detail.owner) + '</a>');
|
||||||
|
break;
|
||||||
|
|
||||||
case 'repo_delete':
|
case 'repo_delete':
|
||||||
data.op_title = gettext("Delete Library");
|
data.op_title = gettext("Delete Library");
|
||||||
data.op_details = gettext("Deleted library {library_name}")
|
data.op_details = gettext("Deleted library {library_name}")
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
import json
|
import json
|
||||||
from mock import patch
|
from mock import patch
|
||||||
|
|
||||||
|
from seaserv import ccnet_api
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from seahub.test_utils import BaseTestCase
|
from seahub.test_utils import BaseTestCase
|
||||||
from tests.common.utils import randstring
|
from tests.common.utils import randstring
|
||||||
@@ -17,13 +18,14 @@ class LogsTest(BaseTestCase):
|
|||||||
self.repo_id= self.repo.repo_id
|
self.repo_id= self.repo.repo_id
|
||||||
self.new_user = '%s@%s.com' % (randstring(6), randstring(6))
|
self.new_user = '%s@%s.com' % (randstring(6), randstring(6))
|
||||||
self.library_url = reverse('api-v2.1-admin-library', args=[self.repo_id])
|
self.library_url = reverse('api-v2.1-admin-library', args=[self.repo_id])
|
||||||
|
self.admin_log_url = reverse('api-v2.1-admin-admin-logs')
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
self.remove_group()
|
self.remove_group()
|
||||||
self.remove_repo()
|
self.remove_repo()
|
||||||
|
|
||||||
@patch('seahub.api2.permissions.IsProVersion.has_permission')
|
@patch('seahub.api2.permissions.IsProVersion.has_permission')
|
||||||
def test_can_get(self, mock_has_permission):
|
def test_create_group(self, mock_has_permission):
|
||||||
|
|
||||||
mock_has_permission.return_value = True
|
mock_has_permission.return_value = True
|
||||||
|
|
||||||
@@ -35,19 +37,56 @@ class LogsTest(BaseTestCase):
|
|||||||
'group_owner': self.user.email
|
'group_owner': self.user.email
|
||||||
}
|
}
|
||||||
resp = self.client.post(url, data)
|
resp = self.client.post(url, data)
|
||||||
|
json_resp = json.loads(resp.content)
|
||||||
|
group_id = json_resp['id']
|
||||||
self.assertEqual(201, resp.status_code)
|
self.assertEqual(201, resp.status_code)
|
||||||
|
|
||||||
|
# get admin log
|
||||||
|
resp = self.client.get(self.admin_log_url)
|
||||||
|
self.assertEqual(200, resp.status_code)
|
||||||
|
json_resp = json.loads(resp.content)
|
||||||
|
|
||||||
|
assert json_resp['total_count'] == 1
|
||||||
|
assert json_resp['data'][0]['operation'] == 'group_create'
|
||||||
|
|
||||||
|
self.remove_group(group_id)
|
||||||
|
|
||||||
|
@patch('seahub.api2.permissions.IsProVersion.has_permission')
|
||||||
|
def test_transfer_group(self, mock_has_permission):
|
||||||
|
|
||||||
# admin transfer group
|
# admin transfer group
|
||||||
url = reverse('api-v2.1-admin-group', args=[self.group_id])
|
url = reverse('api-v2.1-admin-group', args=[self.group_id])
|
||||||
data = 'new_owner=%s' % self.admin_name
|
data = 'new_owner=%s' % self.admin_name
|
||||||
resp = self.client.put(url, data, 'application/x-www-form-urlencoded')
|
resp = self.client.put(url, data, 'application/x-www-form-urlencoded')
|
||||||
self.assertEqual(200, resp.status_code)
|
self.assertEqual(200, resp.status_code)
|
||||||
|
|
||||||
|
# get admin log
|
||||||
|
resp = self.client.get(self.admin_log_url)
|
||||||
|
self.assertEqual(200, resp.status_code)
|
||||||
|
json_resp = json.loads(resp.content)
|
||||||
|
|
||||||
|
assert json_resp['total_count'] == 1
|
||||||
|
assert json_resp['data'][0]['operation'] == 'group_transfer'
|
||||||
|
|
||||||
|
@patch('seahub.api2.permissions.IsProVersion.has_permission')
|
||||||
|
def test_delete_group(self, mock_has_permission):
|
||||||
|
|
||||||
# admin delete group
|
# admin delete group
|
||||||
url = reverse('api-v2.1-admin-group', args=[self.group_id])
|
url = reverse('api-v2.1-admin-group', args=[self.group_id])
|
||||||
resp = self.client.delete(url)
|
resp = self.client.delete(url)
|
||||||
self.assertEqual(200, resp.status_code)
|
self.assertEqual(200, resp.status_code)
|
||||||
|
|
||||||
|
# get admin log
|
||||||
|
resp = self.client.get(self.admin_log_url)
|
||||||
|
self.assertEqual(200, resp.status_code)
|
||||||
|
json_resp = json.loads(resp.content)
|
||||||
|
|
||||||
|
assert json_resp['total_count'] == 1
|
||||||
|
assert json_resp['data'][0]['operation'] == 'group_delete'
|
||||||
|
|
||||||
|
@patch('seahub.api2.permissions.IsProVersion.has_permission')
|
||||||
|
def test_create_user(self, mock_has_permission):
|
||||||
|
|
||||||
# admin create user
|
# admin create user
|
||||||
resp = self.client.post(
|
resp = self.client.post(
|
||||||
reverse('user_add',), {
|
reverse('user_add',), {
|
||||||
@@ -58,25 +97,86 @@ class LogsTest(BaseTestCase):
|
|||||||
)
|
)
|
||||||
self.assertEqual(200, resp.status_code)
|
self.assertEqual(200, resp.status_code)
|
||||||
|
|
||||||
|
# get admin log
|
||||||
|
resp = self.client.get(self.admin_log_url)
|
||||||
|
self.assertEqual(200, resp.status_code)
|
||||||
|
json_resp = json.loads(resp.content)
|
||||||
|
|
||||||
|
assert json_resp['total_count'] == 1
|
||||||
|
assert json_resp['data'][0]['operation'] == 'user_add'
|
||||||
|
|
||||||
|
@patch('seahub.api2.permissions.IsProVersion.has_permission')
|
||||||
|
def test_delete_user(self, mock_has_permission):
|
||||||
|
|
||||||
|
# create a tmp user first
|
||||||
|
ccnet_api.add_emailuser(self.new_user, 'password', 0, 1)
|
||||||
|
|
||||||
# admin delete user
|
# admin delete user
|
||||||
resp = self.client.post(
|
resp = self.client.post(
|
||||||
reverse('user_remove', args=[self.new_user])
|
reverse('user_remove', args=[self.new_user])
|
||||||
)
|
)
|
||||||
self.assertEqual(302, resp.status_code)
|
self.assertEqual(302, resp.status_code)
|
||||||
|
|
||||||
|
# get admin log
|
||||||
|
resp = self.client.get(self.admin_log_url)
|
||||||
|
self.assertEqual(200, resp.status_code)
|
||||||
|
json_resp = json.loads(resp.content)
|
||||||
|
|
||||||
|
assert json_resp['total_count'] == 1
|
||||||
|
assert json_resp['data'][0]['operation'] == 'user_delete'
|
||||||
|
|
||||||
|
@patch('seahub.api2.permissions.IsProVersion.has_permission')
|
||||||
|
def test_transfer_library(self, mock_has_permission):
|
||||||
|
|
||||||
# admin transfer library
|
# admin transfer library
|
||||||
data = 'owner=%s' % self.admin_name
|
data = 'owner=%s' % self.admin_name
|
||||||
resp = self.client.put(self.library_url, data, 'application/x-www-form-urlencoded')
|
resp = self.client.put(self.library_url, data, 'application/x-www-form-urlencoded')
|
||||||
self.assertEqual(200, resp.status_code)
|
self.assertEqual(200, resp.status_code)
|
||||||
|
|
||||||
|
# get admin log
|
||||||
|
resp = self.client.get(self.admin_log_url)
|
||||||
|
self.assertEqual(200, resp.status_code)
|
||||||
|
json_resp = json.loads(resp.content)
|
||||||
|
|
||||||
|
assert json_resp['total_count'] == 1
|
||||||
|
assert json_resp['data'][0]['operation'] == 'repo_transfer'
|
||||||
|
|
||||||
|
@patch('seahub.api2.permissions.IsProVersion.has_permission')
|
||||||
|
def test_create_library(self, mock_has_permission):
|
||||||
|
|
||||||
|
# admin create library
|
||||||
|
url = reverse('api-v2.1-admin-libraries')
|
||||||
|
repo_name = randstring(10)
|
||||||
|
data = {
|
||||||
|
'name': repo_name,
|
||||||
|
'owner': self.user.email
|
||||||
|
}
|
||||||
|
resp = self.client.post(url, data)
|
||||||
|
json_resp = json.loads(resp.content)
|
||||||
|
repo_id = json_resp['id']
|
||||||
|
self.assertEqual(200, resp.status_code)
|
||||||
|
|
||||||
|
# get admin log
|
||||||
|
resp = self.client.get(self.admin_log_url)
|
||||||
|
self.assertEqual(200, resp.status_code)
|
||||||
|
json_resp = json.loads(resp.content)
|
||||||
|
|
||||||
|
assert json_resp['total_count'] == 1
|
||||||
|
assert json_resp['data'][0]['operation'] == 'repo_create'
|
||||||
|
|
||||||
|
self.remove_repo(repo_id)
|
||||||
|
|
||||||
|
@patch('seahub.api2.permissions.IsProVersion.has_permission')
|
||||||
|
def test_delete_library(self, mock_has_permission):
|
||||||
|
|
||||||
# admin delete library
|
# admin delete library
|
||||||
resp = self.client.delete(self.library_url)
|
resp = self.client.delete(self.library_url)
|
||||||
self.assertEqual(200, resp.status_code)
|
self.assertEqual(200, resp.status_code)
|
||||||
|
|
||||||
# get admin log list
|
# get admin log
|
||||||
url = reverse('api-v2.1-admin-admin-logs')
|
resp = self.client.get(self.admin_log_url)
|
||||||
resp = self.client.get(url)
|
|
||||||
self.assertEqual(200, resp.status_code)
|
self.assertEqual(200, resp.status_code)
|
||||||
|
|
||||||
json_resp = json.loads(resp.content)
|
json_resp = json.loads(resp.content)
|
||||||
assert json_resp['total_count'] == 7
|
|
||||||
|
assert json_resp['total_count'] == 1
|
||||||
|
assert json_resp['data'][0]['operation'] == 'repo_delete'
|
||||||
|
Reference in New Issue
Block a user