From cf1017513ae47020e24b7ef587e9c4f01819feea Mon Sep 17 00:00:00 2001 From: Daniel Pan Date: Mon, 20 Jun 2016 18:34:30 +0800 Subject: [PATCH] Code clean (#1217) * Use API to create file/folder instead of Ajax * Remove sub_repo AJAX api * Remove repo delete AJAX function * Remove get_group_basic_info * Add comment for get_unenc_group_repos * Remove ajax_repo_change_basic_info and ajax_repo_transfer_owner * Remove ajax_unset_inner_pub_repe and RepoPublic * Remove ajax star/unstar a file * update be shared repo api * update test public repo * Remove ajax_repo_remove_share --- seahub/api2/endpoints/be_shared_repo.py | 2 +- seahub/api2/urls.py | 7 +- seahub/api2/views.py | 54 +- seahub/share/urls.py | 1 - seahub/share/views.py | 95 +--- seahub/templates/view_file_base.html | 61 ++- seahub/urls.py | 11 - seahub/views/ajax.py | 463 +----------------- static/scripts/app/views/dir.js | 16 +- static/scripts/app/views/dirent.js | 48 +- static/scripts/app/views/organization-repo.js | 9 +- static/scripts/app/views/repo.js | 6 +- static/scripts/app/views/shared-repo.js | 10 +- static/scripts/common.js | 15 +- ...shared_repos.py => test_be_shared_repo.py} | 2 +- tests/api/test_public_repo.py | 24 +- 16 files changed, 119 insertions(+), 705 deletions(-) rename tests/api/endpoints/{test_be_shared_repos.py => test_be_shared_repo.py} (98%) diff --git a/seahub/api2/endpoints/be_shared_repo.py b/seahub/api2/endpoints/be_shared_repo.py index 2a6f33a0e2..d3402231ef 100644 --- a/seahub/api2/endpoints/be_shared_repo.py +++ b/seahub/api2/endpoints/be_shared_repo.py @@ -14,7 +14,7 @@ from seahub.utils import is_valid_username, is_org_context json_content_type = 'application/json; charset=utf-8' -class BeSharedReposView(APIView): +class BeSharedRepo(APIView): authentication_classes = (TokenAuthentication, SessionAuthentication ) permission_classes = (IsAuthenticated,) throttle_classes = (UserRateThrottle, ) diff --git a/seahub/api2/urls.py b/seahub/api2/urls.py index 4dc86e6d04..c0ec601338 100644 --- a/seahub/api2/urls.py +++ b/seahub/api2/urls.py @@ -6,7 +6,7 @@ from .views_auth import LogoutDeviceView, ClientLoginTokenView from .endpoints.dir_shared_items import DirSharedItemsEndpoint from .endpoints.account import Account from .endpoints.shared_upload_links import SharedUploadLinksView -from .endpoints.be_shared_repo import BeSharedReposView +from .endpoints.be_shared_repo import BeSharedRepo from .endpoints.file_comment import FileCommentView from .endpoints.file_comments import FileCommentsView from .endpoints.file_comments_counts import FileCommentsCounts @@ -41,7 +41,6 @@ urlpatterns = patterns('', url(r'^repos/(?P[-0-9a-f]{36})/history-limit/$', RepoHistoryLimit.as_view(), name="api2-repo-history-limit"), url(r'^repos/(?P[-0-9a-f]{36})/download-info/$', DownloadRepo.as_view()), url(r'^repos/(?P[-0-9a-f]{36})/owner/$', RepoOwner.as_view(), name="api2-repo-owner"), - url(r'^repos/(?P[-0-9a-f]{36})/public/$', RepoPublic.as_view()), url(r'^repos/(?P[-0-9a-f]{36})/download-shared-links/$', RepoDownloadSharedLinks.as_view(), name="api2-repo-download-shared-links"), url(r'^repos/(?P[-0-9a-f]{36})/download-shared-links/(?P[a-f0-9]{10})/$', RepoDownloadSharedLink.as_view(), name="api2-repo-download-shared-link"), url(r'^repos/(?P[-0-9a-f]{36})/upload-shared-links/$', RepoUploadSharedLinks.as_view(), name="api2-repo-upload-shared-links"), @@ -71,8 +70,8 @@ urlpatterns = patterns('', url(r'^devices/', DevicesView.as_view(), name='api2-devices'), url(r'^shared-repos/$', SharedRepos.as_view(), name='sharedrepos'), url(r'^shared-repos/(?P[-0-9-a-f]{36})/$', SharedRepo.as_view(), name='sharedrepo'), - url(r'^beshared-repos/$', BeShared.as_view(), name='beshared'), - url(r'^beshared-repos/(?P[-0-9-a-f]{36})/$', BeSharedReposView.as_view(), name='beshared-repos'), + url(r'^beshared-repos/$', BeSharedRepos.as_view(), name='beshared-repos'), + url(r'^beshared-repos/(?P[-0-9-a-f]{36})/$', BeSharedRepo.as_view(), name='beshared-repo'), url(r'^default-repo/$', DefaultRepoView.as_view(), name='api2-defaultrepo'), url(r'^send-share-link/$', SendShareLinkView.as_view(), name='api2-send-share-link'), url(r'^send-upload-link/$', SendUploadLinkView.as_view(), name='api2-send-upload-link'), diff --git a/seahub/api2/views.py b/seahub/api2/views.py index d8f1c4c04b..af05283945 100644 --- a/seahub/api2/views.py +++ b/seahub/api2/views.py @@ -1033,58 +1033,6 @@ class DownloadRepo(APIView): return repo_download_info(request, repo_id) -class RepoPublic(APIView): - authentication_classes = (TokenAuthentication, SessionAuthentication) - permission_classes = (IsAuthenticated, ) - throttle_classes = (UserRateThrottle, ) - - def post(self, request, repo_id, format=None): - """Set organization library. - """ - repo = get_repo(repo_id) - if not repo: - return api_error(status.HTTP_404_NOT_FOUND, 'Library %s not found.' % repo_id) - - if not is_org_repo_creation_allowed(request): - return api_error(status.HTTP_403_FORBIDDEN, - 'Permission denied.') - - if check_permission(repo_id, request.user.username) != 'rw': - return api_error(status.HTTP_403_FORBIDDEN, - 'You do not have permission to access this library.') - - try: - seafile_api.add_inner_pub_repo(repo_id, "r") - except: - return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, - 'Unable to make library public') - - return HttpResponse(json.dumps({'success': True}), status=200, - content_type=json_content_type) - - def delete(self, request, repo_id, format=None): - """Unset organization library. - """ - username = request.user.username - - repo = get_repo(repo_id) - if not repo: - return api_error(status.HTTP_404_NOT_FOUND, 'Library not found.') - - if not request.user.is_staff and \ - not seafile_api.is_repo_owner(username, repo_id): - return api_error(status.HTTP_403_FORBIDDEN, - 'You do not have permission to unshare library.') - - try: - seafile_api.remove_inner_pub_repo(repo_id) - except: - return api_error(status.HTTP_500_INTERNAL_SERVER_ERROR, - 'Unable to make library private') - - return HttpResponse(json.dumps({'success': True}), status=200, - content_type=json_content_type) - class RepoOwner(APIView): authentication_classes = (TokenAuthentication, SessionAuthentication) @@ -2750,7 +2698,7 @@ class SharedRepos(APIView): return HttpResponse(json.dumps(shared_repos, cls=SearpcObjEncoder), status=200, content_type=json_content_type) -class BeShared(APIView): +class BeSharedRepos(APIView): """ List repos that others/groups share to user. """ diff --git a/seahub/share/urls.py b/seahub/share/urls.py index ecb1f36fb2..89c33bb7c7 100644 --- a/seahub/share/urls.py +++ b/seahub/share/urls.py @@ -14,7 +14,6 @@ urlpatterns = patterns('', url(r'^ajax/upload_link/remove/$', ajax_remove_shared_upload_link, name='ajax_remove_shared_upload_link'), url(r'^upload_link/send/$', send_shared_upload_link, name='send_shared_upload_link'), url(r'^permission_admin/$', share_permission_admin, name='share_permission_admin'), - url(r'^ajax/repo_remove_share/$', ajax_repo_remove_share, name='ajax_repo_remove_share'), url(r'^ajax/get-download-link/$', ajax_get_download_link, name='ajax_get_download_link'), url(r'^ajax/get-upload-link/$', ajax_get_upload_link, name='ajax_get_upload_link'), url(r'^ajax/private-share-dir/$', ajax_private_share_dir, name='ajax_private_share_dir'), diff --git a/seahub/share/views.py b/seahub/share/views.py index 77bcd1a2a9..0bc290ce26 100644 --- a/seahub/share/views.py +++ b/seahub/share/views.py @@ -42,7 +42,7 @@ from seahub.profile.models import Profile # Get an instance of a logger logger = logging.getLogger(__name__) -########## rpc wrapper +########## rpc wrapper def is_org_repo_owner(username, repo_id): owner = seaserv.seafserv_threaded_rpc.get_org_repo_owner(repo_id) return True if owner == username else False @@ -226,93 +226,6 @@ def share_repo(request): return HttpResponseRedirect(next) -@login_required_ajax -@require_POST -def ajax_repo_remove_share(request): - """ - Remove repo shared to user/group/public - """ - content_type = 'application/json; charset=utf-8' - - repo_id = request.POST.get('repo_id', None) - share_type = request.POST.get('share_type', None) - - if not seafile_api.get_repo(repo_id): - return HttpResponse(json.dumps({'error': _(u'Library does not exist')}), status=400, - content_type=content_type) - - username = request.user.username - - if share_type == 'personal': - - from_email = request.POST.get('from', None) - if not is_valid_username(from_email): - return HttpResponse(json.dumps({'error': _(u'Invalid argument')}), status=400, - content_type=content_type) - - if is_org_context(request): - org_id = request.user.org.org_id - org_remove_share(org_id, repo_id, from_email, username) - else: - seaserv.remove_share(repo_id, from_email, username) - return HttpResponse(json.dumps({'success': True}), status=200, - content_type=content_type) - - elif share_type == 'group': - - from_email = request.POST.get('from', None) - if not is_valid_username(from_email): - return HttpResponse(json.dumps({'error': _(u'Invalid argument')}), status=400, - content_type=content_type) - - group_id = request.POST.get('group_id', None) - group = seaserv.get_group(group_id) - if not group: - return HttpResponse(json.dumps({'error': _(u"Group does not exist")}), status=400, - content_type=content_type) - - if seaserv.check_group_staff(group_id, username) or \ - seafile_api.is_repo_owner(username, repo_id): - if is_org_group(group_id): - org_id = get_org_id_by_group(group_id) - del_org_group_repo(repo_id, org_id, group_id) - else: - seafile_api.unset_group_repo(repo_id, group_id, from_email) - return HttpResponse(json.dumps({'success': True}), status=200, - content_type=content_type) - else: - return HttpResponse(json.dumps({'error': _(u'Permission denied')}), status=400, - content_type=content_type) - - elif share_type == 'public': - - if is_org_context(request): - - org_repo_owner = seafile_api.get_org_repo_owner(repo_id) - is_org_repo_owner = True if org_repo_owner == username else False - if request.user.org.is_staff or is_org_repo_owner: - org_id = request.user.org.org_id - seaserv.seafserv_threaded_rpc.unset_org_inner_pub_repo(org_id, - repo_id) - return HttpResponse(json.dumps({'success': True}), status=200, - content_type=content_type) - else: - return HttpResponse(json.dumps({'error': _(u'Permission denied')}), status=403, - content_type=content_type) - - else: - if seafile_api.is_repo_owner(username, repo_id) or \ - request.user.is_staff: - unset_inner_pub_repo(repo_id) - return HttpResponse(json.dumps({'success': True}), status=200, - content_type=content_type) - else: - return HttpResponse(json.dumps({'error': _(u'Permission denied')}), status=403, - content_type=content_type) - else: - return HttpResponse(json.dumps({'error': _(u'Invalid argument')}), status=400, - content_type=content_type) - @login_required @require_POST def repo_remove_share(request): @@ -460,7 +373,7 @@ def list_shared_repos(request): """ List user repos shared to users/groups/public. """ share_out_repos = list_share_out_repos(request) - + out_repos = [] for repo in share_out_repos: if repo.is_virtual: # skip virtual repos @@ -671,7 +584,7 @@ def share_permission_admin(request): ########## share link @login_required_ajax -@require_POST +@require_POST def ajax_remove_shared_link(request): username = request.user.username content_type = 'application/json; charset=utf-8' @@ -699,7 +612,7 @@ def ajax_remove_shared_link(request): @login_required_ajax -@require_POST +@require_POST def ajax_remove_shared_upload_link(request): username = request.user.username content_type = 'application/json; charset=utf-8' diff --git a/seahub/templates/view_file_base.html b/seahub/templates/view_file_base.html index c808b420bb..2fc8ec378f 100644 --- a/seahub/templates/view_file_base.html +++ b/seahub/templates/view_file_base.html @@ -184,23 +184,40 @@ $('#share').click(function() { // star file $('#file-star').click(function() { var op_icon = $(this), url_base; + url_base = '{% url "starredfiles" %}'; if (op_icon.hasClass('icon-star-empty')) { - url_base = '{% url 'repo_star_file' repo.id %}'; + // star the file + $.ajax({ + url: url_base, + cache: false, + dataType: 'json', + type: 'POST', + beforeSend: prepareCSRFToken, + data: { + 'repo_id': "{{ repo.id }}", + 'p': "{{ path|escapejs }}" + }, + success:function(data) { + op_icon.toggleClass('icon-star-empty icon-star'); + }, + error: ajaxErrorHandler + }); } else { - url_base = '{% url 'repo_unstar_file' repo.id %}'; + // unstar + $.ajax({ + url: url_base + '?p=' + e("{{path|escapejs}}") + '&repo_id=' + "{{ repo.id }}", + cache: false, + dataType: 'json', + type: 'DELETE', + beforeSend: prepareCSRFToken, + success:function(data) { + op_icon.toggleClass('icon-star-empty icon-star'); + }, + error: ajaxErrorHandler + }); } - $.ajax({ - url: url_base + '?file=' + e("{{path|escapejs}}"), - cache: false, - dataType: 'json', - success:function(data) { - op_icon.toggleClass('icon-star-empty icon-star'); - }, - error: ajaxErrorHandler - }); - return false; }); @@ -299,7 +316,7 @@ $(window).load(function() { var fileDiscussions = { $el: $('#file-discussions'), - tmpl: _.template($('#discussion-panel-tmpl').html()), + tmpl: _.template($('#discussion-panel-tmpl').html()), init: function() { var _this = this; @@ -322,7 +339,7 @@ var fileDiscussions = { this.$el.on('click', '.js-del-msg', function() { _this.delOne({ id: $(this).attr('data-id'), - $el: $(this).closest('.msg') + $el: $(this).closest('.msg') }); return false; }); @@ -374,7 +391,7 @@ var fileDiscussions = { _this.$listContainer.show(); _this.scrollConToBottom(); } else { - _this.$emptyTip.show(); + _this.$emptyTip.show(); } }, error: function(xhr) { @@ -413,10 +430,10 @@ var fileDiscussions = { data: {'comment': msg}, success: function(data) { _this.$msgInput.val(''); - _this.addOne(data); + _this.addOne(data); if (_this.$emptyTip.is(':visible')) { _this.$emptyTip.hide(); - _this.$listContainer.show(); + _this.$listContainer.show(); } _this.scrollConToBottom(); }, @@ -435,7 +452,7 @@ var fileDiscussions = { }); }, - itemTmpl: _.template($('#discussion-tmpl').html()), + itemTmpl: _.template($('#discussion-tmpl').html()), addOne: function(obj) { var can_delete_msg = false; @@ -516,8 +533,8 @@ var fileDiscussions = { return "{% trans "Just now" %}"; } else { return m.fromNow(); - } - } + } + } }; // init fileDiscussions.init(); @@ -529,10 +546,10 @@ $(document).keydown(function(e) { // ESCAPE key pressed if (e.which == 27) { fileDiscussions.hide(); - } + } }); $(window).resize(function() { fileDiscussions.setConHeight(); -}); +}); {% endblock %} diff --git a/seahub/urls.py b/seahub/urls.py index 17f7bfba5f..dfefc83e65 100644 --- a/seahub/urls.py +++ b/seahub/urls.py @@ -124,26 +124,20 @@ urlpatterns = patterns( url(r'^choose_register/$', TemplateView.as_view(template_name="choose_register.html"), name="choose_register"), ### Ajax ### - (r'^ajax/repo/(?P[-0-9a-f]{36})/remove/$', repo_remove), url(r'^ajax/repo/(?P[-0-9a-f]{36})/dirents/$', get_dirents, name="get_dirents"), url(r'^ajax/repo/(?P[-0-9a-f]{36})/dirents/delete/$', delete_dirents, name='delete_dirents'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/dirents/move/$', mv_dirents, name='mv_dirents'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/dirents/copy/$', cp_dirents, name='cp_dirents'), - url(r'^ajax/repo/(?P[-0-9a-f]{36})/dir/new/$', new_dir, name='new_dir'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/dir/rename/$', rename_dirent, name='rename_dir'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/dir/delete/$', delete_dirent, name='delete_dir'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/dir/mv/$', mv_dir, name='mv_dir'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/dir/cp/$', cp_dir, name='cp_dir'), - url(r'^ajax/repo/(?P[-0-9a-f]{36})/dir/sub_repo/$', sub_repo, name='sub_repo'), url(r'^ajax/cp_progress/$', get_cp_progress, name='get_cp_progress'), url(r'^ajax/cancel_cp/$', cancel_cp, name='cancel_cp'), - url(r'^ajax/repo/(?P[-0-9a-f]{36})/file/new/$', new_file, name='new_file'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/file/rename/$', rename_dirent, name='rename_file'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/file/delete/$', delete_dirent, name='delete_file'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/file/mv/$', mv_file, name='mv_file'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/file/cp/$', cp_file, name='cp_file'), - url(r'^ajax/repo/(?P[-0-9a-f]{36})/file/star/$', repo_star_file, name='repo_star_file'), - url(r'^ajax/repo/(?P[-0-9a-f]{36})/file/unstar/$', repo_unstar_file, name='repo_unstar_file'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/current_commit/$', get_current_commit, name='get_current_commit'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/history/changes/$', repo_history_changes, name='repo_history_changes'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/encrypted_file/(?P[0-9a-f]{40})/download/$', download_enc_file, name='download_enc_file'), @@ -151,7 +145,6 @@ urlpatterns = patterns( url(r'^ajax/repo/(?P[-0-9a-f]{36})/get-file-uploaded-bytes/$', get_file_uploaded_bytes, name='get_file_uploaded_bytes'), url(r'^ajax/u/d/(?P[-0-9a-f]{10})/upload/$', get_file_upload_url_ul, name='get_file_upload_url_ul'), url(r'^ajax/group/(?P\d+)/repos/$', get_unenc_group_repos, name='get_group_repos'), - url(r'^ajax/group/(?P\d+)/basic-info/$', get_group_basic_info, name='get_group_basic_info'), url(r'^ajax/group/(?P\d+)/toggle-modules/$', toggle_group_modules, name='toggle_group_modules'), url(r'^ajax/group/(?P\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'), @@ -164,8 +157,6 @@ urlpatterns = patterns( url(r'^ajax/set_notices_seen/$', set_notices_seen, name='set_notices_seen'), url(r'^ajax/set_notice_seen_by_id/$', set_notice_seen_by_id, name='set_notice_seen_by_id'), url(r'^ajax/space_and_traffic/$', space_and_traffic, name='space_and_traffic'), - url(r'^ajax/repo/(?P[-0-9a-f]{36})/setting/change-basic-info/$', ajax_repo_change_basic_info, name='ajax_repo_change_basic_info'), - url(r'^ajax/repo/(?P[-0-9a-f]{36})/setting/transfer-owner/$', ajax_repo_transfer_owner, name='ajax_repo_transfer_owner'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/setting/change-passwd/$', ajax_repo_change_passwd, name='ajax_repo_change_passwd'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/get-folder-perm-by-path/$', get_folder_perm_by_path, name='get_folder_perm_by_path'), url(r'^ajax/repo/(?P[-0-9a-f]{36})/set-user-folder-perm/$', set_user_folder_perm, name='set_user_folder_perm'), @@ -178,8 +169,6 @@ urlpatterns = patterns( ## ajax lib url(r'^ajax/lib/(?P[-0-9a-f]{36})/dir/$', list_lib_dir, name="list_lib_dir"), - url(r'^ajax/unset-inner-pub-repo/(?P[-0-9a-f]{36})/$', ajax_unset_inner_pub_repo, name='ajax_unset_inner_pub_repo'), - ### Apps ### (r'^api2/', include('seahub.api2.urls')), diff --git a/seahub/views/ajax.py b/seahub/views/ajax.py index f63fd85da5..004c008439 100644 --- a/seahub/views/ajax.py +++ b/seahub/views/ajax.py @@ -172,6 +172,8 @@ def get_dirents(request, repo_id): def get_unenc_group_repos(request, group_id): ''' Get unenc repos in a group. + + Used in selecting a library for a group wiki ''' content_type = 'application/json; charset=utf-8' @@ -377,90 +379,6 @@ def list_lib_dir(request, repo_id): return HttpResponse(json.dumps(result), content_type=content_type) -def new_dirent_common(func): - """Decorator for common logic in creating directory and file. - """ - def _decorated(request, repo_id, *args, **kwargs): - if request.method != 'POST': - raise Http404 - - result = {} - content_type = 'application/json; charset=utf-8' - - repo = get_repo(repo_id) - if not repo: - result['error'] = _(u'Library does not exist.') - return HttpResponse(json.dumps(result), status=400, - content_type=content_type) - - # arguments checking - parent_dir = request.GET.get('parent_dir', None) - if not parent_dir: - result['error'] = _('Argument missing') - return HttpResponse(json.dumps(result), status=400, - content_type=content_type) - - # permission checking - username = request.user.username - if check_folder_permission(request, repo.id, parent_dir) != 'rw': - result['error'] = _('Permission denied') - return HttpResponse(json.dumps(result), status=403, - content_type=content_type) - - # form validation - form = RepoNewDirentForm(request.POST) - if form.is_valid(): - dirent_name = form.cleaned_data["dirent_name"] - else: - result['error'] = str(form.errors.values()[0]) - return HttpResponse(json.dumps(result), status=400, - content_type=content_type) - - # rename duplicate name - dirent_name = check_filename_with_rename(repo.id, parent_dir, - dirent_name) - return func(repo.id, parent_dir, dirent_name, username) - return _decorated - -@login_required_ajax -@new_dirent_common -def new_dir(repo_id, parent_dir, dirent_name, username): - """ - Create a new dir with ajax. - """ - result = {} - content_type = 'application/json; charset=utf-8' - - # create new dirent - try: - seafile_api.post_dir(repo_id, parent_dir, dirent_name, username) - except SearpcError, e: - result['error'] = str(e) - return HttpResponse(json.dumps(result), status=500, - content_type=content_type) - - return HttpResponse(json.dumps({'success': True, 'name': dirent_name}), - content_type=content_type) - -@login_required_ajax -@new_dirent_common -def new_file(repo_id, parent_dir, dirent_name, username): - """ - Create a new file with ajax. - """ - result = {} - content_type = 'application/json; charset=utf-8' - - # create new dirent - try: - seafile_api.post_empty_file(repo_id, parent_dir, dirent_name, username) - except SearpcError, e: - result['error'] = str(e) - return HttpResponse(json.dumps(result), status=500, - content_type=content_type) - - return HttpResponse(json.dumps({'success': True, 'name': dirent_name}), - content_type=content_type) @login_required_ajax def rename_dirent(request, repo_id): @@ -1046,45 +964,6 @@ def cancel_cp(request): return HttpResponse(json.dumps(result), status=400, content_type=content_type) -@login_required_ajax -def repo_star_file(request, repo_id): - content_type = 'application/json; charset=utf-8' - - user_perm = check_folder_permission(request, repo_id, '/') - if user_perm is None: - err_msg = _(u'Permission denied.') - return HttpResponse(json.dumps({'error': err_msg}), - status=403, content_type=content_type) - - path = request.GET.get('file', '') - if not path: - return HttpResponse(json.dumps({'error': _(u'Invalid arguments')}), - status=400, content_type=content_type) - - is_dir = False - star_file(request.user.username, repo_id, path, is_dir) - - return HttpResponse(json.dumps({'success':True}), content_type=content_type) - -@login_required_ajax -def repo_unstar_file(request, repo_id): - content_type = 'application/json; charset=utf-8' - - user_perm = check_folder_permission(request, repo_id, '/') - if user_perm is None: - err_msg = _(u'Permission denied.') - return HttpResponse(json.dumps({'error': err_msg}), - status=403, content_type=content_type) - - path = request.GET.get('file', '') - if not path: - return HttpResponse(json.dumps({'error': _(u'Invalid arguments')}), - status=400, content_type=content_type) - - unstar_file(request.user.username, repo_id, path) - - return HttpResponse(json.dumps({'success':True}), content_type=content_type) - ########## contacts related @login_required_ajax def get_contacts(request): @@ -1158,83 +1037,6 @@ def get_current_commit(request, repo_id): return HttpResponse(json.dumps({'html': html}), content_type=content_type) -@login_required_ajax -def sub_repo(request, repo_id): - ''' - check if a dir has a corresponding sub_repo - if it does not have, create one - ''' - username = request.user.username - content_type = 'application/json; charset=utf-8' - result = {} - - if not request.user.permissions.can_add_repo(): - result['error'] = _(u"You do not have permission to create library") - return HttpResponse(json.dumps(result), status=403, - content_type=content_type) - - origin_repo = seafile_api.get_repo(repo_id) - if origin_repo is None: - result['error'] = _('Repo not found.') - return HttpResponse(json.dumps(result), status=400, - content_type=content_type) - - # perm check, only repo owner can create sub repo - if is_org_context(request): - repo_owner = seafile_api.get_org_repo_owner(origin_repo.id) - else: - repo_owner = seafile_api.get_repo_owner(origin_repo.id) - - is_repo_owner = True if username == repo_owner else False - if not is_repo_owner: - result['error'] = _(u"You do not have permission to create library") - return HttpResponse(json.dumps(result), status=403, - content_type=content_type) - - path = request.GET.get('p') - if not path: - result['error'] = _('Argument missing') - return HttpResponse(json.dumps(result), status=400, content_type=content_type) - name = os.path.basename(path) - - # check if the sub-lib exist - try: - if is_org_context(request): - org_id = request.user.org.org_id - sub_repo = seaserv.seafserv_threaded_rpc.get_org_virtual_repo( - org_id, repo_id, path, username) - else: - sub_repo = seafile_api.get_virtual_repo(repo_id, path, username) - except SearpcError as e: - logger.error(e) - result['error'] = _('Failed to create sub library, please try again later.') - return HttpResponse(json.dumps(result), status=500, content_type=content_type) - - if sub_repo: - result['sub_repo_id'] = sub_repo.id - else: - # create a sub-lib - try: - # use name as 'repo_name' & 'repo_desc' for sub_repo - if is_org_context(request): - org_id = request.user.org.org_id - sub_repo_id = seaserv.seafserv_threaded_rpc.create_org_virtual_repo( - org_id, repo_id, path, name, name, username) - else: - sub_repo_id = seafile_api.create_virtual_repo(repo_id, path, - name, name, - username) - result['sub_repo_id'] = sub_repo_id - result['name'] = name - result['abbrev_origin_path'] = get_sub_repo_abbrev_origin_path( - origin_repo.name, path) - - except SearpcError as e: - logger.error(e) - result['error'] = _('Failed to create sub library, please try again later.') - return HttpResponse(json.dumps(result), status=500, content_type=content_type) - - return HttpResponse(json.dumps(result), content_type=content_type) @login_required_ajax def download_enc_file(request, repo_id, file_id): @@ -1423,54 +1225,6 @@ def set_notice_seen_by_id(request): return HttpResponse(json.dumps({'success': True}), content_type=content_type) -@login_required_ajax -@require_POST -def repo_remove(request, repo_id): - ct = 'application/json; charset=utf-8' - result = {} - - repo = get_repo(repo_id) - username = request.user.username - if is_org_context(request): - # Remove repo in org context, only (repo owner/org staff) can perform - # this operation. - org_id = request.user.org.org_id - is_org_staff = request.user.org.is_staff - org_repo_owner = seafile_api.get_org_repo_owner(repo_id) - if is_org_staff or org_repo_owner == username: - # Must get related useres before remove the repo - usernames = get_related_users_by_org_repo(org_id, repo_id) - seafile_api.remove_repo(repo_id) - if repo: # send delete signal only repo is valid - repo_deleted.send(sender=None, - org_id=org_id, - usernames=usernames, - repo_owner=username, - repo_id=repo_id, - repo_name=repo.name) - result['success'] = True - return HttpResponse(json.dumps(result), content_type=ct) - else: - result['error'] = _(u'Permission denied.') - return HttpResponse(json.dumps(result), status=403, content_type=ct) - else: - # Remove repo in personal context, only (repo owner) can perform this - # operation. - if validate_owner(request, repo_id): - usernames = get_related_users_by_repo(repo_id) - seafile_api.remove_repo(repo_id) - if repo: # send delete signal only repo is valid - repo_deleted.send(sender=None, - org_id=-1, - usernames=usernames, - repo_owner=username, - repo_id=repo_id, - repo_name=repo.name) - result['success'] = True - return HttpResponse(json.dumps(result), content_type=ct) - else: - result['error'] = _(u'Permission denied.') - return HttpResponse(json.dumps(result), status=403, content_type=ct) @login_required_ajax def space_and_traffic(request): @@ -1806,119 +1560,6 @@ def _create_repo_common(request, repo_name, repo_desc, encryption, return repo_id -@login_required_ajax -def ajax_repo_change_basic_info(request, repo_id): - """Handle post request to change library basic info. - """ - if request.method != 'POST': - raise Http404 - - content_type = 'application/json; charset=utf-8' - username = request.user.username - - repo = seafile_api.get_repo(repo_id) - if not repo: - raise Http404 - - # no settings for virtual repo - if ENABLE_SUB_LIBRARY and repo.is_virtual: - raise Http404 - - # check permission - if is_org_context(request): - repo_owner = seafile_api.get_org_repo_owner(repo.id) - else: - repo_owner = seafile_api.get_repo_owner(repo.id) - is_owner = True if username == repo_owner else False - if not is_owner: - raise Http404 - - form = RepoSettingForm(request.POST) - if not form.is_valid(): - return HttpResponse(json.dumps({ - 'error': str(form.errors.values()[0]) - }), status=400, content_type=content_type) - - repo_name = form.cleaned_data['repo_name'] - days = form.cleaned_data['days'] - - # Edit library info (name, descryption). - if repo.name != repo_name: - if not edit_repo(repo_id, repo_name, '', username): # set desc as '' - err_msg = _(u'Failed to edit library information.') - return HttpResponse(json.dumps({'error': err_msg}), - status=500, content_type=content_type) - - # set library history - if days is not None and config.ENABLE_REPO_HISTORY_SETTING: - res = seafile_api.set_repo_history_limit(repo_id, days) - if res != 0: - return HttpResponse(json.dumps({ - 'error': _(u'Failed to save settings on server') - }), status=400, content_type=content_type) - - messages.success(request, _(u'Settings saved.')) - return HttpResponse(json.dumps({'success': True}), - content_type=content_type) - -@login_required_ajax -def ajax_repo_transfer_owner(request, repo_id): - """Handle post request to transfer library owner. - """ - if request.method != 'POST': - raise Http404 - - content_type = 'application/json; charset=utf-8' - username = request.user.username - - repo = seafile_api.get_repo(repo_id) - if not repo: - raise Http404 - - # check permission - if is_org_context(request): - repo_owner = seafile_api.get_org_repo_owner(repo.id) - else: - repo_owner = seafile_api.get_repo_owner(repo.id) - is_owner = True if username == repo_owner else False - if not is_owner: - raise Http404 - - # check POST arg - repo_owner = request.POST.get('repo_owner', '').lower() - if not is_valid_username(repo_owner): - return HttpResponse(json.dumps({ - 'error': _('Username %s is not valid.') % repo_owner, - }), status=400, content_type=content_type) - - try: - User.objects.get(email=repo_owner) - except User.DoesNotExist: - return HttpResponse(json.dumps({ - 'error': _('User %s is not found.') % repo_owner, - }), status=400, content_type=content_type) - - if is_org_context(request): - org_id = request.user.org.org_id - if not seaserv.ccnet_threaded_rpc.org_user_exists(org_id, repo_owner): - return HttpResponse(json.dumps({ - 'error': _('User %s is not in current organization.') % - repo_owner,}), status=400, content_type=content_type) - - if repo_owner and repo_owner != username: - if is_org_context(request): - org_id = request.user.org.org_id - seafile_api.set_org_repo_owner(org_id, repo_id, repo_owner) - else: - if ccnet_threaded_rpc.get_orgs_by_user(repo_owner): - return HttpResponse(json.dumps({ - 'error': _('Can not transfer library to organization user %s.') % repo_owner, - }), status=400, content_type=content_type) - else: - seafile_api.set_repo_owner(repo_id, repo_owner) - - return HttpResponse(json.dumps({'success': True}), content_type=content_type) - @login_required_ajax def ajax_repo_change_passwd(request, repo_id): """Handle ajax post request to change library password. @@ -2283,40 +1924,6 @@ def add_group_folder_perm(request, repo_id, group_ids, path, perm): data = json.dumps({"error": _("Failed")}) return HttpResponse(data, status=400, content_type=content_type) -@login_required_ajax -def get_group_basic_info(request, group_id): - ''' - Get group basic info for group side nav - ''' - - content_type = 'application/json; charset=utf-8' - result = {} - - group_id_int = int(group_id) # Checked by URL Conf - group = get_group(group_id_int) - if not group: - result["error"] = _('Group does not exist.') - return HttpResponse(json.dumps(result), - status=400, content_type=content_type) - - group.is_staff = is_group_staff(group, request.user) - if PublicGroup.objects.filter(group_id=group.id): - group.is_pub = True - else: - group.is_pub = False - - mods_available = get_available_mods_by_group(group.id) - mods_enabled = get_enabled_mods_by_group(group.id) - - return HttpResponse(json.dumps({ - "id": group.id, - "name": group.group_name, - "avatar": grp_avatar(group.id, 32), - "is_staff": group.is_staff, - "is_pub": group.is_pub, - "mods_available": mods_available, - "mods_enabled": mods_enabled, - }), content_type=content_type) @login_required_ajax def toggle_group_modules(request, group_id): @@ -2367,73 +1974,13 @@ def toggle_personal_modules(request): return HttpResponse(json.dumps({ "success": True }), content_type=content_type) -@login_required_ajax -@require_POST -def ajax_unset_inner_pub_repo(request, repo_id): - """ - Unshare repos in organization. - - """ - content_type = 'application/json; charset=utf-8' - result = {} - - repo = get_repo(repo_id) - if not repo: - result["error"] = _('Library does not exist.') - return HttpResponse(json.dumps(result), - status=400, content_type=content_type) - - perm = request.POST.get('permission', None) - if perm is None: - result["error"] = _(u'Argument missing') - return HttpResponse(json.dumps(result), - status=400, content_type=content_type) - - # permission check - username = request.user.username - if is_org_context(request): - org_id = request.user.org.org_id - repo_owner = seafile_api.get_org_repo_owner(repo.id) - is_repo_owner = True if repo_owner == username else False - if not (request.user.org.is_staff or is_repo_owner): - result["error"] = _('Permission denied.') - return HttpResponse(json.dumps(result), - status=403, content_type=content_type) - else: - repo_owner = seafile_api.get_repo_owner(repo.id) - is_repo_owner = True if repo_owner == username else False - if not (request.user.is_staff or is_repo_owner): - result["error"] = _('Permission denied.') - return HttpResponse(json.dumps(result), - status=403, content_type=content_type) - - try: - if is_org_context(request): - org_id = request.user.org.org_id - seaserv.seafserv_threaded_rpc.unset_org_inner_pub_repo(org_id, - repo.id) - else: - seaserv.unset_inner_pub_repo(repo.id) - - origin_repo_id, origin_path = get_origin_repo_info(repo.id) - if origin_repo_id is not None: - perm_repo_id = origin_repo_id - perm_path = origin_path - else: - perm_repo_id = repo.id - perm_path = '/' - - send_perm_audit_msg('delete-repo-perm', username, 'all', \ - perm_repo_id, perm_path, perm) - - return HttpResponse(json.dumps({"success": True}), content_type=content_type) - except SearpcError: - return HttpResponse(json.dumps({"error": _('Internal server error')}), - status=500, content_type=content_type) @login_required_ajax def ajax_group_members_import(request, group_id): """Import users to group. + + Permission checking: + 1. Only group admin can add import group members """ result = {} diff --git a/static/scripts/app/views/dir.js b/static/scripts/app/views/dir.js index bf8900e7bc..85f0654b4d 100644 --- a/static/scripts/app/views/dir.js +++ b/static/scripts/app/views/dir.js @@ -510,19 +510,19 @@ define([ return false; }; - var post_data = {'dirent_name': dirent_name}, + var post_data = { 'operation': 'mkdir' }, post_url = Common.getUrl({name: "new_dir", repo_id: dir.repo_id}) - + '?parent_dir=' + encodeURIComponent(dir.path); + + '?p=' + encodeURIComponent(Common.pathJoin([dir.path, dirent_name])); var after_op_success = function(data) { $.modal.close(); var new_dirent = dir.add({ 'is_dir': true, - 'obj_name': data['name'], + 'obj_name': data['obj_name'], 'perm': 'rw', 'last_modified': new Date().getTime() / 1000, 'last_update': gettext("Just now"), - 'p_dpath': data['p_dpath'] + 'p_dpath': Common.pathJoin([dir.path, data['obj_name']]) }, {silent:true}); dirView.addNewDir(new_dirent); }; @@ -574,15 +574,15 @@ define([ return false; } - var post_data = {'dirent_name': dirent_name}, + var post_data = { 'operation': 'create' }, post_url = Common.getUrl({name: "new_file", repo_id: dir.repo_id}) - + '?parent_dir=' + encodeURIComponent(dir.path); + + '?p=' + encodeURIComponent(Common.pathJoin([dir.path, dirent_name])); var after_op_success = function(data) { $.modal.close(); var new_dirent = dir.add({ 'is_file': true, - 'is_img': Common.imageCheck(data['name']), - 'obj_name': data['name'], + 'is_img': Common.imageCheck(data['obj_name']), + 'obj_name': data['obj_name'], 'file_size': Common.fileSizeFormat(0), 'obj_id': '0000000000000000000000000000000000000000', 'file_icon': 'file.png', diff --git a/static/scripts/app/views/dirent.js b/static/scripts/app/views/dirent.js index 56f54ada6d..7ffbbfa4a3 100644 --- a/static/scripts/app/views/dirent.js +++ b/static/scripts/app/views/dirent.js @@ -122,25 +122,41 @@ define([ var _this = this; var dir = this.dirView.dir; var starred = this.model.get('starred'); - var options = { repo_id: dir.repo_id }; - options.name = starred ? 'unstar_file' : 'star_file'; var filePath = Common.pathJoin([dir.path, this.model.get('obj_name')]); - var url = Common.getUrl(options) + '?file=' + encodeURIComponent(filePath); - $.ajax({ - url: url, - dataType: 'json', - cache: false, - success: function () { - if (starred) { + if (starred) { + $.ajax({ + url: Common.getUrl({'name':'starred_files'}) + + '?repo_id=' + dir.repo_id + '&p=' + encodeURIComponent(filePath), + type: 'DELETE', + cache: false, + dataType: 'json', + beforeSend: Common.prepareCSRFToken, + success: function() { _this.model.set({'starred':false}); - } else { - _this.model.set({'starred':true}); + }, + error: function(xhr) { + Common.ajaxErrorHandler(xhr); } - }, - error: function (xhr) { - Common.ajaxErrorHandler(xhr); - } - }); + }); + } else { + $.ajax({ + url: Common.getUrl({'name':'starred_files'}), + type: 'POST', + cache: false, + dataType: 'json', + beforeSend: Common.prepareCSRFToken, + data: { + 'repo_id': dir.repo_id, + 'p': filePath + }, + success: function() { + _this.model.set({'starred':true}); + }, + error: function(xhr) { + Common.ajaxErrorHandler(xhr); + } + }); + } return false; }, diff --git a/static/scripts/app/views/organization-repo.js b/static/scripts/app/views/organization-repo.js index 82d4f528ae..765d4a2506 100644 --- a/static/scripts/app/views/organization-repo.js +++ b/static/scripts/app/views/organization-repo.js @@ -37,13 +37,10 @@ define([ var lib_name = this.model.get('name'); $.ajax({ url: Common.getUrl({ - name: 'ajax_unset_inner_pub_repo', + name: 'shared_repos', repo_id: this.model.get('id') - }), - type: 'POST', - data: { - 'permission': this.model.get('permission') - }, + }) + "?share_type=public", + type: 'DELETE', beforeSend: Common.prepareCSRFToken, dataType: 'json', success: function () { diff --git a/static/scripts/app/views/repo.js b/static/scripts/app/views/repo.js index 55c0bee752..8cc7691f13 100644 --- a/static/scripts/app/views/repo.js +++ b/static/scripts/app/views/repo.js @@ -61,11 +61,11 @@ define([ var popupContent = gettext("Are you sure you want to delete %s ?").replace('%s', '' + Common.HTMLescape(repo_name) + ''); var yesCallback = function() { $.ajax({ - url: Common.getUrl({'name':'repo_del', 'repo_id': _this.model.get('id')}), - type: 'POST', + url: Common.getUrl({'name':'repo', 'repo_id': _this.model.get('id')}), + type: 'DELETE', cache: false, - beforeSend: Common.prepareCSRFToken, dataType: 'json', + beforeSend: Common.prepareCSRFToken, success: function() { _this.$el.remove(); Common.feedback(gettext("Successfully deleted."), 'success'); diff --git a/static/scripts/app/views/shared-repo.js b/static/scripts/app/views/shared-repo.js index b42096a10c..261f74530f 100644 --- a/static/scripts/app/views/shared-repo.js +++ b/static/scripts/app/views/shared-repo.js @@ -33,14 +33,10 @@ define([ }; $.ajax({ - url: Common.getUrl({name: 'ajax_repo_remove_share'}), - type: 'POST', + url: Common.getUrl({name: 'beshared_repo', repo_id: this.model.get('id')}) + + "?share_type=personal&from=" + encodeURIComponent(this.model.get('owner')), + type: 'DELETE', beforeSend: Common.prepareCSRFToken, - data: { - 'repo_id': this.model.get('id'), - 'from': this.model.get('owner'), - 'share_type': this.model.get('share_type') - }, dataType: 'json', success: success_callback }); diff --git a/static/scripts/common.js b/static/scripts/common.js index 4c24e31683..4d2087dce3 100644 --- a/static/scripts/common.js +++ b/static/scripts/common.js @@ -76,20 +76,18 @@ define([ switch (options.name) { // File Operations case 'list_lib_dir': return siteRoot + 'ajax/lib/' + options.repo_id + '/dir/'; - case 'star_file': return siteRoot + 'ajax/repo/' + options.repo_id + '/file/star/'; - case 'unstar_file': return siteRoot + 'ajax/repo/' + options.repo_id + '/file/unstar/'; - case 'del_dir': return siteRoot + 'api2/repos/' + options.repo_id + '/dir/'; + case 'del_dir': return siteRoot + 'api/v2.1/repos/' + options.repo_id + '/dir/'; case 'del_file': return siteRoot + 'api/v2.1/repos/' + options.repo_id + '/file/'; case 'download_dirents': return siteRoot + 'api/v2.1/repos/' + options.repo_id + '/dirents/download-link/'; - case 'rename_dir': return siteRoot + 'api2/repos/' + options.repo_id + '/dir/'; + case 'rename_dir': return siteRoot + 'api/v2.1/repos/' + options.repo_id + '/dir/'; case 'rename_file': return siteRoot + 'api/v2.1/repos/' + options.repo_id + '/file/'; case 'mv_dir': return siteRoot + 'ajax/repo/' + options.repo_id + '/dir/mv/'; case 'cp_dir': return siteRoot + 'ajax/repo/' + options.repo_id + '/dir/cp/'; case 'mv_file': return siteRoot + 'ajax/repo/' + options.repo_id + '/file/mv/'; case 'cp_file': return siteRoot + 'ajax/repo/' + options.repo_id + '/file/cp/'; case 'lock_or_unlock_file': return siteRoot + 'api/v2.1/repos/' + options.repo_id + '/file/'; - case 'new_dir': return siteRoot + 'ajax/repo/' + options.repo_id + '/dir/new/'; - case 'new_file': return siteRoot + 'ajax/repo/' + options.repo_id + '/file/new/'; + case 'new_dir': return siteRoot + 'api/v2.1/repos/' + options.repo_id + '/dir/'; + case 'new_file': return siteRoot + 'api/v2.1/repos/' + options.repo_id + '/file/'; case 'del_dirents': return siteRoot + 'ajax/repo/' + options.repo_id + '/dirents/delete/'; case 'mv_dirents': return siteRoot + 'ajax/repo/' + options.repo_id + '/dirents/move/'; case 'cp_dirents': return siteRoot + 'ajax/repo/' + options.repo_id + '/dirents/copy/'; @@ -102,17 +100,14 @@ define([ // Repos case 'repos': return siteRoot + 'api2/repos/'; case 'pub_repos': return siteRoot + 'api2/repos/public/'; - case 'repo_del': return siteRoot + 'ajax/repo/' + options.repo_id + '/remove/'; - case 'sub_repo': return siteRoot + 'ajax/repo/' + options.repo_id + '/dir/sub_repo/'; case 'get_my_unenc_repos': return siteRoot + 'ajax/my-unenc-repos/'; case 'unenc_rw_repos': return siteRoot + 'ajax/unenc-rw-repos/'; case 'api_v2.1_repo_set_password': return siteRoot + 'api/v2.1/repos/' + options.repo_id + '/set-password/'; case 'get_folder_perm_by_path': return siteRoot + 'ajax/repo/' + options.repo_id + '/get-folder-perm-by-path/'; case 'get_history_changes': return siteRoot + 'ajax/repo/' + options.repo_id + '/history/changes/'; - case 'ajax_repo_remove_share': return siteRoot + 'share/ajax/repo_remove_share/'; + case 'beshared_repo': return siteRoot + 'api2/beshared-repos/' + options.repo_id + '/'; case 'dir_shared_items': return siteRoot + 'api2/repos/' + options.repo_id + '/dir/shared_items/'; case 'shared_repos': return siteRoot + 'api2/shared-repos/' + options.repo_id + '/'; - case 'ajax_unset_inner_pub_repo': return siteRoot + 'ajax/unset-inner-pub-repo/' + options.repo_id + '/'; case 'repo': return siteRoot + 'api2/repos/' + options.repo_id + '/'; case 'repo_owner': return siteRoot + 'api2/repos/' + options.repo_id + '/owner/'; case 'repo_history_limit': return siteRoot + 'api2/repos/' + options.repo_id + '/history-limit/'; diff --git a/tests/api/endpoints/test_be_shared_repos.py b/tests/api/endpoints/test_be_shared_repo.py similarity index 98% rename from tests/api/endpoints/test_be_shared_repos.py rename to tests/api/endpoints/test_be_shared_repo.py index 76e34d460a..2d4bcbff98 100644 --- a/tests/api/endpoints/test_be_shared_repos.py +++ b/tests/api/endpoints/test_be_shared_repo.py @@ -5,7 +5,7 @@ from seaserv import seafile_api from seahub.test_utils import BaseTestCase -class BeSharedReposTest(BaseTestCase): +class BeSharedRepoTest(BaseTestCase): def setUp(self): self.login_as(self.admin) diff --git a/tests/api/test_public_repo.py b/tests/api/test_public_repo.py index 02852ee195..f6ba3bf073 100644 --- a/tests/api/test_public_repo.py +++ b/tests/api/test_public_repo.py @@ -11,8 +11,8 @@ class RepoPublicTest(BaseTestCase): self.repo_id = self.create_repo(name='test-admin-repo', desc='', username=self.admin.username, passwd=None) - self.url = '/api2/repos/%s/public/' % self.repo_id - self.user_repo_url = '/api2/repos/%s/public/' % self.repo.id + self.url = '/api2/shared-repos/%s/' % self.repo_id + self.user_repo_url = '/api2/shared-repos/%s/' % self.repo.id config.ENABLE_USER_CREATE_ORG_REPO = 1 @@ -24,28 +24,28 @@ class RepoPublicTest(BaseTestCase): def test_admin_can_set_pub_repo(self): self.login_as(self.admin) - resp = self.client.post(self.url) + resp = self.client.put(self.url+'?share_type=public&permission=rw') self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert json_resp['success'] is True + assert 'success' in json_resp def test_admin_can_unset_pub_repo(self): seafile_api.add_inner_pub_repo(self.repo_id, "r") self.login_as(self.admin) - resp = self.client.delete(self.url) + resp = self.client.delete(self.url+'?share_type=public') self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert json_resp['success'] is True + assert 'success' in json_resp def test_user_can_set_pub_repo(self): self.login_as(self.user) - resp = self.client.post(self.user_repo_url) + resp = self.client.put(self.user_repo_url+'?share_type=public&permission=rw') self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert json_resp['success'] is True + assert 'success' in json_resp def test_admin_can_set_pub_repo_when_setting_disalbed(self): assert bool(config.ENABLE_USER_CREATE_ORG_REPO) is True @@ -54,10 +54,10 @@ class RepoPublicTest(BaseTestCase): self.login_as(self.admin) - resp = self.client.post(self.url) + resp = self.client.put(self.url+'?share_type=public&permission=rw') self.assertEqual(200, resp.status_code) json_resp = json.loads(resp.content) - assert json_resp['success'] is True + assert 'success' in json_resp def test_user_can_not_set_pub_repo_when_setting_disalbed(self): assert bool(config.ENABLE_USER_CREATE_ORG_REPO) is True @@ -66,7 +66,5 @@ class RepoPublicTest(BaseTestCase): self.login_as(self.user) - resp = self.client.post(self.user_repo_url) + resp = self.client.put(self.user_repo_url+'?share_type=public&permission=rw') self.assertEqual(403, resp.status_code) - json_resp = json.loads(resp.content) - assert json_resp['error_msg'] == 'Permission denied.'