delete view
[qcg-portal.git] / filex / views.py
index 9aeb505..b37a6ce 100644 (file)
@@ -4,6 +4,7 @@ from django.core.exceptions import PermissionDenied, SuspiciousOperation
 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.ftp import FTPOperation, FTPException
 from filex.uploadhandler import with_ftp_upload_handler
@@ -94,3 +95,39 @@ def info(request):
             status = 403
 
         return JsonResponse({'msg': e.message}, status=status)
+
+
+@require_POST
+def delete(request):
+    check_auth(request)
+
+    # TODO data validation
+    host = request.POST.get('host')
+    path = request.POST.get('path')
+    dirs = request.POST.getlist('dirs')
+    files = request.POST.getlist('files')
+    if not host or not path or not (files or dirs):
+        raise SuspiciousOperation("No path or host or files given!")
+
+    url = 'gsiftp://' + host + path + '/'
+    ftp = FTPOperation(request.session['proxy'])
+
+    done, fail = [], {}
+
+    for name in dirs:
+        try:
+            ftp.rmdir(url + name)
+        except FTPException as e:
+            fail[name] = e.message
+        else:
+            done.append(name)
+
+    for name in files:
+        try:
+            ftp.delete(url + name)
+        except FTPException as e:
+            fail[name] = e.message
+        else:
+            done.append(name)
+
+    return JsonResponse({'done': done, 'fail': fail})