3 from django.core.exceptions import PermissionDenied, SuspiciousOperation
4 from django.http import JsonResponse, StreamingHttpResponse
5 from django.template.defaultfilters import filesizeformat
6 from django.utils.formats import date_format
8 from filex.ftp import FTPOperation, FTPException
9 from filex.uploadhandler import with_ftp_upload_handler
12 def check_auth(request):
13 if not request.user.is_authenticated():
14 raise PermissionDenied("Login required!")
15 if not request.session['proxy']:
16 raise PermissionDenied("No proxy found!")
19 def list_content(request):
22 # TODO data validation
23 host = request.GET.get('host')
24 path = request.GET.get('path')
25 if not host or not path:
26 raise SuspiciousOperation("No path or host given!")
28 url = 'gsiftp://' + host + path
31 listing = FTPOperation(request.session['proxy']).listing(url)
32 except FTPException as e:
33 return JsonResponse({'msg': e.message}, status=400)
36 item['size'] = filesizeformat(item['size'])
37 item['date'] = date_format(item['date'], 'DATETIME_FORMAT')
39 return JsonResponse(listing, safe=False)
42 def download(request):
45 # TODO data validation
46 host = request.GET.get('host')
47 path = request.GET.get('path')
48 name = request.GET.get('name')
49 if not host or not path or not name:
50 raise SuspiciousOperation("No path or host or name given!")
52 url = 'gsiftp://' + host + path + '/' + name
54 mime_type, encoding = mimetypes.guess_type(name)
56 response = StreamingHttpResponse(FTPOperation(request.session['proxy']).get(url),
57 content_type=mime_type or 'application/octet-stream')
58 response['Content-Disposition'] = 'attachment; filename={}'.format(name)
59 # TODO Content-Length (?)
62 response['Content-Encoding'] = encoding
67 @with_ftp_upload_handler
70 return JsonResponse({'success': True})