from django.db import models from django.http import Http404 import json, requests, time import django.conf settings = django.conf.settings.STORE_SETTINGS # Create your models here. #TODO Handle exceptions locally class StoreApi: # store_url = 'https://store.cloud.ik.bme.hu' # store_url = 'http://store.cloud.ik.bme.hu:8080' # store_client_cert = '/opt/webadmin/cloud/client.crt' # store_client_key = ''/opt/webadmin/cloud/client.key # store_user = 'admin' # store_password = 'IQu8Eice' # ssl_auth = True # verify_ssl = False @staticmethod def get_host(): return settings['store_host'] @staticmethod def post_request(url, payload): 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 @staticmethod def get_request(url): 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 @staticmethod def listfolder(neptun, path): url = settings['store_url']+'/'+neptun payload = json.dumps({ 'CMD' : 'LIST', 'PATH' : path }) r = StoreApi.post_request(url, payload) if r.status_code == requests.codes.ok: tupplelist = json.loads(r.content) for item in tupplelist: item['MTIME'] = time.ctime(item['MTIME']) return tupplelist else: raise Http404 @staticmethod def toplist(neptun): url = settings['store_url']+'/'+neptun payload = json.dumps({ 'CMD' : 'TOPLIST'}) r = StoreApi.post_request(url, payload) if r.status_code == requests.codes.ok: tupplelist = json.loads(r.content) for item in tupplelist: item['MTIME'] = time.ctime(item['MTIME']) return tupplelist else: raise Http404 @staticmethod def requestdownload(neptun, path): url = settings['store_url']+'/'+neptun payload = json.dumps({ 'CMD' : 'DOWNLOAD', 'PATH' : path }) r = StoreApi.post_request(url, payload) response = json.loads(r.content) return response['LINK'] @staticmethod def requestupload(neptun, path): url = settings['store_url']+'/'+neptun payload = json.dumps({ 'CMD' : 'UPLOAD', 'PATH' : path }) headers = {'content-type': 'application/json'} r = StoreApi.post_request(url, payload) response = json.loads(r.content) if r.status_code == requests.codes.ok: return response['LINK'] else: raise Http404 @staticmethod def requestremove(neptun, path): url = settings['store_url']+'/'+neptun payload = json.dumps({ 'CMD' : 'REMOVE', 'PATH' : path }) headers = {'content-type': 'application/json'} r = StoreApi.post_request(url, payload) if r.status_code == requests.codes.ok: return True else: return False @staticmethod def requestnewfolder(neptun, path): url = settings['store_url']+'/'+neptun payload = json.dumps({ 'CMD' : 'NEW_FOLDER', 'PATH' : path }) headers = {'content-type': 'application/json'} r = StoreApi.post_request(url, payload) if r.status_code == requests.codes.ok: return True else: return False @staticmethod def requestrename(neptun, old_path, new_name): url = settings['store_url']+'/'+neptun payload = json.dumps({'CMD':'RENAME','NEW_NAME':new_name,'PATH':old_path}) headers = {'content-type': 'application/json'} r = StoreApi.post_request(url, payload) if r.status_code == requests.codes.ok: return True else: return False @staticmethod def requestquota(neptun): url = settings['store_url']+'/'+neptun r = StoreApi.get_request(url) if r.status_code == requests.codes.ok: return json.loads(r.content) else: return False @staticmethod def set_quota(neptun, quota): url = settings['store_url']+'/quota/'+neptun payload = json.dumps({ 'QUOTA' : quota }) r = StoreApi.post_request(url, payload) if r.status_code == requests.codes.ok: return True else: return False @staticmethod def userexist(neptun): url = settings['store_url']+'/'+neptun r = StoreApi.get_request(url) if r.status_code == requests.codes.ok: return True else: return False @staticmethod def createuser(neptun, password, key_list, quota): url = settings['store_url']+'/new/'+neptun payload = json.dumps({ 'SMBPASSWD' : password, 'KEYS' : key_list, 'QUOTA' : quota }) r = StoreApi.post_request(url, payload) if r.status_code == requests.codes.ok: return True else: return False @staticmethod def updateauthorizationinfo(neptun, password, key_list): url = settings['store_url']+'/set/'+neptun payload = json.dumps({ 'SMBPASSWD' : password, 'KEYS' : key_list }) r = StoreApi.post_request(url, payload) if r.status_code == requests.codes.ok: return True else: return False