fix handling zip archives
[qcg-portal.git] / filex / views.py
index b72432b..a85c265 100644 (file)
@@ -5,7 +5,7 @@ from django.http import JsonResponse, StreamingHttpResponse
 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
+from filex.forms import NewDirForm, RenameForm
 
 from filex.ftp import FTPOperation, FTPException
 from filex.uploadhandler import with_ftp_upload_handler
@@ -148,8 +148,6 @@ def mkdir(request):
 
         url = 'gsiftp://' + host + path + '/' + name
 
-        print url
-
         try:
             FTPOperation(request.session['proxy']).mkdir(url)
         except FTPException as e:
@@ -160,3 +158,76 @@ def mkdir(request):
         msg = form.errors
 
     return JsonResponse({'msg': msg}, status=400)
+
+
+@require_POST
+def move(request):
+    check_auth(request)
+
+    # TODO actual data validation
+    form = RenameForm(request.POST)
+
+    if form.is_valid():
+        host = form.cleaned_data['host']
+        path = form.cleaned_data['path']
+        src = form.cleaned_data['src']
+        dst = form.cleaned_data['dst']
+
+        src_url = 'gsiftp://' + host + path + '/' + src
+        dst_url = 'gsiftp://' + host + path + '/' + dst
+
+        try:
+            FTPOperation(request.session['proxy']).move(src_url, dst_url)
+        except FTPException as e:
+            msg = e.message
+        else:
+            return JsonResponse({'success': True})
+    else:
+        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})