+
+
+@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})