diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fe2413b5b683d625ee46fbcede28121ba6876c3..5a22f6f2ace923f5d503fab9fece0f7cc365ab12 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ### New features TBD ### Bug fixes +- Refactor Bedrock update to use `import_helper` `download_threaded_bedrock_server` fixing bedrock update ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/890)) - Fix GC logic deleting downloaded files instead of only temp directories ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/891)) ### Tweaks TBD diff --git a/app/classes/controllers/servers_controller.py b/app/classes/controllers/servers_controller.py index a7df5dcf122a7e40c3eeecd877c6f697b07f604f..ae3670f6d1363e3cc0d3ca0fea3db8a07c254749 100644 --- a/app/classes/controllers/servers_controller.py +++ b/app/classes/controllers/servers_controller.py @@ -31,7 +31,9 @@ logger = logging.getLogger(__name__) class ServersController(metaclass=Singleton): servers_list: ServerInstance - def __init__(self, helper, servers_helper, management_helper, file_helper): + def __init__( + self, helper, servers_helper, management_helper, file_helper, import_helper + ): self.helper: Helpers = helper self.file_helper: FileHelpers = file_helper self.servers_helper: HelperServers = servers_helper @@ -43,6 +45,7 @@ class ServersController(metaclass=Singleton): self.backups_mgr = BackupManager( self.helper, self.file_helper, self.management_helper ) + self.import_helper = import_helper # ********************************************************************************** # Generic Servers Methods @@ -240,6 +243,7 @@ class ServersController(metaclass=Singleton): self.stats, self.file_helper, self.backups_mgr, + self.import_helper, ), } diff --git a/app/classes/shared/main_controller.py b/app/classes/shared/main_controller.py index 3d98072cf935aa42ddbae2d75c6c50f0d51d8679..f7005713155fb9e990521ee33e76b01f09ecd1b4 100644 --- a/app/classes/shared/main_controller.py +++ b/app/classes/shared/main_controller.py @@ -69,7 +69,11 @@ class Controller: ) self.server_perms: ServerPermsController = ServerPermsController() self.servers: ServersController = ServersController( - self.helper, self.servers_helper, self.management_helper, self.file_helper + self.helper, + self.servers_helper, + self.management_helper, + self.file_helper, + self.import_helper, ) self.users: UsersController = UsersController( self.helper, self.users_helper, self.authentication diff --git a/app/classes/shared/server.py b/app/classes/shared/server.py index 21d580157107adacb7870d3045310d70e39733f0..86ff1546a5c63b04bc6b47a8254bb9c45c44c87a 100644 --- a/app/classes/shared/server.py +++ b/app/classes/shared/server.py @@ -161,12 +161,20 @@ class ServerInstance: stats_helper: HelperServerStats def __init__( - self, server_id, helper, management_helper, stats, file_helper, backup_mgr + self, + server_id, + helper, + management_helper, + stats, + file_helper, + backup_mgr, + import_helper, ): self.helper = helper self.file_helper = file_helper self.management_helper = management_helper self.backup_mgr = backup_mgr + self.import_helper = import_helper # holders for our process self.process = None self.line = False @@ -1387,41 +1395,19 @@ class ServerInstance: ) else: # downloads zip from remote url + downloaded = False try: bedrock_url = Helpers.get_latest_bedrock_url() if bedrock_url: # Use the new method for secure download - download_path = os.path.join( - self.settings["path"], "bedrock_server.zip" + self.import_helper.download_threaded_bedrock_server( + self.settings["path"], self.server_id, bedrock_url ) - downloaded = FileHelpers.ssl_get_file( - bedrock_url, self.settings["path"], "bedrock_server.zip" - ) - - if downloaded: - unzip_path = download_path - unzip_path = self.helper.wtol_path(unzip_path) - - # unzips archive that was downloaded. - FileHelpers.unzip_file(unzip_path, server_update=True) - - # adjusts permissions for execution if os is not windows - if not self.helper.is_os_windows(): - os.chmod( - os.path.join(self.settings["path"], "bedrock_server"), - 0o0744, - ) - - # we'll delete the zip we downloaded now - os.remove(download_path) - else: - logger.error("Failed to download the Bedrock server zip.") - downloaded = False + downloaded = True except Exception as e: logger.critical( f"Failed to download bedrock executable for update \n{e}" ) - downloaded = False if downloaded: logger.info("Executable updated successfully. Starting Server")