Example #1
0
def newfolder(request):
    """
    create a new folder
    :param request:
    :return:
    """
    if request.user.is_authenticated:

        path = request.GET.get('path', default='')

        if request.method == 'GET':
            # show form for folder creation
            params = Storage.get_path_params(path)
            return render(request, 'index/newfolder.html', params)

        elif request.method == 'POST':
            # do create the folder
            foldername = request.POST.get('foldername', default='')
            if 'foldername' == '':
                return redirect(reverse('index') + '?path=' + path)

            storage = Storage(settings.STORAGE_BASE, request.user)
            storage.create_folder(path, foldername)
            return redirect(reverse('index') + '?path=' + path)

    else:
        return render(request, 'index/index.html')
Example #2
0
def share_view(request, url_id):
    """
    show shared files and folders
    :param request:
    :param url_id: unique UUID for the share
    :return:
    """

    # search for the share
    share = Share.objects.filter(url_id=url_id)

    if len(share) > 0:
        share = share[0]
    else:
        return render(request, 'index/index.html')

    path = request.GET.get('path', default='')
    storage = Storage(settings.STORAGE_BASE, share.user)

    # limit base_path to the shared folder/file
    storage.set_base_path(storage.base_path + os.sep + share.path)
    details = storage.get_file_details(path)
    if 'is_file' in details and details['is_file']:
        # if it is a shared file just download it
        return storage.download_file(path)

    items = storage.get_items(path)
    params = Storage.get_path_params(path)
    params['details'] = details
    params['items'] = items
    params['is_share'] = True
    params['url_id'] = url_id

    return render(request, 'index/share_view.html', params)
Example #3
0
def download(request):
    """
    download a file
    :param request:
    :return:
    """
    if request.user.is_authenticated:

        path = request.GET.get('path', default='')

        storage = Storage(settings.STORAGE_BASE, request.user)
        return storage.download_file(path)

    else:
        return render(request, 'index/index.html')
Example #4
0
def share(request):
    """
    share a file or directory
    :param request:
    :return:
    """
    if request.user.is_authenticated:
        path = request.GET.get('path', default='')
        share_path = request.GET.get('share_path', default='')

        # search for an existing share for this path
        share = Share.objects.filter(user=request.user, path=share_path)
        if len(share) > 0:
            share = share[0]
        else:
            # create a new share
            share = Share.objects.create(user=request.user, path=share_path)
            share.save()

        params = Storage.get_path_params(path)
        params['share_path'] = share_path
        params['share_url'] = request.build_absolute_uri('/')[:-1] + reverse(
            'share') + '/' + str(share.url_id)
        params['url_id'] = share.url_id
        return render(request, 'index/share.html', params)

    else:
        return render(request, 'index/index.html')
Example #5
0
def search(request):
    """
    search for files and directories
    :param request:
    :return:
    """
    if request.user.is_authenticated:

        path = request.GET.get('path', default='')
        pattern = request.GET.get('pattern', default='')
        storage = Storage(settings.STORAGE_BASE, request.user)
        params = Storage.get_path_params(path)
        params['items'] = storage.search(pattern)
        params['pattern'] = pattern

        return render(request, 'index/search.html', params)
    else:
        return render(request, 'index/index.html')
Example #6
0
def delete(request):
    """
    delete a file or directory
    :param request:
    :return:
    """
    if request.user.is_authenticated:

        path = request.GET.get('path', default='')

        storage = Storage(settings.STORAGE_BASE, request.user)
        storage.delete_file(path)
        params = Storage.get_path_params(path)
        path = params['parents'][0]['path']
        return redirect(reverse('index') + '?path=' + path)

    else:
        return render(request, 'index/index.html')
Example #7
0
def edit(request):
    """
    edit or rename a file or rename a directory
    :param request:
    :return:
    """
    if request.user.is_authenticated:

        path = request.GET.get('path', default='')
        edit_path = request.GET.get('edit_path', default='')

        # Show for editing
        if request.method == 'GET':
            storage = Storage(settings.STORAGE_BASE, request.user)
            params = Storage.get_path_params(path)
            details = storage.get_file_details(edit_path)
            params['details'] = details
            params['edit_path'] = edit_path
            params['item_name'] = edit_path.rsplit(os.sep, 1)[1]
            return render(request, 'index/edit.html', params)

        # Save edited file
        elif request.method == 'POST':
            storage = Storage(settings.STORAGE_BASE, request.user)
            is_file = request.POST.get("item_type", "")
            if is_file:
                # File
                name = request.POST.get("name", "")
                content = request.POST.get("filecontent", "")
                storage.update_file(edit_path, name, content)
            else:
                # Directory
                foldername = request.POST.get("foldername", "")
                storage.update_folder(edit_path, foldername)
            return redirect(reverse('index') + '?path=' + path)

    else:
        return render(request, 'index/index.html')
Example #8
0
def upload(request):
    """
    upload a file
    :param request:
    :return:
    """
    if request.user.is_authenticated:

        path = request.GET.get('path', default='')

        if request.method == 'GET':
            # show upload form
            params = Storage.get_path_params(path)
            return render(request, 'index/upload.html', params)

        elif request.method == 'POST':
            # do save the file
            storage = Storage(settings.STORAGE_BASE, request.user)
            storage.save_file(path, request.FILES['file'])
            return redirect(reverse('index') + '?path=' + path)

    else:
        return render(request, 'index/index.html')
Example #9
0
def index(request):
    """
    Main page with files listing
    :param request:
    :return:
    """
    if request.user.is_authenticated:
        if 'path' in request.GET:
            path = request.GET['path']
            if path == os.sep:
                path = ''
        else:
            path = ''
        storage = Storage(settings.STORAGE_BASE, request.user)
        params = Storage.get_path_params(path)
        details = storage.get_file_details(path)
        items = storage.get_items(path)
        params['details'] = details
        params['items'] = items

        return render(request, 'index/index.html', params)
    else:
        return render(request, 'index/index.html')
Example #10
0
def share_delete(request, url_id):
    """
    delete a share
    :param request:
    :param url_id: unique UUID for the share
    :return:
    """
    if request.user.is_authenticated:
        # search for the share
        share = Share.objects.filter(user=request.user, url_id=url_id)
        path = ''
        if len(share) > 0:
            # get params and delete share
            share = share[0]
            params = Storage.get_path_params(share.path)
            path = params['parents'][0]['path']
            share.delete()
        return redirect(reverse('index') + '?path=' + path)

    else:
        return render(request, 'index/index.html')