add saving favorite locations
[qcg-portal.git] / filex / views.py
index 68c9ad9..5d23947 100644 (file)
@@ -1,13 +1,16 @@
 import mimetypes
 
+from django.contrib.auth.decorators import login_required
 from django.core.exceptions import PermissionDenied, SuspiciousOperation
 from django.http import JsonResponse, StreamingHttpResponse
+from django.shortcuts import get_object_or_404
 from django.template.defaultfilters import filesizeformat
 from django.utils.formats import date_format
 from django.views.decorators.http import require_POST
-from filex.forms import NewDirForm, RenameForm
 
+from filex.forms import NewDirForm, RenameForm, FavoriteForm
 from filex.ftp import FTPOperation, FTPException
+from filex.models import Favorite
 from filex.uploadhandler import with_ftp_upload_handler
 
 
@@ -186,3 +189,75 @@ def move(request):
         msg = form.errors
 
     return JsonResponse({'msg': msg}, status=400)
+
+
+@require_POST
+def compress(request):
+    check_auth(request)
+
+    # TODO data validation
+    host = request.POST.get('host')
+    path = request.POST.get('path')
+    files = request.POST.getlist('files')
+    archive = request.POST.get('archive')
+    if not host or not path or not files or not archive:
+        raise SuspiciousOperation("No path or host or files or archive given!")
+
+    server = 'gsiftp://' + host
+
+    try:
+        # consume generator with command output
+        list(FTPOperation(request.session['proxy']).compress(server, path, files, archive))
+    except FTPException as e:
+        return JsonResponse({'msg': e.message}, status=400)
+    else:
+        return JsonResponse({'success': True})
+
+
+@require_POST
+def extract(request):
+    check_auth(request)
+
+    # TODO data validation
+    host = request.POST.get('host')
+    archive = request.POST.get('archive')
+    dst = request.POST.get('dst')
+    if not host or not archive or not dst:
+        raise SuspiciousOperation("No path or host or files or archive given!")
+
+    server = 'gsiftp://' + host
+
+    try:
+        # consume generator with command output
+        list(FTPOperation(request.session['proxy']).extract(server, archive, dst))
+    except FTPException as e:
+        return JsonResponse({'msg': e.message}, status=400)
+    else:
+        return JsonResponse({'success': True})
+
+
+@require_POST
+@login_required
+def fav_add(request):
+    data = request.POST.copy()
+    data['owner'] = request.user.id
+
+    form = FavoriteForm(data)
+
+    # TODO check if path exists
+    if form.is_valid():
+        instance = form.save()
+
+        return JsonResponse({'group': 'usr', 'host': instance.host, 'path': instance.path,
+                             'value': instance.host + instance.path})
+
+    return JsonResponse({'msg': form.errors}, status=400)
+
+
+@require_POST
+@login_required
+def fav_delete(request):
+    fav = get_object_or_404(Favorite, owner=request.user, host=request.POST['host'], path=request.POST['path'])
+    fav.delete()
+
+    return JsonResponse({'success': True})