def list_dir(request, repo_id): """ List directory entries in AJAX. """ if not request.is_ajax(): raise Http404 content_type = 'application/json; charset=utf-8' repo = get_repo(repo_id) if not repo: err_msg = _(u'Library does not exist.') return HttpResponse(json.dumps({'error': err_msg}), status=400, content_type=content_type) username = request.user.username user_perm = check_repo_access_permission(repo.id, username) if user_perm is None: err_msg = _(u'Permission denied.') return HttpResponse(json.dumps({'error': err_msg}), status=403, content_type=content_type) if repo.encrypted and \ (repo.enc_version == 1 or (repo.enc_version == 2 and SERVER_CRYPTO)) \ and not seafile_api.is_password_set(repo.id, username): err_msg = _(u'Library is encrypted.') return HttpResponse(json.dumps({'error': err_msg}), status=403, content_type=content_type) head_commit = get_commit(repo.head_cmmt_id) if not head_commit: err_msg = _(u'Error: no head commit id') return HttpResponse(json.dumps({'error': err_msg}), status=500, content_type=content_type) path = request.GET.get('p', '/') if path[-1] != '/': path = path + '/' more_start = None file_list, dir_list, dirent_more = get_repo_dirents(request, repo.id, head_commit, path, offset=0, limit=100) if dirent_more: more_start = 100 zipped = get_nav_path(path, repo.name) fileshare = get_fileshare(repo.id, username, path) dir_shared_link = get_dir_share_link(fileshare) ctx = { 'repo': repo, 'zipped': zipped, 'user_perm': user_perm, 'path': path, 'fileshare': fileshare, 'dir_shared_link': dir_shared_link, 'dir_list': dir_list, 'file_list': file_list, 'dirent_more': dirent_more, 'more_start': more_start, 'ENABLE_SUB_LIBRARY': settings.ENABLE_SUB_LIBRARY, } html = render_to_string('snippets/repo_dir_data.html', ctx, context_instance=RequestContext(request)) return HttpResponse(json.dumps({ 'html': html, 'path': path }), content_type=content_type)
def list_dir(request, repo_id): """ List directory entries in AJAX. """ if not request.is_ajax(): raise Http404 content_type = 'application/json; charset=utf-8' repo = get_repo(repo_id) if not repo: err_msg = _(u'Library does not exist.') return HttpResponse(json.dumps({'error': err_msg}), status=400, content_type=content_type) username = request.user.username user_perm = check_repo_access_permission(repo.id, username) if user_perm is None: err_msg = _(u'Permission denied.') return HttpResponse(json.dumps({'error': err_msg}), status=403, content_type=content_type) sub_lib_enabled = UserOptions.objects.is_sub_lib_enabled(username) try: server_crypto = UserOptions.objects.is_server_crypto(username) except CryptoOptionNotSetError: # Assume server_crypto is ``False`` if this option is not set. server_crypto = False if repo.encrypted and \ (repo.enc_version == 1 or (repo.enc_version == 2 and server_crypto)) \ and not seafile_api.is_password_set(repo.id, username): err_msg = _(u'Library is encrypted.') return HttpResponse(json.dumps({'error': err_msg}), status=403, content_type=content_type) head_commit = get_commit(repo.head_cmmt_id) if not head_commit: err_msg = _(u'Error: no head commit id') return HttpResponse(json.dumps({'error': err_msg}), status=500, content_type=content_type) path = request.GET.get('p', '/') if path[-1] != '/': path = path + '/' more_start = None file_list, dir_list, dirent_more = get_repo_dirents(request, repo.id, head_commit, path, offset=0, limit=100) if dirent_more: more_start = 100 zipped = get_nav_path(path, repo.name) fileshare = get_fileshare(repo.id, username, path) dir_shared_link = get_dir_share_link(fileshare) uploadlink = get_uploadlink(repo.id, username, path) dir_shared_upload_link = get_dir_shared_upload_link(uploadlink) ctx = { 'repo': repo, 'zipped': zipped, 'user_perm': user_perm, 'path': path, 'server_crypto': server_crypto, 'fileshare': fileshare, 'dir_shared_link': dir_shared_link, 'uploadlink': uploadlink, 'dir_shared_upload_link': dir_shared_upload_link, 'dir_list': dir_list, 'file_list': file_list, 'dirent_more': dirent_more, 'more_start': more_start, 'ENABLE_SUB_LIBRARY': settings.ENABLE_SUB_LIBRARY, "sub_lib_enabled": sub_lib_enabled, } html = render_to_string('snippets/repo_dir_data.html', ctx, context_instance=RequestContext(request)) return HttpResponse(json.dumps({'html': html, 'path': path}), content_type=content_type)