From af009a96d9e59d673dead607e1e60afb2ffd3f31 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 30 Jul 2022 13:17:01 -0400 Subject: [PATCH 01/12] Fix bug where no java reg path found stack --- app/classes/shared/server.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/app/classes/shared/server.py b/app/classes/shared/server.py index 2391b827..971a1bca 100644 --- a/app/classes/shared/server.py +++ b/app/classes/shared/server.py @@ -247,11 +247,20 @@ class ServerInstance: "Oracle Java detected. Changing start command to avoid re-exec." ) which_java_raw = self.helper.which_java() - java_path = which_java_raw + "\\bin\\java" + try: + java_path = which_java_raw + "\\bin\\java" + except TypeError: + logger.warning( + "Could not find java in the registry even though" + " Oracle java is installed. Re-exec expected, but we have no" + " other options. CPU stats will not work for process." + ) + java_path = "" if str(which_java_raw) != str(self.helper.get_servers_root_dir) or str( self.helper.get_servers_root_dir ) in str(which_java_raw): - self.server_command[0] = java_path + if java_path != "": + self.server_command[0] = java_path else: logger.critcal( "Possible attack detected. User attempted to exec " From ad0d47c357768d9809bf8e20e3376a4edb22d27f Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 30 Jul 2022 14:47:07 -0400 Subject: [PATCH 02/12] Check for server backup on restart --- app/classes/shared/server.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/app/classes/shared/server.py b/app/classes/shared/server.py index 2391b827..d6f9b433 100644 --- a/app/classes/shared/server.py +++ b/app/classes/shared/server.py @@ -647,13 +647,21 @@ class ServerInstance: self.helper.websocket_helper.broadcast_user(user, "send_start_reload", {}) def restart_threaded_server(self, user_id): - # if not already running, let's just start - if not self.check_running(): - self.run_threaded_server(user_id) + bu_conf = HelpersManagement.get_backup_config(self.server_id) + if self.is_backingup and bu_conf["shutdown"]: + logger.info( + "Restart command detected. Supressing - server has" + " backup shutdown enabled and server is currently backing up." + ) + return else: - self.stop_threaded_server() - time.sleep(2) - self.run_threaded_server(user_id) + # if not already running, let's just start + if not self.check_running(): + self.run_threaded_server(user_id) + else: + self.stop_threaded_server() + time.sleep(2) + self.run_threaded_server(user_id) def cleanup_server_object(self): self.start_time = None @@ -858,7 +866,7 @@ class ServerInstance: "notify", "backupStarted", HelperUsers.get_user_lang_by_id(user) ).format(self.name), ) - time.sleep(3) + time.sleep(60) conf = HelpersManagement.get_backup_config(self.server_id) if conf["shutdown"]: logger.info( From d1bdb6198b184c0405c8ddbb8871a04d8dbf1073 Mon Sep 17 00:00:00 2001 From: Andrew Date: Tue, 2 Aug 2022 21:08:53 -0400 Subject: [PATCH 03/12] Fix server creation with serverjars API By accident this adds some modded support. TODO: Cleanup javascript in wizard. Fix naming on selects in wizard --- app/classes/minecraft/serverjars.py | 38 ++++---- app/classes/shared/main_controller.py | 3 +- app/classes/web/server_handler.py | 12 ++- app/frontend/templates/server/wizard.html | 114 +++++++++++++++------- 4 files changed, 106 insertions(+), 61 deletions(-) diff --git a/app/classes/minecraft/serverjars.py b/app/classes/minecraft/serverjars.py index b1fc9580..b24e7d12 100644 --- a/app/classes/minecraft/serverjars.py +++ b/app/classes/minecraft/serverjars.py @@ -51,7 +51,7 @@ class ServerJars: def get_serverjar_data(self): data = self._read_cache() - return data.get("servers") + return data.get("types") def _check_api_alive(self): logger.info("Checking serverjars.com API status") @@ -88,22 +88,18 @@ class ServerJars: if cache_old: logger.info("Cache file is over 1 day old, refreshing") now = datetime.now() - data = {"last_refreshed": now.strftime("%m/%d/%Y, %H:%M:%S"), "servers": {}} + data = { + "last_refreshed": now.strftime("%m/%d/%Y, %H:%M:%S"), + "types": {}, + } jar_types = self._get_server_type_list() - - # for each jar type - for j in jar_types: - - # for each server - for s in jar_types.get(j): - # jar versions for this server - versions = self._get_jar_details(s) - - # add these versions (a list) to the dict with - # a key of the server type - data["servers"].update({s: versions}) - + data["types"].update(jar_types) + for s in data["types"]: + data["types"].update({s: dict.fromkeys(data["types"].get(s), {})}) + for j in data["types"].get(s): + versions = self._get_jar_details(j, s) + data["types"][s].update({j: versions}) # save our cache try: with open(cache_file, "w", encoding="utf-8") as f: @@ -113,8 +109,8 @@ class ServerJars: except Exception as e: logger.error(f"Unable to update serverjars.com cache file: {e}") - def _get_jar_details(self, jar_type="servers"): - url = f"/api/fetchAll/{jar_type}" + def _get_jar_details(self, server_type, jar_type="servers"): + url = f"/api/fetchAll/{jar_type}/{server_type}" response = self._get_api_result(url) temp = [] for v in response: @@ -127,19 +123,19 @@ class ServerJars: response = self._get_api_result(url) return response - def download_jar(self, server, version, path, server_id): + def download_jar(self, jar, server, version, path, server_id): update_thread = threading.Thread( name=f"server_download-{server_id}-{server}-{version}", target=self.a_download_jar, daemon=True, - args=(server, version, path, server_id), + args=(jar, server, version, path, server_id), ) update_thread.start() - def a_download_jar(self, server, version, path, server_id): + def a_download_jar(self, jar, server, version, path, server_id): # delaying download for server register to finish time.sleep(3) - fetch_url = f"{self.base_url}/api/fetchJar/{server}/{version}" + fetch_url = f"{self.base_url}/api/fetchJar/{jar}/{server}/{version}" server_users = PermissionsServers.get_server_user_list(server_id) # We need to make sure the server is registered before diff --git a/app/classes/shared/main_controller.py b/app/classes/shared/main_controller.py index c6c3cfb6..393aa475 100644 --- a/app/classes/shared/main_controller.py +++ b/app/classes/shared/main_controller.py @@ -422,6 +422,7 @@ class Controller: def create_jar_server( self, + jar: str, server: str, version: str, name: str, @@ -493,7 +494,7 @@ class Controller: # download the jar self.server_jars.download_jar( - server, version, os.path.join(server_dir, server_file), new_id + jar, server, version, os.path.join(server_dir, server_file), new_id ) return new_id diff --git a/app/classes/web/server_handler.py b/app/classes/web/server_handler.py index e4e10a04..3dba00e4 100644 --- a/app/classes/web/server_handler.py +++ b/app/classes/web/server_handler.py @@ -386,14 +386,20 @@ class ServerHandler(BaseHandler): # deletes temp dir FileHelpers.del_dirs(zip_path) else: - if len(server_parts) != 2: + if len(server_parts) != 3: self.redirect("/panel/error?error=Invalid server data") return - server_type, server_version = server_parts + jar_type, server_type, server_version = server_parts # TODO: add server type check here and call the correct server # add functions if not a jar new_server_id = self.controller.create_jar_server( - server_type, server_version, server_name, min_mem, max_mem, port + jar_type, + server_type, + server_version, + server_name, + min_mem, + max_mem, + port, ) self.controller.management.add_to_audit_log( exec_user["user_id"], diff --git a/app/frontend/templates/server/wizard.html b/app/frontend/templates/server/wizard.html index 293eff32..0f4887b8 100644 --- a/app/frontend/templates/server/wizard.html +++ b/app/frontend/templates/server/wizard.html @@ -32,10 +32,9 @@
- - {% for s in data['server_types'] %} {% end %} @@ -43,6 +42,16 @@
+
+
+ + +
+
+
@@ -56,14 +65,14 @@
+ placeholder="{{ translate('serverWizard', 'myNewServer', data['lang']) }}" required>

{{ translate('serverWizard', 'quickSettings', data['lang']) }} - {{ translate('serverWizard', 'quickSettingsDescription', + style="text-transform: none;"> - {{ translate('serverWizard', 'quickSettingsDescription', data['lang']) }}


@@ -73,7 +82,7 @@ + min="0.5" required>
@@ -82,7 +91,7 @@ + min="0.5" required> @@ -91,7 +100,7 @@ + required>
@@ -100,7 +109,7 @@

+ aria-controls="collapseRole-1"> {{ translate('serverWizard', 'addRole', data['lang']) }} - {{ translate('serverWizard', 'autoCreate', data['lang']) }} @@ -111,7 +120,7 @@

{% for r in data['roles'] %} {% end %}
@@ -152,7 +161,7 @@
+ placeholder="{{ translate('serverWizard', 'myNewServer', data['lang']) }}" required>
@@ -161,7 +170,7 @@ + placeholder="/var/opt/server" required>
@@ -169,7 +178,7 @@
+ placeholder="paper.jar" required>
@@ -178,7 +187,7 @@

{{ translate('serverWizard', 'quickSettings', data['lang']) }} - {{ translate('serverWizard', 'quickSettingsDescription', + style="text-transform: none;"> - {{ translate('serverWizard', 'quickSettingsDescription', data['lang']) }}


@@ -188,7 +197,7 @@ + min="0.5" required>
@@ -197,7 +206,7 @@ + min="0.5" required> @@ -206,7 +215,7 @@ + required>
@@ -215,7 +224,7 @@

+ aria-controls="collapseRole-2"> {{ translate('serverWizard', 'addRole', data['lang']) }} - {{ translate('serverWizard', 'autoCreate', data['lang']) }} @@ -226,7 +235,7 @@

{% for r in data['roles'] %} {% end %}
@@ -266,7 +275,7 @@
+ placeholder="{{ translate('serverWizard', 'myNewServer', data['lang']) }}" required>
@@ -275,7 +284,7 @@ + placeholder="/var/opt/server.zip" required>
@@ -294,7 +303,7 @@
+ placeholder="paper.jar" required>
@@ -303,7 +312,7 @@

{{ translate('serverWizard', 'quickSettings', data['lang']) }} - {{ translate('serverWizard', 'quickSettingsDescription', + style="text-transform: none;"> - {{ translate('serverWizard', 'quickSettingsDescription', data['lang']) }}


@@ -313,7 +322,7 @@ + min="0.5" required>
@@ -322,7 +331,7 @@ + min="0.5" required> @@ -331,7 +340,7 @@ + required> @@ -341,7 +350,7 @@

+ aria-expanded="true" aria-controls="collapseRole-3"> {{ translate('serverWizard', 'addRole', data['lang']) }} - {{ translate('serverWizard', 'autoCreate', data['lang']) }} @@ -352,7 +361,7 @@

{% for r in data['roles'] %} {% end %}
@@ -368,7 +377,7 @@