1
0
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:
lian
2017-05-23 16:05:51 +08:00
parent f79159f9d6
commit e1d0169e64
6 changed files with 142 additions and 14 deletions

View File

@@ -9,6 +9,8 @@ from seahub.admin_log.signals import admin_operation
## 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 = 'repo_transfer'
# 'repo_delete': {'id': repo_id, 'name': repo_name, 'owner': repo_owner}

View File

@@ -18,7 +18,7 @@ from seahub.base.accounts import User
from seahub.signals import repo_deleted
from seahub.views import get_system_default_repo_id
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:
from seahub.settings import MULTI_TENANCY
@@ -168,6 +168,15 @@ class AdminLibraries(APIView):
error_msg = 'Internal Server Error'
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_info = get_repo_info(repo)
return Response(repo_info)

View File

@@ -17,6 +17,8 @@ from seahub.api2.utils import api_error
from seahub.base.accounts import User
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__)
@@ -112,4 +114,11 @@ class AdminUsersBatch(APIView):
'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)

View File

@@ -712,16 +712,17 @@ def user_remove(request, email):
user.delete()
messages.success(request, _(u'Successfully deleted %s') % user.username)
# 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)
except User.DoesNotExist:
messages.error(request, _(u'Failed to delete: the user does not exist'))
# 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 HttpResponseRedirect(next)
@login_required

View File

@@ -36,6 +36,13 @@ define([
data.admin_user_url = user_url(data.email);
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':
data.op_title = gettext("Delete Library");
data.op_details = gettext("Deleted library {library_name}")

View File

@@ -1,6 +1,7 @@
import json
from mock import patch
from seaserv import ccnet_api
from django.core.urlresolvers import reverse
from seahub.test_utils import BaseTestCase
from tests.common.utils import randstring
@@ -17,13 +18,14 @@ class LogsTest(BaseTestCase):
self.repo_id= self.repo.repo_id
self.new_user = '%s@%s.com' % (randstring(6), randstring(6))
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):
self.remove_group()
self.remove_repo()
@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
@@ -35,19 +37,56 @@ class LogsTest(BaseTestCase):
'group_owner': self.user.email
}
resp = self.client.post(url, data)
json_resp = json.loads(resp.content)
group_id = json_resp['id']
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
url = reverse('api-v2.1-admin-group', args=[self.group_id])
data = 'new_owner=%s' % self.admin_name
resp = self.client.put(url, data, 'application/x-www-form-urlencoded')
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
url = reverse('api-v2.1-admin-group', args=[self.group_id])
resp = self.client.delete(url)
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
resp = self.client.post(
reverse('user_add',), {
@@ -58,25 +97,86 @@ class LogsTest(BaseTestCase):
)
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
resp = self.client.post(
reverse('user_remove', args=[self.new_user])
)
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
data = 'owner=%s' % self.admin_name
resp = self.client.put(self.library_url, data, 'application/x-www-form-urlencoded')
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
resp = self.client.delete(self.library_url)
self.assertEqual(200, resp.status_code)
# get admin log list
url = reverse('api-v2.1-admin-admin-logs')
resp = self.client.get(url)
# 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'] == 7
assert json_resp['total_count'] == 1
assert json_resp['data'][0]['operation'] == 'repo_delete'