def cp_dir(src_repo_id, src_path, dst_repo_id, dst_path, obj_name, username): result = {} content_type = 'application/json; charset=utf-8' src_dir = os.path.join(src_path, obj_name) if dst_path.startswith(src_dir): error_msg = _(u'Can not copy directory %(src)s to its subdirectory %(des)s') \ % {'src': src_dir, 'des': dst_path} result['error'] = error_msg return HttpResponse(json.dumps(result), status=400, content_type=content_type) new_obj_name = check_filename_with_rename(dst_repo_id, dst_path, obj_name) try: msg_url = reverse('repo', args=[dst_repo_id]) + '?p=' + urlquote(dst_path) wingufile_api.copy_file(src_repo_id, src_path, obj_name, dst_repo_id, dst_path, new_obj_name, username) msg = _(u'Successfully copied %(name)s <a href="%(url)s">view</a>') % \ {"name":obj_name, "url":msg_url} result['msg'] = msg result['success'] = True return HttpResponse(json.dumps(result), content_type=content_type) except SearpcError, e: result['error'] = str(e) return HttpResponse(json.dumps(result), status=500, content_type=content_type)
def save_private_file_share(request, token): """ Save private share file to someone's library. """ username = request.user.username try: pfs = PrivateFileDirShare.objects.get_priv_file_dir_share_by_token(token) except PrivateFileDirShare.DoesNotExist: raise Http404 from_user = pfs.from_user to_user = pfs.to_user repo_id = pfs.repo_id path = pfs.path src_path = os.path.dirname(path) obj_name = os.path.basename(path.rstrip('/')) if username == from_user or username == to_user: dst_repo_id = request.POST.get('dst_repo') dst_path = request.POST.get('dst_path') new_obj_name = check_filename_with_rename(dst_repo_id, dst_path, obj_name) wingufile_api.copy_file(repo_id, src_path, obj_name, dst_repo_id, dst_path, new_obj_name, username) messages.success(request, _(u'Successfully saved.')) else: messages.error(request, _("You don't have permission to save %s.") % obj_name) next = request.META.get('HTTP_REFERER', None) if not next: next = SITE_ROOT return HttpResponseRedirect(next)
def save_shared_link(request): """Save public share link to one's library. """ username = request.user.username token = request.GET.get('t', '') dst_repo_id = request.POST.get('dst_repo') dst_path = request.POST.get('dst_path') try: fs = FileShare.objects.get(token=token) except FileShare.DoesNotExist: raise Http404 src_repo_id = fs.repo_id src_path = os.path.dirname(fs.path) obj_name = os.path.basename(fs.path) new_obj_name = check_filename_with_rename(dst_repo_id, dst_path, obj_name) wingufile_api.copy_file(src_repo_id, src_path, obj_name, dst_repo_id, dst_path, new_obj_name, username) messages.success(request, _(u'Successfully saved.')) next = request.META.get('HTTP_REFERER', None) if not next: next = SITE_ROOT return HttpResponseRedirect(next)
def rename_dirent(request, repo_id): """ Rename a file/dir in a repo, with ajax """ if request.method != 'POST' or not request.is_ajax(): raise Http404 result = {} username = request.user.username 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) # permission checking if check_repo_access_permission(repo.id, username) != 'rw': result['error'] = _('Permission denied') return HttpResponse(json.dumps(result), status=403, content_type=content_type) # form validation form = RepoRenameDirentForm(request.POST) if form.is_valid(): oldname = form.cleaned_data["oldname"] newname = form.cleaned_data["newname"] else: result['error'] = str(form.errors.values()[0]) return HttpResponse(json.dumps(result), status=400, content_type=content_type) if newname == oldname: return HttpResponse(json.dumps({'success': True}), content_type=content_type) # argument 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) # rename duplicate name newname = check_filename_with_rename(repo_id, parent_dir, newname) # rename file/dir try: wingufile_api.rename_file(repo_id, parent_dir, oldname, newname, username) except SearpcError, e: result['error'] = str(e) return HttpResponse(json.dumps(result), status=500, content_type=content_type)
def cp_file(src_repo_id, src_path, dst_repo_id, dst_path, obj_name, username): result = {} content_type = 'application/json; charset=utf-8' new_obj_name = check_filename_with_rename(dst_repo_id, dst_path, obj_name) try: msg_url = reverse('repo', args=[dst_repo_id]) + '?p=' + urlquote(dst_path) wingufile_api.copy_file(src_repo_id, src_path, obj_name, dst_repo_id, dst_path, new_obj_name, username) msg = _(u'Successfully copied %(name)s <a href="%(url)s">view</a>') % \ {"name":obj_name, "url":msg_url} result['msg'] = msg result['success'] = True return HttpResponse(json.dumps(result), content_type=content_type) except SearpcError, e: result['error'] = str(e) return HttpResponse(json.dumps(result), status=500, content_type=content_type)
def _decorated(request, repo_id, *args, **kwargs): if request.method != 'POST' or not request.is_ajax(): 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) # permission checking username = request.user.username if check_repo_access_permission(repo.id, username) != '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) # 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) # rename duplicate name dirent_name = check_filename_with_rename(repo.id, parent_dir, dirent_name) return func(repo.id, parent_dir, dirent_name, username)
def cp_dirents(src_repo_id, src_path, dst_repo_id, dst_path, obj_file_names, obj_dir_names, username): content_type = 'application/json; charset=utf-8' for obj_name in obj_dir_names: src_dir = os.path.join(src_path, obj_name) if dst_path.startswith(src_dir): error_msg = _(u'Can not copy directory %(src)s to its subdirectory %(des)s') \ % {'src': src_dir, 'des': dst_path} result['error'] = error_msg return HttpResponse(json.dumps(result), status=400, content_type=content_type) success = [] failed = [] url = None for obj_name in obj_file_names + obj_dir_names: new_obj_name = check_filename_with_rename(dst_repo_id, dst_path, obj_name) try: wingufile_api.copy_file(src_repo_id, src_path, obj_name, dst_repo_id, dst_path, new_obj_name, username) success.append(obj_name) except SearpcError, e: failed.append(obj_name)