diff --git a/app/classes/web/server_handler.py b/app/classes/web/server_handler.py index a734dd1f..4af47e74 100644 --- a/app/classes/web/server_handler.py +++ b/app/classes/web/server_handler.py @@ -113,6 +113,13 @@ class ServerHandler(BaseHandler): page_data['js_server_types'] = json.dumps(server_jar_obj.get_serverjar_data()) template = "server/wizard.html" + if page == "bedrock_step1": + if not superuser and not self.controller.crafty_perms.can_create_server(exec_user["user_id"]): + self.redirect("/panel/error?error=Unauthorized access: not a server creator or server limit reached") + return + + template = "server/bedrock_wizard.html" + self.render( template, data=page_data, @@ -273,6 +280,89 @@ class ServerHandler(BaseHandler): self.controller.stats.record_stats() self.redirect("/panel/dashboard") + if page == "bedrock_step1": + if not superuser: + user_roles = self.controller.roles.get_all_roles() + else: + user_roles = self.controller.roles.get_all_roles() + server = bleach.clean(self.get_argument('server', '')) + server_name = bleach.clean(self.get_argument('server_name', '')) + port = bleach.clean(self.get_argument('port', '')) + import_type = bleach.clean(self.get_argument('create_type', '')) + import_server_path = bleach.clean(self.get_argument('server_path', '')) + import_server_jar = bleach.clean(self.get_argument('server_jar', '')) + server_parts = server.split("|") + captured_roles = [] + for role in user_roles: + if bleach.clean(self.get_argument(str(role), '')) == "on": + captured_roles.append(role) + + if not server_name: + self.redirect("/panel/error?error=Server name cannot be empty!") + return + + if import_type == 'import_jar': + good_path = self.controller.verify_jar_server(import_server_path, import_server_jar) + + if not good_path: + self.redirect("/panel/error?error=Server path or Server Jar not found!") + return + + new_server_id = self.controller.import_jar_server(server_name, import_server_path,import_server_jar, min_mem, max_mem, port) + self.controller.management.add_to_audit_log(exec_user['user_id'], + f"imported a jar server named \"{server_name}\"", # Example: Admin imported a server named "old creative" + new_server_id, + self.get_remote_ip()) + elif import_type == 'import_zip': + # here import_server_path means the zip path + zip_path = bleach.clean(self.get_argument('root_path')) + good_path = helper.check_path_exists(zip_path) + if not good_path: + self.redirect("/panel/error?error=Temp path not found!") + return + + new_server_id = self.controller.import_zip_server(server_name, zip_path, import_server_jar, min_mem, max_mem, port) + if new_server_id == "false": + self.redirect("/panel/error?error=Zip file not accessible! You can fix this permissions issue with" + + f"sudo chown -R crafty:crafty {import_server_path} And sudo chmod 2775 -R {import_server_path}") + return + self.controller.management.add_to_audit_log(exec_user['user_id'], + f"imported a zip server named \"{server_name}\"", # Example: Admin imported a server named "old creative" + new_server_id, + self.get_remote_ip()) + #deletes temp dir + shutil.rmtree(zip_path) + else: + if len(server_parts) != 2: + self.redirect("/panel/error?error=Invalid server data") + return + server_type, server_version = server_parts + # TODO: add server type check here and call the correct server add functions if not a jar + role_ids = self.controller.users.get_user_roles_id(exec_user["user_id"]) + new_server_id = self.controller.create_jar_server(server_type, server_version, server_name, min_mem, max_mem, port) + self.controller.management.add_to_audit_log(exec_user['user_id'], + f"created a {server_version} {str(server_type).capitalize()} server named \"{server_name}\"", + # Example: Admin created a 1.16.5 Bukkit server named "survival" + new_server_id, + self.get_remote_ip()) + + # These lines create a new Role for the Server with full permissions and add the user to it if he's not a superuser + if len(captured_roles) == 0: + if not superuser: + new_server_uuid = self.controller.servers.get_server_data_by_id(new_server_id).get("server_uuid") + role_id = self.controller.roles.add_role(f"Creator of Server with uuid={new_server_uuid}") + self.controller.server_perms.add_role_server(new_server_id, role_id, "11111111") + self.controller.users.add_role_to_user(exec_user["user_id"], role_id) + self.controller.crafty_perms.add_server_creation(exec_user["user_id"]) + + else: + for role in captured_roles: + role_id = role + self.controller.server_perms.add_role_server(new_server_id, role_id, "11111111") + + self.controller.stats.record_stats() + self.redirect("/panel/dashboard") + try: self.render( template, diff --git a/app/frontend/templates/server/bedrock_wizard.html b/app/frontend/templates/server/bedrock_wizard.html new file mode 100644 index 00000000..8ad5a269 --- /dev/null +++ b/app/frontend/templates/server/bedrock_wizard.html @@ -0,0 +1,460 @@ +{% extends ../base.html %} + +{% block title %}Crafty Controller - {{ translate('serverWizard', 'newServer', data['lang']) }}{% end %} + +{% block content %} + +
+ +
+
+
+
+
+
+ +

{{ translate('serverWizard', 'importServer', data['lang']) }}

+
+

+ +

+ {% raw xsrf_form_html() %} + +
+ +
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+ + + +
+
+

{{ translate('serverWizard', 'quickSettings', data['lang']) }} - {{ translate('serverWizard', 'quickSettingsDescription', data['lang']) }}

+
+
+ +
+
+ + +
+
+
+
+
+
+
+

+ {{ translate('serverWizard', 'addRole', data['lang']) }} - {{ translate('serverWizard', 'autoCreate', data['lang']) }} +

+
+
+
+
+ {% for r in data['roles'] %} + + {% end %} +
+
+
+
+
+
+
+
+ + + +
+

+
+
+
+
+
+
+ +

{{ translate('serverWizard', 'importZip', data['lang']) }}

+
+

+ +

+ {% raw xsrf_form_html() %} + + +
+
+
+
+ + +
+
+ +
+
+ + +
+
+ +
+
+ +
+ +
+
+ + +
+
+ + +
+
+
+
+ + + +
+

{{ translate('serverWizard', 'quickSettings', data['lang']) }} - {{ translate('serverWizard', 'quickSettingsDescription', data['lang']) }}

+
+
+ +
+
+ + +
+
+ +
+
+
+
+
+

+ {{ translate('serverWizard', 'addRole', data['lang']) }} - {{ translate('serverWizard', 'autoCreate', data['lang']) }} +

+
+
+
+
+ {% for r in data['roles'] %} + + {% end %} +
+
+
+
+
+
+
+ + +
+ + +
+
+ +

+
+
+
+
+ + + +{% end %} + +{% block js%} + + + + +{% end %} \ No newline at end of file diff --git a/app/frontend/templates/server/wizard.html b/app/frontend/templates/server/wizard.html index 7f82fd29..226e8d6b 100644 --- a/app/frontend/templates/server/wizard.html +++ b/app/frontend/templates/server/wizard.html @@ -5,6 +5,17 @@ {% block content %}
+ +
diff --git a/app/translations/en_EN.json b/app/translations/en_EN.json index 646206e2..233aa689 100644 --- a/app/translations/en_EN.json +++ b/app/translations/en_EN.json @@ -49,7 +49,7 @@ "serverVersion": "Server Version", "selectVersion": "Select a Version", "absoluteServerPath": "Absolute path to your server", - "serverJar": "Server Jarfile", + "serverJar": "Server Executable File", "minMem": "Minimum Memory", "maxMem": "Maximum Memory", "serverPort": "Server Port",