mirror of
https://github.com/haiwen/seahub.git
synced 2025-08-02 07:47:32 +00:00
update user personal wiki module
This commit is contained in:
parent
7472c03bec
commit
d05f72b7a0
68
seahub/api2/endpoints/user_enabled_modules.py
Normal file
68
seahub/api2/endpoints/user_enabled_modules.py
Normal file
@ -0,0 +1,68 @@
|
||||
# Copyright (c) 2012-2016 Seafile Ltd.
|
||||
import logging
|
||||
|
||||
from rest_framework.authentication import SessionAuthentication
|
||||
from rest_framework.permissions import IsAuthenticated
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework import status
|
||||
|
||||
from seahub.api2.authentication import TokenAuthentication
|
||||
from seahub.api2.throttling import UserRateThrottle
|
||||
from seahub.api2.utils import api_error
|
||||
|
||||
from seahub.views.modules import MOD_PERSONAL_WIKI, enable_mod_for_user, \
|
||||
disable_mod_for_user
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
json_content_type = 'application/json; charset=utf-8'
|
||||
|
||||
class UserEnabledModulesView(APIView):
|
||||
|
||||
authentication_classes = (TokenAuthentication, SessionAuthentication)
|
||||
permission_classes = (IsAuthenticated,)
|
||||
throttle_classes = (UserRateThrottle,)
|
||||
|
||||
def post(self, request):
|
||||
""" currently only used for add personal wiki module
|
||||
|
||||
Permission checking:
|
||||
1. login user.
|
||||
2. user can add repo
|
||||
"""
|
||||
|
||||
if not request.user.permissions.can_add_repo:
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
username = request.user.username
|
||||
try:
|
||||
enable_mod_for_user(username, MOD_PERSONAL_WIKI)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
error_msg = 'Internal Server Error'
|
||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||
|
||||
return Response({'success': True})
|
||||
|
||||
def delete(self, request):
|
||||
""" currently only used for delete personal wiki module
|
||||
|
||||
Permission checking:
|
||||
1. login user.
|
||||
2. user can add repo
|
||||
"""
|
||||
|
||||
if not request.user.permissions.can_add_repo:
|
||||
error_msg = 'Permission denied.'
|
||||
return api_error(status.HTTP_403_FORBIDDEN, error_msg)
|
||||
|
||||
username = request.user.username
|
||||
try:
|
||||
disable_mod_for_user(username, MOD_PERSONAL_WIKI)
|
||||
except Exception as e:
|
||||
logger.error(e)
|
||||
error_msg = 'Internal Server Error'
|
||||
return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, error_msg)
|
||||
|
||||
return Response({'success': True})
|
@ -34,6 +34,7 @@ from seahub.api2.endpoints.query_zip_progress import QueryZipProgressView
|
||||
from seahub.api2.endpoints.invitations import InvitationsView
|
||||
from seahub.api2.endpoints.invitation import InvitationView
|
||||
from seahub.api2.endpoints.notifications import NotificationsView, NotificationView
|
||||
from seahub.api2.endpoints.user_enabled_modules import UserEnabledModulesView
|
||||
|
||||
from seahub.api2.endpoints.admin.login import Login
|
||||
from seahub.api2.endpoints.admin.file_audit import FileAudit
|
||||
@ -153,7 +154,6 @@ urlpatterns = patterns(
|
||||
url(r'^ajax/group/(?P<group_id>\d+)/repos/$', get_unenc_group_repos, name='get_group_repos'),
|
||||
url(r'^ajax/group/(?P<group_id>\d+)/toggle-modules/$', toggle_group_modules, name='toggle_group_modules'),
|
||||
url(r'^ajax/group/(?P<group_id>\d+)/members/import/$', ajax_group_members_import, name='ajax_group_members_import'),
|
||||
url(r'^ajax/toggle-personal-modules/$', toggle_personal_modules, name='toggle_personal_modules'),
|
||||
url(r'^ajax/unenc-rw-repos/$', unenc_rw_repos, name='unenc_rw_repos'),
|
||||
url(r'^ajax/upload-file-done/$', upload_file_done, name='upload_file_done'),
|
||||
url(r'^ajax/get_popup_notices/$', get_popup_notices, name='get_popup_notices'),
|
||||
@ -197,6 +197,7 @@ urlpatterns = patterns(
|
||||
url(r'^api/v2.1/invitations/(?P<token>[a-f0-9]{32})/$', InvitationView.as_view()),
|
||||
url(r'^api/v2.1/notifications/$', NotificationsView.as_view(), name='api-v2.1-notifications'),
|
||||
url(r'^api/v2.1/notification/$', NotificationView.as_view(), name='api-v2.1-notification'),
|
||||
url(r'^api/v2.1/user-enabled-modules/$', UserEnabledModulesView.as_view(), name='api-v2.1-user-enabled-module'),
|
||||
|
||||
url(r'^api/v2.1/admin/sysinfo/$', SysInfo.as_view(), name='api-v2.1-sysinfo'),
|
||||
url(r'^api/v2.1/admin/devices/$', AdminDevices.as_view(), name='api-v2.1-admin-devices'),
|
||||
|
@ -1993,28 +1993,6 @@ def toggle_group_modules(request, group_id):
|
||||
return HttpResponse(json.dumps({ "success": True }),
|
||||
content_type=content_type)
|
||||
|
||||
@login_required_ajax
|
||||
def toggle_personal_modules(request):
|
||||
|
||||
content_type = 'application/json; charset=utf-8'
|
||||
result = {}
|
||||
|
||||
if not request.user.permissions.can_add_repo:
|
||||
result["error"] = _('Permission denied.')
|
||||
return HttpResponse(json.dumps(result),
|
||||
status=403, content_type=content_type)
|
||||
|
||||
username = request.user.username
|
||||
personal_wiki = request.POST.get('personal_wiki', '')
|
||||
if personal_wiki == 'true':
|
||||
enable_mod_for_user(username, MOD_PERSONAL_WIKI)
|
||||
else:
|
||||
disable_mod_for_user(username, MOD_PERSONAL_WIKI)
|
||||
|
||||
return HttpResponse(json.dumps({ "success": True }),
|
||||
content_type=content_type)
|
||||
|
||||
|
||||
@login_required_ajax
|
||||
def ajax_group_members_import(request, group_id):
|
||||
"""Import users to group.
|
||||
|
@ -1,6 +1,5 @@
|
||||
# Copyright (c) 2012-2016 Seafile Ltd.
|
||||
from seahub.base.models import UserEnabledModule, GroupEnabledModule
|
||||
from seahub.wiki.models import PersonalWiki
|
||||
|
||||
MOD_PERSONAL_WIKI = 'personal wiki'
|
||||
MOD_GROUP_WIKI = 'group wiki'
|
||||
|
@ -93,19 +93,30 @@ define([
|
||||
var checkbox = $('[name="personal_wiki"]'),
|
||||
original_checked = checkbox.prop('checked'),
|
||||
_this = this;
|
||||
|
||||
form.submit(function() {
|
||||
var cur_checked = checkbox.prop('checked');
|
||||
if (cur_checked == original_checked) {
|
||||
return false;
|
||||
}
|
||||
Common.ajaxPost({
|
||||
form: form,
|
||||
form_id: form.attr('id'),
|
||||
post_url: Common.getUrl({
|
||||
'name': 'toggle_personal_modules'
|
||||
}),
|
||||
post_data: {'personal_wiki': cur_checked },
|
||||
after_op_success: function () {
|
||||
|
||||
var submit_btn = form.children('[type="submit"]');
|
||||
Common.disableButton(submit_btn);
|
||||
|
||||
var ajax_type = '';
|
||||
if (cur_checked) {
|
||||
ajax_type = 'POST';
|
||||
} else {
|
||||
ajax_type = 'DELETE';
|
||||
}
|
||||
|
||||
$.ajax({
|
||||
url: Common.getUrl({'name': 'user_enabled_modules'}),
|
||||
type: ajax_type,
|
||||
cache: false,
|
||||
dataType: 'json',
|
||||
beforeSend: Common.prepareCSRFToken,
|
||||
success: function() {
|
||||
if (cur_checked) {
|
||||
mods_enabled.push('personal wiki');
|
||||
} else {
|
||||
@ -116,12 +127,14 @@ define([
|
||||
}
|
||||
$.modal.close();
|
||||
_this.render();
|
||||
},
|
||||
error: function(xhr) {
|
||||
Common.ajaxErrorHandler(xhr);
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
return false;
|
||||
},
|
||||
|
||||
setCurTab: function(cur_tab, options) {
|
||||
|
@ -159,8 +159,8 @@ define([
|
||||
|
||||
case 'notifications': return siteRoot + 'api/v2.1/notifications/';
|
||||
case 'notification': return siteRoot + 'api/v2.1/notification/';
|
||||
case 'user_enabled_modules': return siteRoot + 'api/v2.1/user-enabled-modules/';
|
||||
|
||||
case 'toggle_personal_modules': return siteRoot + 'ajax/toggle-personal-modules/';
|
||||
case 'starred_files': return siteRoot + 'api2/starredfiles/';
|
||||
case 'events': return siteRoot + 'api2/events/';
|
||||
case 'devices': return siteRoot + 'api2/devices/';
|
||||
|
41
tests/api/endpoints/test_user_enabled_modules.py
Normal file
41
tests/api/endpoints/test_user_enabled_modules.py
Normal file
@ -0,0 +1,41 @@
|
||||
from seahub.test_utils import BaseTestCase
|
||||
from seahub.views.modules import enable_mod_for_user, \
|
||||
get_enabled_mods_by_user, MOD_PERSONAL_WIKI
|
||||
|
||||
class UserEnabledModulesTest(BaseTestCase):
|
||||
def setUp(self):
|
||||
self.url = '/api/v2.1/user-enabled-modules/'
|
||||
self.username = self.user.username
|
||||
|
||||
def test_can_enable_personal_wiki_module(self):
|
||||
enabled_mods = get_enabled_mods_by_user(self.username)
|
||||
assert 'personal wiki' not in enabled_mods
|
||||
|
||||
self.login_as(self.user)
|
||||
resp = self.client.post(self.url, {})
|
||||
self.assertEqual(200, resp.status_code)
|
||||
|
||||
enabled_mods = get_enabled_mods_by_user(self.username)
|
||||
assert 'personal wiki' in enabled_mods
|
||||
|
||||
def test_enable_module_with_invalid_user_permission(self):
|
||||
|
||||
resp = self.client.post(self.url, {})
|
||||
self.assertEqual(403, resp.status_code)
|
||||
|
||||
def test_can_disable_personal_wiki_module(self):
|
||||
enable_mod_for_user(self.username, MOD_PERSONAL_WIKI)
|
||||
enabled_mods = get_enabled_mods_by_user(self.username)
|
||||
assert 'personal wiki' in enabled_mods
|
||||
|
||||
self.login_as(self.user)
|
||||
resp = self.client.delete(self.url, {}, 'application/x-www-form-urlencoded')
|
||||
self.assertEqual(200, resp.status_code)
|
||||
|
||||
enabled_mods = get_enabled_mods_by_user(self.username)
|
||||
assert 'personal wiki' not in enabled_mods
|
||||
|
||||
def test_disable_module_with_invalid_user_permission(self):
|
||||
|
||||
resp = self.client.post(self.url, {})
|
||||
self.assertEqual(403, resp.status_code)
|
Loading…
Reference in New Issue
Block a user