from django.http import Http404 import json import requests import django.conf from datetime import datetime from sizefield.utils import filesizeformat settings = django.conf.settings.STORE_SETTINGS class Mock(object): pass def get_host(): return settings['store_url'] def post_request(url, payload): try: headers = {'content-type': 'application/json'} if settings['ssl_auth'] == 'True' and settings['basic_auth'] == 'True': r = requests.post(url, data=payload, headers=headers, verify=settings['verify_ssl'] == 'True', cert=(settings['store_client_cert'], settings['store_client_key']), auth=(settings['store_client_user'], settings['store_client_pass']) ) elif settings['ssl_auth'] == 'True': r = requests.post(url, data=payload, headers=headers, verify=settings['verify_ssl'] == 'True', cert=(settings['store_client_cert'], settings['store_client_key']) ) elif settings['basic_auth'] == 'True': r = requests.post(url, data=payload, headers=headers, verify=settings['verify_ssl'] == 'True', auth=(settings['store_client_user'], settings['store_client_pass']) ) else: r = requests.post(url, data=payload, headers=headers, verify=settings['verify_ssl'] == 'True' ) return r except: dummy = Mock() setattr(dummy, "status_code", 200) setattr(dummy, "content", "[]") return dummy def get_request(url): try: headers = {'content-type': 'application/json'} if settings['ssl_auth'] == 'True' and settings['basic_auth'] == 'True': r = requests.get( url, headers=headers, verify=settings['verify_ssl'] == 'True', cert=( settings['store_client_cert'], settings['store_client_key']), auth=( settings['store_client_user'], settings['store_client_pass'])) elif settings['ssl_auth'] == 'True': r = requests.get( url, headers=headers, verify=settings['verify_ssl'] == 'True', cert=( settings['store_client_cert'], settings['store_client_key'])) elif settings['basic_auth'] == 'True': r = requests.get( url, headers=headers, verify=settings['verify_ssl'] == 'True', auth=( settings['store_client_user'], settings['store_client_pass'])) else: r = requests.get(url, headers=headers, verify=settings['verify_ssl'] == 'True' ) return r except: dummy = Mock() setattr(dummy, "status_code", 200) setattr(dummy, "content", "[]") return dummy def listfolder(neptun, path): url = settings['store_url']+'/'+neptun payload = json.dumps({'CMD': 'LIST', 'PATH': path}) r = post_request(url, payload) if r.status_code == requests.codes.ok: tupplelist = json.loads(r.content) return tupplelist else: raise Http404 def toplist(neptun): url = settings['store_url']+'/'+neptun payload = json.dumps({'CMD': 'TOPLIST'}) r = post_request(url, payload) if r.status_code == requests.codes.ok: tupplelist = json.loads(r.content) return tupplelist else: raise Http404 def requestdownload(neptun, path): url = settings['store_url']+'/'+neptun payload = json.dumps({'CMD': 'DOWNLOAD', 'PATH': path}) r = post_request(url, payload) response = json.loads(r.content) return response['LINK'] def requestupload(neptun, path): url = settings['store_url']+'/'+neptun payload = json.dumps({'CMD': 'UPLOAD', 'PATH': path}) r = post_request(url, payload) response = json.loads(r.content) if r.status_code == requests.codes.ok: return response['LINK'] else: raise Http404 def requestremove(neptun, path): url = settings['store_url']+'/'+neptun payload = json.dumps({'CMD': 'REMOVE', 'PATH': path}) r = post_request(url, payload) if r.status_code == requests.codes.ok: return True else: return False def requestnewfolder(neptun, path): url = settings['store_url']+'/'+neptun payload = json.dumps({'CMD': 'NEW_FOLDER', 'PATH': path}) r = post_request(url, payload) if r.status_code == requests.codes.ok: return True else: return False def requestrename(neptun, old_path, new_name): url = settings['store_url']+'/'+neptun payload = json.dumps( {'CMD': 'RENAME', 'NEW_NAME': new_name, 'PATH': old_path}) r = post_request(url, payload) if r.status_code == requests.codes.ok: return True else: return False def requestquota(neptun): url = settings['store_url']+'/'+neptun r = get_request(url) if r.status_code == requests.codes.ok: return json.loads(r.content) else: return False def set_quota(neptun, quota): url = settings['store_url']+'/quota/'+neptun payload = json.dumps({'QUOTA': quota}) r = post_request(url, payload) if r.status_code == requests.codes.ok: return True else: return False def userexist(neptun): url = settings['store_url']+'/'+neptun r = get_request(url) if r.status_code == requests.codes.ok: return True else: return False def createuser(neptun, password, key_list, quota): url = settings['store_url']+'/new/'+neptun payload = json.dumps( {'SMBPASSWD': password, 'KEYS': key_list, 'QUOTA': quota}) r = post_request(url, payload) if r.status_code == requests.codes.ok: return True else: return False def updateauthorizationinfo(neptun, password, key_list): url = settings['store_url']+'/set/'+neptun payload = json.dumps({'SMBPASSWD': password, 'KEYS': key_list}) r = post_request(url, payload) if r.status_code == requests.codes.ok: return True else: return False def process_list(content): for d in content: d['human_readable_date'] = datetime.utcfromtimestamp(float( d['MTIME'])) delta = (datetime.utcnow() - d['human_readable_date']).total_seconds() d['is_new'] = delta < 5 and delta > 0 d['human_readable_size'] = ( "directory" if d['TYPE'] == "D" else filesizeformat(float(d['SIZE']))) if len(d['DIR']) == 1 and d['DIR'][0] == ".": d['directory'] = "/" else: d['directory'] = "/" + d['DIR'] + "/" d['path'] = d['directory'] d['path'] += d['NAME'] if d['TYPE'] == "D": d['path'] += "/" return sorted(content, key=lambda k: k['TYPE'])