Commit 9a6c83ca by Őry Máté

store: refactor commands to functions

parent 5cdd5412
...@@ -44,6 +44,8 @@ def neptun_GET(neptun): ...@@ -44,6 +44,8 @@ def neptun_GET(neptun):
statistics=getQuotaStatus(neptun) statistics=getQuotaStatus(neptun)
return { 'Used' : statistics[0], 'Soft' : statistics[1], 'Hard' : statistics[2]} return { 'Used' : statistics[0], 'Soft' : statistics[1], 'Hard' : statistics[2]}
COMMANDS = {}
@route('/<neptun>', method='POST') @route('/<neptun>', method='POST')
def neptun_POST(neptun): def neptun_POST(neptun):
# Check if user avaiable (home folder ready) # Check if user avaiable (home folder ready)
...@@ -51,106 +53,120 @@ def neptun_POST(neptun): ...@@ -51,106 +53,120 @@ def neptun_POST(neptun):
if os.path.exists(home_path) != True: if os.path.exists(home_path) != True:
abort(401, 'The requested user does not exist!') abort(401, 'The requested user does not exist!')
else: else:
# Parse post try:
# LISTING return COMMANDS[request.json['CMD']](request, neptun, home_path)
if request.json['CMD'] == 'LIST': except KeyError:
list_path = home_path+request.json['PATH'] abort(400, "Command not found!")
if os.path.exists(list_path) != True:
abort(404, "Path not found!")
else: # LISTING
return list_directory(home_path, list_path) def cmd_list(request, neptun, home_path):
# DOWNLOAD LINK GENERATOR list_path = home_path+request.json['PATH']
elif request.json['CMD'] == 'DOWNLOAD': if os.path.exists(list_path) != True:
dl_path = home_path+'/'+request.json['PATH'] abort(404, "Path not found!")
dl_path = os.path.realpath(dl_path) else:
if not dl_path.startswith(home_path): return list_directory(home_path, list_path)
abort(400, 'Invalid download path.') COMMANDS['LIST'] = cmd_list
dl_hash = str(uuid.uuid4())
if( os.path.isfile(dl_path) ): # DOWNLOAD LINK GENERATOR
os.symlink(dl_path, ROOT_WWW_FOLDER+'/'+dl_hash) def cmd_download(request, neptun, home_path):
# Debug dl_path = home_path+'/'+request.json['PATH']
# redirect('http://store.cloud.ik.bme.hu:8080/dl/'+dl_hash) dl_path = os.path.realpath(dl_path)
return json.dumps({'LINK' : SITE_URL+'/dl/'+dl_hash}) if not dl_path.startswith(home_path):
else: abort(400, 'Invalid download path.')
try: dl_hash = str(uuid.uuid4())
os.makedirs(TEMP_DIR+'/'+neptun, 0700) if( os.path.isfile(dl_path) ):
except: os.symlink(dl_path, ROOT_WWW_FOLDER+'/'+dl_hash)
pass # Debug
folder_name = os.path.basename(dl_path) # redirect('http://store.cloud.ik.bme.hu:8080/dl/'+dl_hash)
temp_path = TEMP_DIR+'/'+neptun+'/'+folder_name+'.zip' return json.dumps({'LINK' : SITE_URL+'/dl/'+dl_hash})
with open(os.devnull, "w") as fnull: else:
# zip -rqDj vmi.zip /home/tarokkk/vpn-ik try:
result = subprocess.call(['/usr/bin/zip', '-rqDj', temp_path, dl_path], stdout = fnull, stderr = fnull) os.makedirs(TEMP_DIR+'/'+neptun, 0700)
os.symlink(temp_path, ROOT_WWW_FOLDER+'/'+dl_hash) except:
return json.dumps({'LINK' : SITE_URL+'/dl/'+dl_hash}) pass
# UPLOAD folder_name = os.path.basename(dl_path)
elif request.json['CMD'] == 'UPLOAD': temp_path = TEMP_DIR+'/'+neptun+'/'+folder_name+'.zip'
up_path = home_path+'/'+request.json['PATH'] with open(os.devnull, "w") as fnull:
up_path = os.path.realpath(up_path) # zip -rqDj vmi.zip /home/tarokkk/vpn-ik
if not up_path.startswith(home_path): result = subprocess.call(['/usr/bin/zip', '-rqDj', temp_path, dl_path], stdout = fnull, stderr = fnull)
abort(400, 'Invalid upload path.') os.symlink(temp_path, ROOT_WWW_FOLDER+'/'+dl_hash)
if os.path.exists(up_path) == True and os.path.isdir(up_path): return json.dumps({'LINK' : SITE_URL+'/dl/'+dl_hash})
up_hash = str(uuid.uuid4()) COMMANDS['DOWNLOAD'] = cmd_download
os.symlink(up_path, ROOT_WWW_FOLDER+'/'+up_hash)
return json.dumps({ 'LINK' : SITE_URL+'/ul/'+up_hash}) # UPLOAD
else: def cmd_upload(request, neptun, home_path):
abort(400, 'Upload directory not exists!') up_path = home_path+'/'+request.json['PATH']
# MOVE up_path = os.path.realpath(up_path)
elif request.json['CMD'] == 'MOVE': if not up_path.startswith(home_path):
src_path = home_path+'/'+request.json['SOURCE'] abort(400, 'Invalid upload path.')
dst_path = home_path+'/'+request.json['DESTINATION'] if os.path.exists(up_path) == True and os.path.isdir(up_path):
src_path = os.path.realpath(src_path) up_hash = str(uuid.uuid4())
dst_path = os.path.realpath(dst_path) os.symlink(up_path, ROOT_WWW_FOLDER+'/'+up_hash)
if not src_path.startswith(home_path): return json.dumps({ 'LINK' : SITE_URL+'/ul/'+up_hash})
abort(400, 'Invalid source path.') else:
if not dst_path.startswith(home_path): abort(400, 'Upload directory not exists!')
abort(400, 'Invalid destination path.') COMMANDS['UPLOAD'] = cmd_upload
if os.path.exists(src_path) == True and os.path.exists(dst_path) == True and os.path.isdir(dst_path) == True:
shutil.move(src_path, dst_path) # MOVE
return def cmd_move(request, neptun, home_path):
else: src_path = home_path+'/'+request.json['SOURCE']
# TODO dst_path = home_path+'/'+request.json['DESTINATION']
abort(400, "Can not move the file.") src_path = os.path.realpath(src_path)
# RENAME dst_path = os.path.realpath(dst_path)
elif request.json['CMD'] == 'RENAME': if not src_path.startswith(home_path):
src_path = home_path+'/'+request.json['PATH'] abort(400, 'Invalid source path.')
src_path = os.path.realpath(src_path) if not dst_path.startswith(home_path):
if not src_path.startswith(home_path): abort(400, 'Invalid destination path.')
abort(400, 'Invalid source path.') if os.path.exists(src_path) == True and os.path.exists(dst_path) == True and os.path.isdir(dst_path) == True:
dst_path = os.path.dirname(src_path)+'/'+request.json['NEW_NAME'] shutil.move(src_path, dst_path)
if os.path.exists(src_path) == True: return
os.rename(src_path, dst_path) else:
else: # TODO
abort(404, "File or Folder not found!") abort(400, "Can not move the file.")
COMMANDS['MOVE'] = cmd_move
# RENAME
def cmd_rename(request, neptun, home_path):
src_path = home_path+'/'+request.json['PATH']
src_path = os.path.realpath(src_path)
if not src_path.startswith(home_path):
abort(400, 'Invalid source path.')
dst_path = os.path.dirname(src_path)+'/'+request.json['NEW_NAME']
if os.path.exists(src_path) == True:
os.rename(src_path, dst_path)
else:
abort(404, "File or Folder not found!")
COMMANDS['RENAME'] = cmd_rename
# NEW FOLDER
def cmd_new_folder(request, neptun, home_path):
dir_path = home_path+'/'+request.json['PATH']
dir_path = os.path.realpath(dir_path)
if not dir_path.startswith(home_path):
abort(400, 'Invalid directory path.')
if os.path.exists(dir_path) == True:
abort(400, "Directory already exist!")
else:
os.mkdir(dir_path, 0755)
COMMANDS['NEW_FOLDER'] = cmd_new_folder
# REMOVE
def cmd_remove(request, neptun, home_path):
remove_path = home_path+'/'+request.json['PATH']
remove_path = os.path.realpath(remove_path)
if not remove_path.startswith(home_path):
abort(400, 'Invalid path.')
if os.path.exists(remove_path) != True:
abort(404, "Path not found!")
else:
if os.path.isdir(remove_path) == True:
shutil.rmtree(remove_path)
return return
# NEW FOLDER
elif request.json['CMD'] == 'NEW_FOLDER':
dir_path = home_path+'/'+request.json['PATH']
dir_path = os.path.realpath(dir_path)
if not dir_path.startswith(home_path):
abort(400, 'Invalid directory path.')
if os.path.exists(dir_path) == True:
abort(400, "Directory already exist!")
else:
os.mkdir(dir_path, 0755)
return
# REMOVE
elif request.json['CMD'] == 'REMOVE':
remove_path = home_path+'/'+request.json['PATH']
remove_path = os.path.realpath(remove_path)
if not remove_path.startswith(home_path):
abort(400, 'Invalid path.')
if os.path.exists(remove_path) != True:
abort(404, "Path not found!")
else:
if os.path.isdir(remove_path) == True:
shutil.rmtree(remove_path)
return
else:
os.remove(remove_path)
return
else: else:
abort(400, "Command not found!") os.remove(remove_path)
return
COMMANDS['REMOVE'] = cmd_remove
@route('/set/<neptun>', method='POST') @route('/set/<neptun>', method='POST')
def set_keys(neptun): def set_keys(neptun):
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment