diff --git a/CHANGELOG.md b/CHANGELOG.md index d7130183..e1be6c3e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ TBD ### Bug fixes - Fix local java server imports. ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/529)) ### Tweaks -TBD +- Added further login screen customisation settings. ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/531)) ### Lang TBD

diff --git a/app/classes/controllers/management_controller.py b/app/classes/controllers/management_controller.py index 47860fe1..7e7a38b0 100644 --- a/app/classes/controllers/management_controller.py +++ b/app/classes/controllers/management_controller.py @@ -10,6 +10,25 @@ class ManagementController: def __init__(self, management_helper): self.management_helper = management_helper + # ********************************************************************************** + # Config Methods + # ********************************************************************************** + @staticmethod + def set_login_image(path): + HelpersManagement.set_login_image(path) + + @staticmethod + def get_login_image(): + return HelpersManagement.get_login_image() + + @staticmethod + def set_login_opacity(opacity): + return HelpersManagement.set_login_opacity(opacity) + + @staticmethod + def get_login_opacity(): + return HelpersManagement.get_login_opacity() + # ********************************************************************************** # Host_Stats Methods # ********************************************************************************** @@ -94,14 +113,6 @@ class ManagementController: def delete_scheduled_task(schedule_id): return HelpersManagement.delete_scheduled_task(schedule_id) - @staticmethod - def set_login_image(path): - HelpersManagement.set_login_image(path) - - @staticmethod - def get_login_image(): - return HelpersManagement.get_login_image() - @staticmethod def update_scheduled_task(schedule_id, updates): return HelpersManagement.update_scheduled_task(schedule_id, updates) diff --git a/app/classes/models/management.py b/app/classes/models/management.py index 55c86bb7..7eab07a3 100644 --- a/app/classes/models/management.py +++ b/app/classes/models/management.py @@ -44,6 +44,7 @@ class AuditLog(BaseModel): class CraftySettings(BaseModel): secret_api_key = CharField(default="") login_photo = CharField(default="login_1.jpg") + login_opacity = IntegerField(default=100) class Meta: table_name = "crafty_settings" @@ -255,6 +256,9 @@ class HelpersManagement: ) return settings[0].secret_api_key + # ********************************************************************************** + # Config Methods + # ********************************************************************************** @staticmethod def get_login_image(): settings = CraftySettings.select(CraftySettings.login_photo).where( @@ -268,6 +272,19 @@ class HelpersManagement: CraftySettings.id == 1 ).execute() + @staticmethod + def get_login_opacity(): + settings = CraftySettings.select(CraftySettings.login_opacity).where( + CraftySettings.id == 1 + ) + return settings[0].login_opacity + + @staticmethod + def set_login_opacity(opacity): + CraftySettings.update({CraftySettings.login_opacity: opacity}).where( + CraftySettings.id == 1 + ).execute() + # ********************************************************************************** # Schedules Methods # ********************************************************************************** diff --git a/app/classes/web/ajax_handler.py b/app/classes/web/ajax_handler.py index cdd67146..7d03a052 100644 --- a/app/classes/web/ajax_handler.py +++ b/app/classes/web/ajax_handler.py @@ -355,7 +355,9 @@ class AjaxHandler(BaseHandler): elif page == "select_photo": if exec_user["superuser"]: - photo = self.get_argument("photo", None) + photo = urllib.parse.unquote(self.get_argument("photo", "")) + opacity = self.get_argument("opacity", 100) + self.controller.management.set_login_opacity(int(opacity)) if photo == "login_1.jpg": self.controller.management.set_login_image("login_1.jpg") self.controller.cached_login = f"{photo}" @@ -366,7 +368,7 @@ class AjaxHandler(BaseHandler): elif page == "delete_photo": if exec_user["superuser"]: - photo = self.get_argument("photo", None) + photo = urllib.parse.unquote(self.get_argument("photo", None)) if photo and photo != "login_1.jpg": os.remove( os.path.join( diff --git a/app/classes/web/panel_handler.py b/app/classes/web/panel_handler.py index 582517db..0e61f640 100644 --- a/app/classes/web/panel_handler.py +++ b/app/classes/web/panel_handler.py @@ -291,6 +291,7 @@ class PanelHandler(BaseHandler): # todo: make this actually pull and compare version data "update_available": self.helper.update_available, "background": self.controller.cached_login, + "login_opacity": self.controller.management.get_login_opacity(), "serverTZ": tz, "version_data": self.helper.get_version_string(), "failed_servers": self.controller.servers.failed_servers, @@ -883,6 +884,9 @@ class PanelHandler(BaseHandler): if item not in page_data["backgrounds"]: page_data["backgrounds"].append(item) page_data["background"] = self.controller.cached_login + page_data[ + "login_opacity" + ] = self.controller.management.get_login_opacity() else: page_data["managed_users"] = self.controller.users.get_managed_users( exec_user["user_id"] diff --git a/app/classes/web/public_handler.py b/app/classes/web/public_handler.py index 7f3f0c26..846402c3 100644 --- a/app/classes/web/public_handler.py +++ b/app/classes/web/public_handler.py @@ -40,6 +40,7 @@ class PublicHandler(BaseHandler): "lang_page": self.helper.get_lang_page(self.helper.get_setting("language")), "query": "", "background": self.controller.cached_login, + "login_opacity": self.controller.management.get_login_opacity(), } if self.request.query: diff --git a/app/frontend/templates/panel/denied.html b/app/frontend/templates/panel/denied.html index f924e553..717c0def 100644 --- a/app/frontend/templates/panel/denied.html +++ b/app/frontend/templates/panel/denied.html @@ -1,69 +1,82 @@ - - - - - Crafty Controller - - - - - - - - - - - - - - - - -
-
-
-
-
-
-
+ + + + + Crafty Controller + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ +
+


-
- -
-
+
-
- +
- - - - - - - - - - - - + +
+ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/frontend/templates/panel/panel_config.html b/app/frontend/templates/panel/panel_config.html index a4ee9f66..31aed101 100644 --- a/app/frontend/templates/panel/panel_config.html +++ b/app/frontend/templates/panel/panel_config.html @@ -230,64 +230,180 @@
-
+
+
+

{{ translate('panelConfig', 'customLoginPage', data['lang']) }}

+
- -

{{ translate('panelConfig', 'loginImage', data['lang']) }}

-
-

- -

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

{{ translate('panelConfig', 'loginImage', data['lang']) }}

+
+ + {% raw xsrf_form_html() %} + +
+
+
+ +
+ +
+
+
+
+
+
{{ translate('panelConfig', 'preview', data['lang']) }}:
+
+
+ +
+ +
+
+ +
+ + +
+ +
+
+
+ Responsive image +
+ +
+
+
+ + +
+
-
- -

-
-
-
-
-
-

{{ translate('panelConfig', 'loginBackground', data['lang']) }}




-
- -
-
-
{{ translate('panelConfig', 'preview', data['lang']) }}:
- -
-
-
- - -
+
@@ -384,7 +500,7 @@ $.ajax({ type: "POST", headers: { 'X-XSRFToken': token }, - url: '/ajax/delete_photo?photo=' + photo, + url: '/ajax/delete_photo?photo=' + encodeURIComponent(photo), success: function (data) { location.reload(); }, @@ -394,20 +510,50 @@ $('.select-photo').click(function () { var token = getCookie("_xsrf") let photo = $('#photo').find(":selected").val(); + let opacity = $('#modal_opacity').val(); + let enc_photo = encodeURIComponent(photo); + $.ajax({ type: "POST", headers: { 'X-XSRFToken': token }, - url: '/ajax/select_photo?photo=' + photo, + url: '/ajax/select_photo?photo=' + enc_photo + '&opacity=' + opacity, success: function (data) { window.location.reload(); }, }); }) + $(document).ready(function () { + let opacity = parseInt($("#modal_opacity").val()); + document.getElementById('login-form-background').style.background = 'rgb(34, 36, 55, ' + (opacity / 100) + ')'; + }); + + function previewOpacity() { + let opacity = parseInt($("#modal_opacity").val()) + console.debug("Selected Opacity = " + opacity + "%"); + document.getElementById('opacityValue').innerHTML = (opacity) + "%"; + document.getElementById('login-form-background').style.background = 'rgb(34, 36, 55, ' + (opacity / 100) + ')'; + } + + function updateBackgroundSelect() { + $("#photo").val($("#try_photo").val()).change(); + } + + function updateBackgroundPreview() { + var img = document.getElementById('bg-preview'); + if ($("#photo").val() == "login_1.jpg") { + var src_path = "../../static/assets/images/auth/".concat($("#photo").val()); + } + else { + var src_path = "../../static/assets/images/auth/custom/".concat($("#photo").val()); + } + img.src = src_path; + } + var file; function sendFile() { file = $("#file")[0].files[0] - document.getElementById("upload_input").innerHTML = '
 
' + document.getElementById("upload_input").innerHTML = '
 
'; let xmlHttpRequest = new XMLHttpRequest(); let token = getCookie("_xsrf") let fileName = file.name diff --git a/app/frontend/templates/public/404.html b/app/frontend/templates/public/404.html index 480fe5cf..c598dd19 100644 --- a/app/frontend/templates/public/404.html +++ b/app/frontend/templates/public/404.html @@ -23,7 +23,7 @@ @@ -36,8 +37,9 @@
-