From 39ccb8300895a1de1757c0b2fea0bfa4654cc381 Mon Sep 17 00:00:00 2001
From: Andrew <mcdeweykp@gmail.com>
Date: Mon, 10 Jan 2022 00:10:03 -0500
Subject: [PATCH] Fix bug where backkups could not be restore. Directly caused
 by the changes made in server zip import

---
 app/classes/shared/helpers.py   | 12 ++++++++++++
 app/classes/web/ajax_handler.py |  3 ++-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/app/classes/shared/helpers.py b/app/classes/shared/helpers.py
index da882b10..3b788056 100644
--- a/app/classes/shared/helpers.py
+++ b/app/classes/shared/helpers.py
@@ -793,6 +793,18 @@ class Helpers:
                 })
         return
 
+    @staticmethod
+    def unzip_backup_archive(backup_path, zip_name):
+        zip_path = os.path.join(backup_path, zip_name)
+        if helper.check_file_perms(zip_path):
+            tempDir = tempfile.mkdtemp()
+            with zipfile.ZipFile(zip_path, 'r') as zip_ref:
+                #extracts archive to temp directory
+                zip_ref.extractall(tempDir)      
+            return tempDir
+        else:
+            return False
+
     @staticmethod
     def in_path(parent_path, child_path):
         # Smooth out relative path names, note: if you are concerned about symbolic links, you should use os.path.realpath too
diff --git a/app/classes/web/ajax_handler.py b/app/classes/web/ajax_handler.py
index b22722fe..1456d7e4 100644
--- a/app/classes/web/ajax_handler.py
+++ b/app/classes/web/ajax_handler.py
@@ -285,7 +285,8 @@ class AjaxHandler(BaseHandler):
             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):
-                new_server = self.controller.import_zip_server(svr_obj.server_name, os.path.join(backup_path, zip_name), server_data['executable'], '1', '2', server_data['server_port'])
+                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'])