Merge branch 'bug/backups-restore/download' into 'dev'

Bug/backups restore/download

See merge request crafty-controller/crafty-commander!197
This commit is contained in:
Andrew 2022-03-08 02:56:52 +00:00
commit eda9f44b5f
5 changed files with 45 additions and 21 deletions

View File

@ -1,5 +1,6 @@
import os
import pathlib
from pathlib import Path
import shutil
import time
import logging
@ -513,10 +514,13 @@ class Controller:
server_data = self.servers.get_server_data_by_id(old_server_id)
old_bu_path = server_data['backup_path']
Server_Perms_Controller.backup_role_swap(old_server_id, new_server_id)
backup_path = helper.validate_traversal(helper.backup_path, old_bu_path)
if not helper.is_os_windows():
backup_path = helper.validate_traversal(helper.backup_path, old_bu_path)
if helper.is_os_windows():
backup_path = helper.wtol_path(backup_path)
backup_path = helper.validate_traversal(helper.wtol_path(helper.backup_path), helper.wtol_path(old_bu_path))
backup_path = helper.wtol_path(str(backup_path))
backup_path.replace(' ', '^ ')
backup_path = Path(backup_path)
backup_path_components = list(backup_path.parts)
backup_path_components[-1] = new_uuid
new_bu_path = pathlib.PurePath(os.path.join(*backup_path_components))

View File

@ -178,7 +178,11 @@ class Server:
#Register an shedule for polling server stats when running
logger.info(f"Polling server statistics {self.name} every {5} seconds")
console.info(f"Polling server statistics {self.name} every {5} seconds")
self.server_scheduler.add_job(self.realtime_stats, 'interval', seconds=5, id="stats_"+str(self.server_id))
try:
self.server_scheduler.add_job(self.realtime_stats, 'interval', seconds=5, id="stats_"+str(self.server_id))
except:
self.server_scheduler.remove_job('stats_'+str(self.server_id))
self.server_scheduler.add_job(self.realtime_stats, 'interval', seconds=5, id="stats_"+str(self.server_id))
def setup_server_run_command(self):
@ -514,6 +518,7 @@ class Server:
proc.kill()
# kill the main process we are after
logger.info('Sending SIGKILL to parent')
self.server_scheduler.remove_job("stats_"+str(self.server_id))
self.process.kill()
def get_start_time(self):

View File

@ -337,19 +337,34 @@ class AjaxHandler(BaseHandler):
zip_name = bleach.clean(self.get_argument('zip_file', None))
svr_obj = self.controller.servers.get_server_obj(server_id)
server_data = self.controller.servers.get_server_data_by_id(server_id)
backup_path = svr_obj.backup_path
if helper.validate_traversal(backup_path, zip_name):
tempDir = helper.unzip_backup_archive(backup_path, zip_name)
new_server = self.controller.import_zip_server(svr_obj.server_name,
tempDir,
server_data['executable'],
'1', '2',
server_data['server_port'])
new_server_id = new_server
new_server = self.controller.get_server_data(new_server)
self.controller.rename_backup_dir(server_id, new_server_id, new_server['server_uuid'])
self.controller.remove_server(server_id, True)
self.redirect('/panel/dashboard')
if server_data['type'] == 'minecraft-java':
backup_path = svr_obj.backup_path
if helper.validate_traversal(backup_path, zip_name):
tempDir = helper.unzip_backup_archive(backup_path, zip_name)
new_server = self.controller.import_zip_server(svr_obj.server_name,
tempDir,
server_data['executable'],
'1', '2',
server_data['server_port'])
new_server_id = new_server
new_server = self.controller.get_server_data(new_server)
self.controller.rename_backup_dir(server_id, new_server_id, new_server['server_uuid'])
self.controller.remove_server(server_id, True)
self.redirect('/panel/dashboard')
else:
backup_path = svr_obj.backup_path
if helper.validate_traversal(backup_path, zip_name):
tempDir = helper.unzip_backup_archive(backup_path, zip_name)
new_server = self.controller.import_bedrock_zip_server(svr_obj.server_name,
tempDir,
server_data['executable'],
server_data['server_port'])
new_server_id = new_server
new_server = self.controller.get_server_data(new_server)
self.controller.rename_backup_dir(server_id, new_server_id, new_server['server_uuid'])
self.controller.remove_server(server_id, True)
self.redirect('/panel/dashboard')
elif page == "unzip_server":
path = self.get_argument('path', None)

View File

@ -253,6 +253,10 @@ const server_id = new URLSearchParams(document.location.search).get('id')
function restore_backup(filename, id){
var token = getCookie("_xsrf")
var dialog = bootbox.dialog({
message: '<i class="fa fa-spin fa-spinner"></i> {{ translate('serverBackups', 'restoring', data['lang']) }}',
closeButton: false
});
console.log('Sending Command to restore backup: ' + filename)
$.ajax({
@ -264,10 +268,6 @@ const server_id = new URLSearchParams(document.location.search).get('id')
id: id
},
success: function(data) {
var dialog = bootbox.dialog({
message: '<i class="fa fa-spin fa-spinner"></i> {{ translate('serverBackups', 'restoring', data['lang']) }}',
closeButton: false
});
setTimeout(function(){
location.href=('/panel/dashboard');
}, 15000);

View File

@ -849,7 +849,7 @@
function downloadFileE(event) {
path = event.target.parentElement.getAttribute('data-path');
name = event.target.parentElement.getAttribute('data-name');
window.location.href = `/panel/download_file?id=${server_id}&path=${path}&name=${name}`;
window.location.href = `/panel/download_file?id=${serverId}&path=${path}&name=${name}`;
}
function renameItemE(event) {