From 6e776d638330a588b938585172b6d6721e2e7e1a Mon Sep 17 00:00:00 2001 From: amcmanu3 Date: Sun, 28 Jan 2024 12:15:00 -0500 Subject: [PATCH 01/25] Allow http to be disabled by config.json --- app/classes/web/tornado_handler.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/app/classes/web/tornado_handler.py b/app/classes/web/tornado_handler.py index f5501d31..82ae081c 100644 --- a/app/classes/web/tornado_handler.py +++ b/app/classes/web/tornado_handler.py @@ -112,7 +112,7 @@ class Webserver: cookie_secret = self.helper.random_string_generator(32) HelpersManagement.set_cookie_secret(cookie_secret) - if not http_port: + if not http_port and http_port != 0: http_port = 8000 if not https_port: @@ -190,9 +190,12 @@ class Webserver: login_url="/login", serve_traceback=debug_errors, ) - - self.http_server = tornado.httpserver.HTTPServer(http_app) - self.http_server.listen(http_port) + print(http_port) + if http_port != 0: + self.http_server = tornado.httpserver.HTTPServer(http_app) + self.http_server.listen(http_port) + else: + logger.info("http port disabled by config") self.https_server = tornado.httpserver.HTTPServer(app, ssl_options=cert_objects) self.https_server.listen(https_port) From e48a3cc9761f4e5313b158a689e08950602ae216 Mon Sep 17 00:00:00 2001 From: Silversthorn Date: Tue, 30 Jan 2024 22:03:58 +0100 Subject: [PATCH 02/25] Improving Display for Buttons --- app/frontend/static/assets/css/crafty.css | 486 +++++++++++++++++++++- 1 file changed, 481 insertions(+), 5 deletions(-) diff --git a/app/frontend/static/assets/css/crafty.css b/app/frontend/static/assets/css/crafty.css index cc1a8b82..55efaeb6 100644 --- a/app/frontend/static/assets/css/crafty.css +++ b/app/frontend/static/assets/css/crafty.css @@ -37,16 +37,16 @@ nav.sidebar { width: 10px; height: 10px; border-radius: 100%; - border: 2px solid #fff; + border: 2px solid var(--white); display: block; } .toggle-handle { - background-color: white !important; + background-color: var(--white) !important; } .toggle-on { - color: black !important; + color: var(--dark) !important; } .toggle { @@ -61,7 +61,7 @@ nav.sidebar { width: 10px; height: 10px; border-radius: 100%; - border: 2px solid #fff; + border: 2px solid var(--white); display: block; } @@ -95,7 +95,7 @@ nav.sidebar { } .scrollable-element { - scrollbar-color: red yellow; + scrollbar-color: var(--red) var(--yellow); } .term-nav-item { @@ -140,6 +140,454 @@ body { text-align: center; } +/**************************************************************/ +/* CSS for Toggle Buttons */ +/**************************************************************/ +.btn-toggle { + margin: 0 4rem; + padding: 0; + position: relative; + border: none; + height: 1.5rem; + width: 3rem; + border-radius: 1.5rem; + color: #6b7381; + background: #bdc1c8; +} + +.btn-toggle:focus, +.btn-toggle.focus, +.btn-toggle:focus.active, +.btn-toggle.focus.active { + outline: none; +} + +.btn-toggle:before, +.btn-toggle:after { + line-height: 1.5rem; + width: 4rem; + text-align: center; + font-weight: 600; + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 2px; + position: absolute; + bottom: 0; + transition: opacity 0.25s; +} + +.btn-toggle:before { + content: 'Off'; + left: -4rem; +} + +.btn-toggle:after { + content: 'On'; + right: -4rem; + opacity: 0.5; +} + +.btn-toggle>.handle { + position: absolute; + top: 0.1875rem; + left: 0.1875rem; + width: 1.125rem; + height: 1.125rem; + border-radius: 1.125rem; + background: var(--white); + transition: left 0.25s; +} + +.btn-toggle.active { + transition: background-color 0.25s; +} + +.btn-toggle.active>.handle { + left: 1.6875rem; + transition: left 0.25s; +} + +.btn-toggle.active:before { + opacity: 0.5; +} + +.btn-toggle.active:after { + opacity: 1; +} + +.btn-toggle.btn-sm:before, +.btn-toggle.btn-sm:after { + line-height: -0.5rem; + color: var(--white); + letter-spacing: 0.75px; + left: 0.4125rem; + width: 2.325rem; +} + +.btn-toggle.btn-sm:before { + text-align: right; +} + +.btn-toggle.btn-sm:after { + text-align: left; + opacity: 0; +} + +.btn-toggle.btn-sm.active:before { + opacity: 0; +} + +.btn-toggle.btn-sm.active:after { + opacity: 1; +} + +.btn-toggle.btn-xs:before, +.btn-toggle.btn-xs:after { + display: none; +} + +.btn-toggle:before, +.btn-toggle:after { + color: #6b7381; +} + +.btn-toggle.active { + background-color: #29b5a8; +} + +.btn-toggle.btn-lg { + margin: 0 5rem; + padding: 0; + position: relative; + border: none; + height: 2.5rem; + width: 5rem; + border-radius: 2.5rem; +} + +.btn-toggle.btn-lg:focus, +.btn-toggle.btn-lg.focus, +.btn-toggle.btn-lg:focus.active, +.btn-toggle.btn-lg.focus.active { + outline: none; +} + +.btn-toggle.btn-lg:before, +.btn-toggle.btn-lg:after { + line-height: 2.5rem; + width: 5rem; + text-align: center; + font-weight: 600; + font-size: 1rem; + text-transform: uppercase; + letter-spacing: 2px; + position: absolute; + bottom: 0; + transition: opacity 0.25s; +} + +.btn-toggle.btn-lg:before { + content: 'Off'; + left: -5rem; +} + +.btn-toggle.btn-lg:after { + content: 'On'; + right: -5rem; + opacity: 0.5; +} + +.btn-toggle.btn-lg>.handle { + position: absolute; + top: 0.3125rem; + left: 0.3125rem; + width: 1.875rem; + height: 1.875rem; + border-radius: 1.875rem; + background: var(--white); + transition: left 0.25s; +} + +.btn-toggle.btn-lg.active { + transition: background-color 0.25s; +} + +.btn-toggle.btn-lg.active>.handle { + left: 2.8125rem; + transition: left 0.25s; +} + +.btn-toggle.btn-lg.active:before { + opacity: 0.5; +} + +.btn-toggle.btn-lg.active:after { + opacity: 1; +} + +.btn-toggle.btn-lg.btn-sm:before, +.btn-toggle.btn-lg.btn-sm:after { + line-height: 0.5rem; + color: var(--white); + letter-spacing: 0.75px; + left: 0.6875rem; + width: 3.875rem; +} + +.btn-toggle.btn-lg.btn-sm:before { + text-align: right; +} + +.btn-toggle.btn-lg.btn-sm:after { + text-align: left; + opacity: 0; +} + +.btn-toggle.btn-lg.btn-sm.active:before { + opacity: 0; +} + +.btn-toggle.btn-lg.btn-sm.active:after { + opacity: 1; +} + +.btn-toggle.btn-lg.btn-xs:before, +.btn-toggle.btn-lg.btn-xs:after { + display: none; +} + +.btn-toggle.btn-sm { + margin: 0 0.5rem; + padding: 0; + position: relative; + border: none; + height: 1.5rem; + width: 3rem; + border-radius: 1.5rem; +} + +.btn-toggle.btn-sm:focus, +.btn-toggle.btn-sm.focus, +.btn-toggle.btn-sm:focus.active, +.btn-toggle.btn-sm.focus.active { + outline: none; +} + +.btn-toggle.btn-sm:before, +.btn-toggle.btn-sm:after { + line-height: 1.5rem; + width: 0.5rem; + text-align: center; + font-weight: 600; + font-size: 0.55rem; + text-transform: uppercase; + letter-spacing: 2px; + position: absolute; + bottom: 0; + transition: opacity 0.25s; +} + +.btn-toggle.btn-sm:before { + content: 'Off'; + left: -0.5rem; +} + +.btn-toggle.btn-sm:after { + content: 'On'; + right: -0.5rem; + opacity: 0.5; +} + +.btn-toggle.btn-sm>.handle { + position: absolute; + top: 0.1875rem; + left: 0.1875rem; + width: 1.125rem; + height: 1.125rem; + border-radius: 1.125rem; + background: var(--white); + transition: left 0.25s; +} + +.btn-toggle.btn-sm.active { + transition: background-color 0.25s; +} + +.btn-toggle.btn-sm.active>.handle { + left: 1.6875rem; + transition: left 0.25s; +} + +.btn-toggle.btn-sm.active:before { + opacity: 0.5; +} + +.btn-toggle.btn-sm.active:after { + opacity: 1; +} + +.btn-toggle.btn-sm.btn-sm:before, +.btn-toggle.btn-sm.btn-sm:after { + line-height: -0.5rem; + color: var(--white); + letter-spacing: 0.75px; + left: 0.4125rem; + width: 2.325rem; +} + +.btn-toggle.btn-sm.btn-sm:before { + text-align: right; +} + +.btn-toggle.btn-sm.btn-sm:after { + text-align: left; + opacity: 0; +} + +.btn-toggle.btn-sm.btn-sm.active:before { + opacity: 0; +} + +.btn-toggle.btn-sm.btn-sm.active:after { + opacity: 1; +} + +.btn-toggle.btn-sm.btn-xs:before, +.btn-toggle.btn-sm.btn-xs:after { + display: none; +} + +.btn-toggle.btn-xs { + margin: 0 0; + padding: 0; + position: relative; + border: none; + height: 1rem; + width: 2rem; + border-radius: 1rem; +} + +.btn-toggle.btn-xs:focus, +.btn-toggle.btn-xs.focus, +.btn-toggle.btn-xs:focus.active, +.btn-toggle.btn-xs.focus.active { + outline: none; +} + +.btn-toggle.btn-xs:before, +.btn-toggle.btn-xs:after { + line-height: 1rem; + width: 0; + text-align: center; + font-weight: 600; + font-size: 0.75rem; + text-transform: uppercase; + letter-spacing: 2px; + position: absolute; + bottom: 0; + transition: opacity 0.25s; +} + +.btn-toggle.btn-xs:before { + content: 'Off'; + left: 0; +} + +.btn-toggle.btn-xs:after { + content: 'On'; + right: 0; + opacity: 0.5; +} + +.btn-toggle.btn-xs>.handle { + position: absolute; + top: 0.125rem; + left: 0.125rem; + width: 0.75rem; + height: 0.75rem; + border-radius: 0.75rem; + background: var(--white); + transition: left 0.25s; +} + +.btn-toggle.btn-xs.active { + transition: background-color 0.25s; +} + +.btn-toggle.btn-xs.active>.handle { + left: 1.125rem; + transition: left 0.25s; +} + +.btn-toggle.btn-xs.active:before { + opacity: 0.5; +} + +.btn-toggle.btn-xs.active:after { + opacity: 1; +} + +.btn-toggle.btn-xs.btn-sm:before, +.btn-toggle.btn-xs.btn-sm:after { + line-height: -1rem; + color: var(--white); + letter-spacing: 0.75px; + left: 0.275rem; + width: 1.55rem; +} + +.btn-toggle.btn-xs.btn-sm:before { + text-align: right; +} + +.btn-toggle.btn-xs.btn-sm:after { + text-align: left; + opacity: 0; +} + +.btn-toggle.btn-xs.btn-sm.active:before { + opacity: 0; +} + +.btn-toggle.btn-xs.btn-sm.active:after { + opacity: 1; +} + +.btn-toggle.btn-xs.btn-xs:before, +.btn-toggle.btn-xs.btn-xs:after { + display: none; +} + +.btn-toggle.btn-info { + color: var(--white); + background: var(--gray); +} + +.btn-toggle.btn-info:before, +.btn-toggle.btn-info:after { + color: #6b7381; +} + +.btn-toggle.btn-info.active { + background-color: var(--info); +} + +.btn-toggle.btn-secondary { + color: #6b7381; + background: #bdc1c8; +} + +.btn-toggle.btn-secondary:before, +.btn-toggle.btn-secondary:after { + color: #6b7381; +} + +.btn-toggle.btn-secondary.active { + background-color: #ff8300; +} + +/**************************************************************/ + /**************************************************************/ /* CSS for Froms Displays */ /**************************************************************/ @@ -212,6 +660,14 @@ div>.input-group>.form-control { top: calc(-0.125rem + 1px); } +a.btn-primary { + color: var(--white); +} + +button.btn-primary { + color: var(--white); +} + /**************************************************************/ /**************************************************************/ @@ -233,4 +689,24 @@ td.action .btn { margin-bottom: 0.2rem; } +/**************************************************************/ + +/**************************************************************/ +/* CSS for warnings Displays */ +/**************************************************************/ +div.warnings div.wssError { + color: var(--white); +} + +div.warnings div.wssError a { + color: var(--white-smoke); +} + +/**************************************************************/ + +/**************************************************************/ +/* CSS for ----- Displays */ +/**************************************************************/ + + /**************************************************************/ \ No newline at end of file From 1c0190d0ab8c20aadb3210f20d54a6d47896e671 Mon Sep 17 00:00:00 2001 From: Silversthorn Date: Tue, 30 Jan 2024 22:10:49 +0100 Subject: [PATCH 03/25] Impriove display for wssErrors --- app/frontend/static/assets/css/crafty.css | 452 +--------------------- app/frontend/templates/base.html | 6 +- 2 files changed, 7 insertions(+), 451 deletions(-) diff --git a/app/frontend/static/assets/css/crafty.css b/app/frontend/static/assets/css/crafty.css index 55efaeb6..4c55d7ae 100644 --- a/app/frontend/static/assets/css/crafty.css +++ b/app/frontend/static/assets/css/crafty.css @@ -140,454 +140,6 @@ body { text-align: center; } -/**************************************************************/ -/* CSS for Toggle Buttons */ -/**************************************************************/ -.btn-toggle { - margin: 0 4rem; - padding: 0; - position: relative; - border: none; - height: 1.5rem; - width: 3rem; - border-radius: 1.5rem; - color: #6b7381; - background: #bdc1c8; -} - -.btn-toggle:focus, -.btn-toggle.focus, -.btn-toggle:focus.active, -.btn-toggle.focus.active { - outline: none; -} - -.btn-toggle:before, -.btn-toggle:after { - line-height: 1.5rem; - width: 4rem; - text-align: center; - font-weight: 600; - font-size: 0.75rem; - text-transform: uppercase; - letter-spacing: 2px; - position: absolute; - bottom: 0; - transition: opacity 0.25s; -} - -.btn-toggle:before { - content: 'Off'; - left: -4rem; -} - -.btn-toggle:after { - content: 'On'; - right: -4rem; - opacity: 0.5; -} - -.btn-toggle>.handle { - position: absolute; - top: 0.1875rem; - left: 0.1875rem; - width: 1.125rem; - height: 1.125rem; - border-radius: 1.125rem; - background: var(--white); - transition: left 0.25s; -} - -.btn-toggle.active { - transition: background-color 0.25s; -} - -.btn-toggle.active>.handle { - left: 1.6875rem; - transition: left 0.25s; -} - -.btn-toggle.active:before { - opacity: 0.5; -} - -.btn-toggle.active:after { - opacity: 1; -} - -.btn-toggle.btn-sm:before, -.btn-toggle.btn-sm:after { - line-height: -0.5rem; - color: var(--white); - letter-spacing: 0.75px; - left: 0.4125rem; - width: 2.325rem; -} - -.btn-toggle.btn-sm:before { - text-align: right; -} - -.btn-toggle.btn-sm:after { - text-align: left; - opacity: 0; -} - -.btn-toggle.btn-sm.active:before { - opacity: 0; -} - -.btn-toggle.btn-sm.active:after { - opacity: 1; -} - -.btn-toggle.btn-xs:before, -.btn-toggle.btn-xs:after { - display: none; -} - -.btn-toggle:before, -.btn-toggle:after { - color: #6b7381; -} - -.btn-toggle.active { - background-color: #29b5a8; -} - -.btn-toggle.btn-lg { - margin: 0 5rem; - padding: 0; - position: relative; - border: none; - height: 2.5rem; - width: 5rem; - border-radius: 2.5rem; -} - -.btn-toggle.btn-lg:focus, -.btn-toggle.btn-lg.focus, -.btn-toggle.btn-lg:focus.active, -.btn-toggle.btn-lg.focus.active { - outline: none; -} - -.btn-toggle.btn-lg:before, -.btn-toggle.btn-lg:after { - line-height: 2.5rem; - width: 5rem; - text-align: center; - font-weight: 600; - font-size: 1rem; - text-transform: uppercase; - letter-spacing: 2px; - position: absolute; - bottom: 0; - transition: opacity 0.25s; -} - -.btn-toggle.btn-lg:before { - content: 'Off'; - left: -5rem; -} - -.btn-toggle.btn-lg:after { - content: 'On'; - right: -5rem; - opacity: 0.5; -} - -.btn-toggle.btn-lg>.handle { - position: absolute; - top: 0.3125rem; - left: 0.3125rem; - width: 1.875rem; - height: 1.875rem; - border-radius: 1.875rem; - background: var(--white); - transition: left 0.25s; -} - -.btn-toggle.btn-lg.active { - transition: background-color 0.25s; -} - -.btn-toggle.btn-lg.active>.handle { - left: 2.8125rem; - transition: left 0.25s; -} - -.btn-toggle.btn-lg.active:before { - opacity: 0.5; -} - -.btn-toggle.btn-lg.active:after { - opacity: 1; -} - -.btn-toggle.btn-lg.btn-sm:before, -.btn-toggle.btn-lg.btn-sm:after { - line-height: 0.5rem; - color: var(--white); - letter-spacing: 0.75px; - left: 0.6875rem; - width: 3.875rem; -} - -.btn-toggle.btn-lg.btn-sm:before { - text-align: right; -} - -.btn-toggle.btn-lg.btn-sm:after { - text-align: left; - opacity: 0; -} - -.btn-toggle.btn-lg.btn-sm.active:before { - opacity: 0; -} - -.btn-toggle.btn-lg.btn-sm.active:after { - opacity: 1; -} - -.btn-toggle.btn-lg.btn-xs:before, -.btn-toggle.btn-lg.btn-xs:after { - display: none; -} - -.btn-toggle.btn-sm { - margin: 0 0.5rem; - padding: 0; - position: relative; - border: none; - height: 1.5rem; - width: 3rem; - border-radius: 1.5rem; -} - -.btn-toggle.btn-sm:focus, -.btn-toggle.btn-sm.focus, -.btn-toggle.btn-sm:focus.active, -.btn-toggle.btn-sm.focus.active { - outline: none; -} - -.btn-toggle.btn-sm:before, -.btn-toggle.btn-sm:after { - line-height: 1.5rem; - width: 0.5rem; - text-align: center; - font-weight: 600; - font-size: 0.55rem; - text-transform: uppercase; - letter-spacing: 2px; - position: absolute; - bottom: 0; - transition: opacity 0.25s; -} - -.btn-toggle.btn-sm:before { - content: 'Off'; - left: -0.5rem; -} - -.btn-toggle.btn-sm:after { - content: 'On'; - right: -0.5rem; - opacity: 0.5; -} - -.btn-toggle.btn-sm>.handle { - position: absolute; - top: 0.1875rem; - left: 0.1875rem; - width: 1.125rem; - height: 1.125rem; - border-radius: 1.125rem; - background: var(--white); - transition: left 0.25s; -} - -.btn-toggle.btn-sm.active { - transition: background-color 0.25s; -} - -.btn-toggle.btn-sm.active>.handle { - left: 1.6875rem; - transition: left 0.25s; -} - -.btn-toggle.btn-sm.active:before { - opacity: 0.5; -} - -.btn-toggle.btn-sm.active:after { - opacity: 1; -} - -.btn-toggle.btn-sm.btn-sm:before, -.btn-toggle.btn-sm.btn-sm:after { - line-height: -0.5rem; - color: var(--white); - letter-spacing: 0.75px; - left: 0.4125rem; - width: 2.325rem; -} - -.btn-toggle.btn-sm.btn-sm:before { - text-align: right; -} - -.btn-toggle.btn-sm.btn-sm:after { - text-align: left; - opacity: 0; -} - -.btn-toggle.btn-sm.btn-sm.active:before { - opacity: 0; -} - -.btn-toggle.btn-sm.btn-sm.active:after { - opacity: 1; -} - -.btn-toggle.btn-sm.btn-xs:before, -.btn-toggle.btn-sm.btn-xs:after { - display: none; -} - -.btn-toggle.btn-xs { - margin: 0 0; - padding: 0; - position: relative; - border: none; - height: 1rem; - width: 2rem; - border-radius: 1rem; -} - -.btn-toggle.btn-xs:focus, -.btn-toggle.btn-xs.focus, -.btn-toggle.btn-xs:focus.active, -.btn-toggle.btn-xs.focus.active { - outline: none; -} - -.btn-toggle.btn-xs:before, -.btn-toggle.btn-xs:after { - line-height: 1rem; - width: 0; - text-align: center; - font-weight: 600; - font-size: 0.75rem; - text-transform: uppercase; - letter-spacing: 2px; - position: absolute; - bottom: 0; - transition: opacity 0.25s; -} - -.btn-toggle.btn-xs:before { - content: 'Off'; - left: 0; -} - -.btn-toggle.btn-xs:after { - content: 'On'; - right: 0; - opacity: 0.5; -} - -.btn-toggle.btn-xs>.handle { - position: absolute; - top: 0.125rem; - left: 0.125rem; - width: 0.75rem; - height: 0.75rem; - border-radius: 0.75rem; - background: var(--white); - transition: left 0.25s; -} - -.btn-toggle.btn-xs.active { - transition: background-color 0.25s; -} - -.btn-toggle.btn-xs.active>.handle { - left: 1.125rem; - transition: left 0.25s; -} - -.btn-toggle.btn-xs.active:before { - opacity: 0.5; -} - -.btn-toggle.btn-xs.active:after { - opacity: 1; -} - -.btn-toggle.btn-xs.btn-sm:before, -.btn-toggle.btn-xs.btn-sm:after { - line-height: -1rem; - color: var(--white); - letter-spacing: 0.75px; - left: 0.275rem; - width: 1.55rem; -} - -.btn-toggle.btn-xs.btn-sm:before { - text-align: right; -} - -.btn-toggle.btn-xs.btn-sm:after { - text-align: left; - opacity: 0; -} - -.btn-toggle.btn-xs.btn-sm.active:before { - opacity: 0; -} - -.btn-toggle.btn-xs.btn-sm.active:after { - opacity: 1; -} - -.btn-toggle.btn-xs.btn-xs:before, -.btn-toggle.btn-xs.btn-xs:after { - display: none; -} - -.btn-toggle.btn-info { - color: var(--white); - background: var(--gray); -} - -.btn-toggle.btn-info:before, -.btn-toggle.btn-info:after { - color: #6b7381; -} - -.btn-toggle.btn-info.active { - background-color: var(--info); -} - -.btn-toggle.btn-secondary { - color: #6b7381; - background: #bdc1c8; -} - -.btn-toggle.btn-secondary:before, -.btn-toggle.btn-secondary:after { - color: #6b7381; -} - -.btn-toggle.btn-secondary.active { - background-color: #ff8300; -} - -/**************************************************************/ - /**************************************************************/ /* CSS for Froms Displays */ /**************************************************************/ @@ -699,6 +251,10 @@ div.warnings div.wssError { } div.warnings div.wssError a { + color: var(--outline); +} + +div.warnings div.wssError a:hover { color: var(--white-smoke); } diff --git a/app/frontend/templates/base.html b/app/frontend/templates/base.html index 48c6ee95..9f1a4111 100755 --- a/app/frontend/templates/base.html +++ b/app/frontend/templates/base.html @@ -394,7 +394,7 @@ } }, callback: function (result) { - if (result){ + if (result) { location.href = "/panel/download_support_package"; } else { bootbox.close(); @@ -489,7 +489,7 @@ let linkEl = document.createElement('a') linkEl.href = link; linkEl.innerHTML = "See our documentation for details."; - linkEl.style.color = 'white'; + //linkEl.style.color = 'white'; linkEl.style.textDecoration = 'underline'; linkEl.target = "_blank"; @@ -608,4 +608,4 @@ - + \ No newline at end of file From 856caf4a9a71ac2c87b47538bb74e1c155998dce Mon Sep 17 00:00:00 2001 From: Silversthorn Date: Tue, 30 Jan 2024 22:44:00 +0100 Subject: [PATCH 04/25] trying to improve display for th-TH lang --- app/frontend/static/assets/css/crafty.css | 6 +++++- app/frontend/templates/base.html | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/frontend/static/assets/css/crafty.css b/app/frontend/static/assets/css/crafty.css index 4c55d7ae..1bf03471 100644 --- a/app/frontend/static/assets/css/crafty.css +++ b/app/frontend/static/assets/css/crafty.css @@ -261,8 +261,12 @@ div.warnings div.wssError a:hover { /**************************************************************/ /**************************************************************/ -/* CSS for ----- Displays */ +/* CSS for Fonts Displays */ /**************************************************************/ +*:lang(th-TH) :not(.fas) { + font-family: 'Sarabun', 'roboto', sans-serif; + font-size: medium; +} /**************************************************************/ \ No newline at end of file diff --git a/app/frontend/templates/base.html b/app/frontend/templates/base.html index 9f1a4111..a954859f 100755 --- a/app/frontend/templates/base.html +++ b/app/frontend/templates/base.html @@ -14,6 +14,7 @@ + @@ -53,7 +54,6 @@ - From 98bbf880d0e9dd8c65afefba96d1fc68a88d922d Mon Sep 17 00:00:00 2001 From: Silversthorn Date: Tue, 30 Jan 2024 22:58:19 +0100 Subject: [PATCH 05/25] Fixing Fonts for th-TH --- app/frontend/static/assets/css/crafty.css | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/app/frontend/static/assets/css/crafty.css b/app/frontend/static/assets/css/crafty.css index 1bf03471..286155ab 100644 --- a/app/frontend/static/assets/css/crafty.css +++ b/app/frontend/static/assets/css/crafty.css @@ -263,10 +263,9 @@ div.warnings div.wssError a:hover { /**************************************************************/ /* CSS for Fonts Displays */ /**************************************************************/ -*:lang(th-TH) :not(.fas) { +*:lang(th-TH) :not(.fa, .fas, .fab, .fa-solid) { font-family: 'Sarabun', 'roboto', sans-serif; font-size: medium; } - /**************************************************************/ \ No newline at end of file From a26159f510d42308fd405f06c031bb1dfa32ca55 Mon Sep 17 00:00:00 2001 From: computergeek125 Date: Wed, 31 Jan 2024 01:33:39 -0600 Subject: [PATCH 06/25] Added timeout to http calls, switched get to head --- app/classes/web/http_handler.py | 4 ++-- app/classes/web/http_handler_page.py | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/classes/web/http_handler.py b/app/classes/web/http_handler.py index ca340c66..32676d59 100644 --- a/app/classes/web/http_handler.py +++ b/app/classes/web/http_handler.py @@ -17,7 +17,7 @@ class HTTPHandler(BaseHandler): url = "https://" + url db_port = self.helper.get_setting("https_port") try: - resp = requests.get(url + ":" + str(port)) + resp = requests.head(url + ":" + str(port), timeout=(0.5, 5)) resp.raise_for_status() except Exception: port = db_port @@ -35,7 +35,7 @@ class HTTPHandlerPage(BaseHandler): url = "https://" + url db_port = self.helper.get_setting("https_port") try: - resp = requests.get(url + ":" + str(port)) + resp = requests.head(url + ":" + str(port), timeout=(0.5, 5)) resp.raise_for_status() except Exception: port = db_port diff --git a/app/classes/web/http_handler_page.py b/app/classes/web/http_handler_page.py index 30a8aaa1..77161577 100644 --- a/app/classes/web/http_handler_page.py +++ b/app/classes/web/http_handler_page.py @@ -25,7 +25,7 @@ class HTTPHandlerPage(BaseHandler): backup_url = url + str(self.helper.get_setting("https_port")) try: - resp = requests.get(primary_url) + resp = requests.head(primary_url, timeout=(0.5, 5)) resp.raise_for_status() url = primary_url except Exception: From d92d06e4b1b51701dd7167a34c4d36e9d1f08b47 Mon Sep 17 00:00:00 2001 From: Silversthorn Date: Wed, 31 Jan 2024 23:04:22 +0100 Subject: [PATCH 07/25] Fixing issue 322 --- app/frontend/static/assets/js/motd.js | 2 +- app/frontend/templates/panel/dashboard.html | 38 +++--- .../templates/panel/parts/details_stats.html | 120 ++++++++---------- app/frontend/templates/public/status.html | 5 +- app/translations/en_EN.json | 3 +- app/translations/fr_FR.json | 3 +- 6 files changed, 76 insertions(+), 95 deletions(-) diff --git a/app/frontend/static/assets/js/motd.js b/app/frontend/static/assets/js/motd.js index 3d07c8fb..8f63e763 100644 --- a/app/frontend/static/assets/js/motd.js +++ b/app/frontend/static/assets/js/motd.js @@ -96,7 +96,7 @@ function initParser(input, output) { var input = document.getElementById(input), output = document.getElementById(output); if (input != null && output != null) { - var parsed = parseStyle(input.innerHTML); + var parsed = parseStyle(input.innerText); output.innerHTML = ''; output.appendChild(parsed); } diff --git a/app/frontend/templates/panel/dashboard.html b/app/frontend/templates/panel/dashboard.html index eb4a51a9..0d4fc0ac 100644 --- a/app/frontend/templates/panel/dashboard.html +++ b/app/frontend/templates/panel/dashboard.html @@ -287,8 +287,7 @@ data['lang']) }}
{% if server['stats']['desc'] != 'False' %} -
{{ - server['stats']['desc'] }}

+
{{ translate('serverStats', 'loadingMotd', data['lang']) }}

{% end %} {% if server['stats']['version'] != 'False' %} @@ -554,6 +553,7 @@ display: none; /* for Chrome, Safari, and Opera */ } + .gray { color: gray !important; } @@ -736,11 +736,11 @@ try { console.log(`#server_desc_${server.getAttribute("data-serverId")}`) $(`#server_desc_${server.getAttribute("data-serverId")}`).toggleClass("gray", server.getAttribute('data-count') === 'false') - if (server.getAttribute('data-count') === 'true'){ + if (server.getAttribute('data-count') === 'true') { all_total_players += parseInt(server.getAttribute('data-players')); all_total_max_players += parseInt(server.getAttribute('data-max')); } - } catch { + } catch { console.log("Player totals are not of type int"); } }) @@ -1006,24 +1006,24 @@ async function sendOrder(id_string) { const token = getCookie("_xsrf") let res = await fetch(`/api/v2/users/@me`, { - method: 'PATCH', - headers: { - 'X-XSRFToken': token - }, - body: JSON.stringify({ + method: 'PATCH', + headers: { + 'X-XSRFToken': token + }, + body: JSON.stringify({ server_order: id_string, }), - }); - let responseData = await res.json(); - if (responseData.status === "ok") { - return - } else { - - bootbox.alert({ - title: responseData.status, - message: responseData.error }); - } + let responseData = await res.json(); + if (responseData.status === "ok") { + return + } else { + + bootbox.alert({ + title: responseData.status, + message: responseData.error + }); + } } // Inits the sortable $("table#servers_table tbody") diff --git a/app/frontend/templates/panel/parts/details_stats.html b/app/frontend/templates/panel/parts/details_stats.html index ad190bc3..00fa516b 100644 --- a/app/frontend/templates/panel/parts/details_stats.html +++ b/app/frontend/templates/panel/parts/details_stats.html @@ -5,42 +5,27 @@
{% if data['server_stats']['running'] %} - {{ translate('serverStats', 'serverStatus', data['lang']) }}: {{ translate('serverStats', 'online', data['lang']) }}
- {{ translate('serverStats', 'serverStarted', data['lang']) }}: {{ - data['server_stats']['started'] }}
- {{ translate('serverStats', 'serverUptime', data['lang']) }}: {{ - translate('serverStats', 'errorCalculatingUptime', data['lang']) }} + {{ translate('serverStats', 'serverStatus', data['lang']) }}: {{ translate('serverStats', 'online', data['lang']) }}
+ {{ translate('serverStats', 'serverStarted', data['lang']) }}: {{ data['server_stats']['started'] }}
+ {{ translate('serverStats', 'serverUptime', data['lang']) }}: {{ translate('serverStats', 'errorCalculatingUptime', data['lang']) }} {% elif data['server_stats']['crashed'] %} - {{ translate('serverStats', 'serverStatus', data['lang']) }}: - {{ translate('dashboard', 'crashed', data['lang']) - }}
- {{ translate('serverStats', 'serverStarted', data['lang']) }}: {{ translate('dashboard', 'crashed', - data['lang']) }}
- {{ translate('serverStats', 'serverUptime', data['lang']) }}: - {{ translate('dashboard', 'crashed', data['lang']) }} + {{ translate('serverStats', 'serverStatus', data['lang']) }}: {{ translate('dashboard', 'crashed', data['lang']) }}
+ {{ translate('serverStats', 'serverStarted', data['lang']) }}: {{ translate('dashboard', 'crashed',data['lang']) }}
+ {{ translate('serverStats', 'serverUptime', data['lang']) }}: {{ translate('dashboard', 'crashed', data['lang']) }} {% else %} - {{ translate('serverStats', 'serverStatus', data['lang']) }}: {{ translate('serverStats', 'offline', data['lang']) }}
- {{ translate('serverStats', 'serverStarted', data['lang']) }}: {{ translate('serverStats', 'offline', data['lang']) }}
- {{ translate('serverStats', 'serverUptime', data['lang']) }}: {{ translate('serverStats', 'offline', data['lang']) }} + {{ translate('serverStats', 'serverStatus', data['lang']) }}: {{ translate('serverStats', 'offline', data['lang']) }}
+ {{ translate('serverStats', 'serverStarted', data['lang']) }}: {{ translate('serverStats', 'offline', data['lang']) }}
+ {{ translate('serverStats', 'serverUptime', data['lang']) }}: {{ translate('serverStats', 'offline', data['lang']) }} {% end %}
- {{ translate('serverStats', 'serverTimeZone', data['lang']) }}: {{ - data['serverTZ'] }} + {{ translate('serverStats', 'serverTimeZone', data['lang']) }}: {{ data['serverTZ'] }}
- {{ translate('serverStats', 'cpuUsage', data['lang']) }}: {{ - data['server_stats']['cpu'] }}%
- {{ translate('serverStats', 'memUsage', data['lang']) }}: {{ - data['server_stats']['mem'] }}
+ {{ translate('serverStats', 'cpuUsage', data['lang']) }}: {{ data['server_stats']['cpu'] }}%
+ {{ translate('serverStats', 'memUsage', data['lang']) }}: {{ data['server_stats']['mem'] }}
{% if data['server_stats']['int_ping_results'] %} - {{ translate('serverStats', 'players', data['lang']) }}: {{ - data['server_stats']['online'] }} / {{ data['server_stats']['max'] }}
+ {{ translate('serverStats', 'players', data['lang']) }}: {{ data['server_stats']['online'] }} / {{ data['server_stats']['max'] }}
{% else %} {{ translate('serverStats', 'players', data['lang']) }}: 0/0
{% end %} @@ -48,17 +33,12 @@
{% if data['server_stats']['version'] != 'False' %} - {{ translate('serverStats', 'version', data['lang']) }}: {{ - data['server_stats']['version'] }}
- {{ translate('serverStats', 'description', data['lang']) }}: {{ data['server_stats']['desc'] }} + {{ translate('serverStats', 'version', data['lang']) }}: {{ data['server_stats']['version'] }}
+ {{ translate('serverStats', 'description', data['lang']) }}: {{ translate('serverStats', 'loadingMotd', data['lang']) }}
{% else %} - {{ translate('serverStats', 'version', data['lang']) }}: {{ - translate('serverStats', 'unableToConnect', data['lang']) }}
- {{ translate('serverStats', 'description', data['lang']) }}: {{ translate('serverStats', - 'unableToConnect', data['lang']) }}
+ {{ translate('serverStats', 'version', data['lang']) }}: {{ translate('serverStats', 'unableToConnect', data['lang']) }}
+ {{ translate('serverStats', 'description', data['lang']) }}: {{ translate('serverStats', 'unableToConnect', data['lang']) }}
{% end %} Server Type: {{data['server_stats']['server_type']}} @@ -229,23 +209,23 @@ initParser('input_motd', 'input_motd'); let text = "" - let players = server.players_cache; - for(let i=0; i < players.length; i++){ - text += ``; - text += `${players[i]["name"]}`; - if(players[i]["status"] === "Online"){ - text += ` ${ players[i]['status'] }` - }else{ - text += ` ${ players[i]['status'] } Last connection :
${ players[i]['last_seen'] }
` - } - if(server["running"]){ - text += `


` - }else{ - text += ` Unavailable
(Server Offline)
` - } + let players = server.players_cache; + for (let i = 0; i < players.length; i++) { + text += ``; + text += `${players[i]["name"]}`; + if (players[i]["status"] === "Online") { + text += ` ${players[i]['status']}` + } else { + text += ` ${players[i]['status']} Last connection :
${players[i]['last_seen']}
` + } + if (server["running"]) { + text += `


` + } else { + text += ` Unavailable
(Server Offline)
` + } - } - $("#player-body").html(text); + } + $("#player-body").html(text); } //used to get cookies from browser - this is part of tornados xsrf protection - it's for extra security @@ -262,24 +242,24 @@ add_server_name(); //} }); - async function add_server_name(){ + async function add_server_name() { let res = await fetch(`/api/v2/servers/${serverId}`, { - method: 'GET', - headers: { - 'X-XSRFToken': token - }, - }); - let responseData = await res.json(); - if (responseData.status === "ok") { - console.log(responseData) - $("#server-name-nav").html(`${responseData.data['server_name']}`) - $("#server-name-nav").show(); - } else { + method: 'GET', + headers: { + 'X-XSRFToken': token + }, + }); + let responseData = await res.json(); + if (responseData.status === "ok") { + console.log(responseData) + $("#server-name-nav").html(`${responseData.data['server_name']}`) + $("#server-name-nav").show(); + } else { - bootbox.alert({ - title: responseData.error, - message: responseData.error_data - }); - } + bootbox.alert({ + title: responseData.error, + message: responseData.error_data + }); + } } \ No newline at end of file diff --git a/app/frontend/templates/public/status.html b/app/frontend/templates/public/status.html index 1190b9f8..0693ee2e 100644 --- a/app/frontend/templates/public/status.html +++ b/app/frontend/templates/public/status.html @@ -49,7 +49,7 @@ icon
- {{ server['stats']['desc'] }} + {{ translate('serverStats', 'loadingMotd', data['lang']) }}
{% end %} @@ -133,8 +133,7 @@
{% if server['stats']['desc'] != 'False' %}
- {{ - server['stats']['desc'] }}
+ {{ translate('serverStats', 'loadingMotd', data['lang']) }}
{% end %}
diff --git a/app/translations/en_EN.json b/app/translations/en_EN.json index 32721082..25c9096e 100644 --- a/app/translations/en_EN.json +++ b/app/translations/en_EN.json @@ -512,6 +512,7 @@ "cpuUsage": "CPU Usage", "description": "Description", "errorCalculatingUptime": "Error Calculating Uptime", + "loadingMotd": "Loading MOTD", "memUsage": "Memory Usage", "offline": "Offline", "online": "Online", @@ -666,4 +667,4 @@ "webhook_body": "Webhook Body", "webhooks": "Webhooks" } -} +} \ No newline at end of file diff --git a/app/translations/fr_FR.json b/app/translations/fr_FR.json index aa45a69b..b8078a84 100644 --- a/app/translations/fr_FR.json +++ b/app/translations/fr_FR.json @@ -512,6 +512,7 @@ "cpuUsage": "Utilisation CPU", "description": "Description", "errorCalculatingUptime": "Erreur de Calcul du Temps de Disponibilité", + "loadingMotd": "Chargement MOTD", "memUsage": "Utilisation Mémoire", "offline": "Hors Ligne", "online": "En Ligne", @@ -667,4 +668,4 @@ "webhook_body": "Corps du Webhook", "webhooks": "Webhooks" } -} +} \ No newline at end of file From ccf67002cd76bb95c1e4fede47a9d94b22ff243f Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 31 Jan 2024 19:17:13 -0500 Subject: [PATCH 08/25] Remove print statement --- app/classes/web/tornado_handler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/classes/web/tornado_handler.py b/app/classes/web/tornado_handler.py index 82ae081c..fbcf970f 100644 --- a/app/classes/web/tornado_handler.py +++ b/app/classes/web/tornado_handler.py @@ -190,7 +190,7 @@ class Webserver: login_url="/login", serve_traceback=debug_errors, ) - print(http_port) + if http_port != 0: self.http_server = tornado.httpserver.HTTPServer(http_app) self.http_server.listen(http_port) From d53404285c2891941bb6b074bc398ac190ced223 Mon Sep 17 00:00:00 2001 From: Andrew Date: Wed, 31 Jan 2024 23:06:37 -0500 Subject: [PATCH 09/25] Remove ability to move to create server --- app/classes/web/server_handler.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/classes/web/server_handler.py b/app/classes/web/server_handler.py index 69864049..e940352e 100644 --- a/app/classes/web/server_handler.py +++ b/app/classes/web/server_handler.py @@ -86,6 +86,9 @@ class ServerHandler(BaseHandler): template = "public/404.html" + if exec_user["username"] == "anti-lockout-user": + return self.redirect("/panel/panel_config") + page_data = { "update_available": self.helper.update_available, "version_data": self.helper.get_version_string(), From 5c37b0e0fd102a08191f5c7c87e6a2c83dd7dc44 Mon Sep 17 00:00:00 2001 From: Andrew Date: Thu, 1 Feb 2024 00:08:34 -0500 Subject: [PATCH 10/25] Add auth logging --- app/classes/shared/main_controller.py | 43 ++++++++++++++++--- .../routes/api/crafty/antilockout/index.py | 4 ++ 2 files changed, 42 insertions(+), 5 deletions(-) diff --git a/app/classes/shared/main_controller.py b/app/classes/shared/main_controller.py index 216c13e9..cfb3a10a 100644 --- a/app/classes/shared/main_controller.py +++ b/app/classes/shared/main_controller.py @@ -90,18 +90,51 @@ class Controller: def log_attempt(self, remote_ip, username): remote = self.auth_tracker.get(str(remote_ip), None) - if remote: - remote["names"].append(username) - remote["attempts"] += 1 - remote["times"].append(datetime.now().strftime("%d/%m/%Y %H:%M:%S")) + if not remote: + self.auth_tracker[str(remote_ip)] = { + "login": { + "names": [username], + "attempts": 1, + "times": [datetime.now().strftime("%d/%m/%Y %H:%M:%S")], + } + } + return + if remote.get("login", None): + remote["login"]["names"].append(username) + remote["login"]["attempts"] += 1 + remote["login"]["times"].append( + datetime.now().strftime("%d/%m/%Y %H:%M:%S") + ) self.auth_tracker[str(remote_ip)] = remote else: - self.auth_tracker[str(remote_ip)] = { + self.auth_tracker[str(remote_ip)]["login"] = { "names": [username], "attempts": 1, "times": [datetime.now().strftime("%d/%m/%Y %H:%M:%S")], } + def log_antilockout(self, remote_ip): + remote = self.auth_tracker.get(str(remote_ip), None) + if not remote: + self.auth_tracker[str(remote_ip)] = { + "anti-lockout": { + "attempts": 1, + "times": [datetime.now().strftime("%d/%m/%Y %H:%M:%S")], + } + } + return + if remote.get("anti-lockout", None): + remote["anti-lockout"]["attempts"] += 1 + remote["anti-lockout"]["times"].append( + datetime.now().strftime("%d/%m/%Y %H:%M:%S") + ) + self.auth_tracker[str(remote_ip)] = remote + else: + self.auth_tracker[str(remote_ip)]["anti-lockout"] = { + "attempts": 1, + "times": [datetime.now().strftime("%d/%m/%Y %H:%M:%S")], + } + def write_auth_tracker(self): with open( os.path.join(os.path.curdir, "logs", "auth_tracker.log"), diff --git a/app/classes/web/routes/api/crafty/antilockout/index.py b/app/classes/web/routes/api/crafty/antilockout/index.py index 0a9ab03a..ab8e799a 100644 --- a/app/classes/web/routes/api/crafty/antilockout/index.py +++ b/app/classes/web/routes/api/crafty/antilockout/index.py @@ -2,10 +2,14 @@ import logging from app.classes.web.base_api_handler import BaseApiHandler logger = logging.getLogger(__name__) +auth_log = logging.getLogger("auth") class ApiCraftyLockoutHandler(BaseApiHandler): def get(self): + auth_log.warning(f"Anti-Lockout request from {self.get_remote_ip()}") + self.controller.log_antilockout(self.get_remote_ip()) + if self.controller.users.get_id_by_name("anti-lockout-user"): return self.finish_json( 425, {"status": "error", "data": "Lockout recovery already in progress"} From 7b598406beffdfbacdba8e74a3a70111f33531f6 Mon Sep 17 00:00:00 2001 From: Analicia Abernathy Date: Thu, 1 Feb 2024 18:17:34 -0600 Subject: [PATCH 11/25] Added loadingMotd translation for 4.2.3 --- app/translations/de_DE.json | 1 + app/translations/en_EN.json | 2 +- app/translations/fr_FR.json | 2 +- app/translations/lol_EN.json | 1 + app/translations/lv_LV.json | 1 + app/translations/nl_BE.json | 1 + app/translations/pl_PL.json | 1 + app/translations/th_TH.json | 1 + app/translations/tr_TR.json | 1 + app/translations/uk_UA.json | 1 + app/translations/zh_CN.json | 3 ++- 11 files changed, 12 insertions(+), 3 deletions(-) diff --git a/app/translations/de_DE.json b/app/translations/de_DE.json index 1a7f8995..ea4fbe69 100644 --- a/app/translations/de_DE.json +++ b/app/translations/de_DE.json @@ -512,6 +512,7 @@ "cpuUsage": "CPU-Nutzung", "description": "Beschreibung", "errorCalculatingUptime": "Fehler bei der Berechnung der Betriebszeit", + "loadingMotd": "Nachricht des Tages lädt (MOTD)", "memUsage": "RAM/Speicherverbrauch", "offline": "Offline", "online": "Online", diff --git a/app/translations/en_EN.json b/app/translations/en_EN.json index 25c9096e..e5ce117b 100644 --- a/app/translations/en_EN.json +++ b/app/translations/en_EN.json @@ -667,4 +667,4 @@ "webhook_body": "Webhook Body", "webhooks": "Webhooks" } -} \ No newline at end of file +} diff --git a/app/translations/fr_FR.json b/app/translations/fr_FR.json index b8078a84..cb32762f 100644 --- a/app/translations/fr_FR.json +++ b/app/translations/fr_FR.json @@ -668,4 +668,4 @@ "webhook_body": "Corps du Webhook", "webhooks": "Webhooks" } -} \ No newline at end of file +} diff --git a/app/translations/lol_EN.json b/app/translations/lol_EN.json index 4836501b..02ad47d5 100644 --- a/app/translations/lol_EN.json +++ b/app/translations/lol_EN.json @@ -512,6 +512,7 @@ "cpuUsage": "CPU USAGE", "description": "DESCRIPSHUN", "errorCalculatingUptime": "I DUN GOOF'D WEN CALCULATIN TEH TEIM AWAEK!", + "loadingMotd": "LOADIN' MEOWSSAGE OF DA DAY", "memUsage": "HOW HARD IZ THINKIN RN", "offline": "TURND OFF", "online": "TURND OAN", diff --git a/app/translations/lv_LV.json b/app/translations/lv_LV.json index 354a0e54..81cdf9d6 100644 --- a/app/translations/lv_LV.json +++ b/app/translations/lv_LV.json @@ -513,6 +513,7 @@ "cpuUsage": "CPU Lietojums", "description": "Apraksts", "errorCalculatingUptime": "Kļūda aprēķinot darbības laiku", + "loadingMotd": "Ielādē MOTD", "memUsage": "Atmiņas Lietojums", "offline": "Offlinā", "online": "Onlinā", diff --git a/app/translations/nl_BE.json b/app/translations/nl_BE.json index c9414bbe..4108a213 100644 --- a/app/translations/nl_BE.json +++ b/app/translations/nl_BE.json @@ -512,6 +512,7 @@ "cpuUsage": "CPU gebruik", "description": "Beschrijving", "errorCalculatingUptime": "Fout bij berekenen van uptime", + "loadingMotd": "MOTD laden", "memUsage": "Geheugengebruik", "offline": "Offline", "online": "Online", diff --git a/app/translations/pl_PL.json b/app/translations/pl_PL.json index 86f8f9cb..47227697 100644 --- a/app/translations/pl_PL.json +++ b/app/translations/pl_PL.json @@ -512,6 +512,7 @@ "cpuUsage": "Użycie procesora", "description": "Opis", "errorCalculatingUptime": "Błąd obliczania czasu pracy", + "loadingMotd": "Wczytywanie MOTD", "memUsage": "Użycie RAMu", "offline": "Wyłączony", "online": "Włączony", diff --git a/app/translations/th_TH.json b/app/translations/th_TH.json index a833cf1c..3603152c 100644 --- a/app/translations/th_TH.json +++ b/app/translations/th_TH.json @@ -512,6 +512,7 @@ "cpuUsage": "การใช้งานซีพียู", "description": "คำอธิบาย", "errorCalculatingUptime": "เกิดข้อผิดพลาดในการคำนวณสถานะการออนไลน์", + "loadingMotd": "กำลังโหลด MOTD", "memUsage": "การใช้งานหน่วยความจำ", "offline": "ออฟไลน์", "online": "ออนไลน์", diff --git a/app/translations/tr_TR.json b/app/translations/tr_TR.json index 9ab3a6c8..2f0e206e 100644 --- a/app/translations/tr_TR.json +++ b/app/translations/tr_TR.json @@ -512,6 +512,7 @@ "cpuUsage": "CPU Kullanımı", "description": "Açıklama", "errorCalculatingUptime": "Çalışma Süresi Hesaplanırken Hata", + "loadingMotd": "MOTD yükleniyor", "memUsage": "Bellek Kullanımı", "offline": "Çevrimdışı", "online": "Çevrimiçi", diff --git a/app/translations/uk_UA.json b/app/translations/uk_UA.json index a7018a5f..917cfa18 100644 --- a/app/translations/uk_UA.json +++ b/app/translations/uk_UA.json @@ -512,6 +512,7 @@ "cpuUsage": "Використання Процесора", "description": "Опис", "errorCalculatingUptime": "Підрахунок помилок аптайму", + "loadingMotd": "Завантаження MOTD", "memUsage": "Використання ОПЗ", "offline": "Оффлайн", "online": "Онлайн", diff --git a/app/translations/zh_CN.json b/app/translations/zh_CN.json index ffac7b3b..ac3cb7f4 100644 --- a/app/translations/zh_CN.json +++ b/app/translations/zh_CN.json @@ -95,7 +95,7 @@ "lastBackup": "上次:", "max": "最大", "memUsage": "内存使用率", - "motd": "今日消息(MOTD)", + "motd": "服务器描述(MOTD)", "newServer": "创建新服务器", "nextBackup": "下次:", "no-servers": "当前没有服务器。要开始,请点击", @@ -512,6 +512,7 @@ "cpuUsage": "CPU 使用率", "description": "简介", "errorCalculatingUptime": "计算正常运行时间时发生错误", + "loadingMotd": "正在加载服务器描述(MOTD)", "memUsage": "内存使用率", "offline": "已停止", "online": "运行中", From 9a667b02a45c6267429bdcad49b8b8e75f3ca33b Mon Sep 17 00:00:00 2001 From: "Analicia A." Date: Fri, 2 Feb 2024 16:47:59 +0000 Subject: [PATCH 12/25] Updated for 4.2.3 --- app/translations/he_IL.json | 1 + 1 file changed, 1 insertion(+) diff --git a/app/translations/he_IL.json b/app/translations/he_IL.json index cff35559..6d0979e9 100644 --- a/app/translations/he_IL.json +++ b/app/translations/he_IL.json @@ -512,6 +512,7 @@ "cpuUsage": "שימוש במעבד", "description": "תיאור", "errorCalculatingUptime": "שגיאה בחישוב זמן פעולה", + "loadingMotd": "טוען MOTD", "memUsage": "שימוש בזיכרון", "offline": "לא מקוון", "online": "פועל", From be4c7b53f964cdfffdba873d987ca7e0d755a59d Mon Sep 17 00:00:00 2001 From: Zedifus Date: Fri, 2 Feb 2024 19:11:18 +0000 Subject: [PATCH 13/25] Install packages in pylint analysis job --- .gitlab/lint.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab/lint.yml b/.gitlab/lint.yml index f335dea8..16d21838 100644 --- a/.gitlab/lint.yml +++ b/.gitlab/lint.yml @@ -52,6 +52,7 @@ pylint: when: never - if: "$CI_COMMIT_TAG || $CI_COMMIT_BRANCH" script: + - pip3 install --no-cache-dir -r requirements.txt - pylint --exit-zero --load-plugins=pylint_gitlab --output-format=gitlab-codeclimate:codeclimate.json $(find -type f -name "*.py" ! -path "**/.venv/**" ! -path "**/app/migrations/**") artifacts: reports: From 75f918fe13a067d977b23e561299a50073843352 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Fri, 2 Feb 2024 19:23:34 +0000 Subject: [PATCH 14/25] Add deps for wheel build --- .gitlab/lint.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.gitlab/lint.yml b/.gitlab/lint.yml index 16d21838..bc797808 100644 --- a/.gitlab/lint.yml +++ b/.gitlab/lint.yml @@ -51,8 +51,11 @@ pylint: - if: "$CODE_QUALITY_DISABLED" when: never - if: "$CI_COMMIT_TAG || $CI_COMMIT_BRANCH" - script: + before_script: + - apk update + - apk add gcc python3-dev linux-headers build-base - pip3 install --no-cache-dir -r requirements.txt + script: - pylint --exit-zero --load-plugins=pylint_gitlab --output-format=gitlab-codeclimate:codeclimate.json $(find -type f -name "*.py" ! -path "**/.venv/**" ! -path "**/app/migrations/**") artifacts: reports: From 23ba911686605d35ef09eb992509280f8701c47e Mon Sep 17 00:00:00 2001 From: Silversthorn Date: Fri, 2 Feb 2024 20:37:07 +0100 Subject: [PATCH 15/25] Fixing same size text everywhere --- app/frontend/static/assets/css/crafty.css | 1 - 1 file changed, 1 deletion(-) diff --git a/app/frontend/static/assets/css/crafty.css b/app/frontend/static/assets/css/crafty.css index 286155ab..43dd2e6a 100644 --- a/app/frontend/static/assets/css/crafty.css +++ b/app/frontend/static/assets/css/crafty.css @@ -265,7 +265,6 @@ div.warnings div.wssError a:hover { /**************************************************************/ *:lang(th-TH) :not(.fa, .fas, .fab, .fa-solid) { font-family: 'Sarabun', 'roboto', sans-serif; - font-size: medium; } /**************************************************************/ \ No newline at end of file From ef691eda5c37ae0267cfd99d7d4c48f75d37d984 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Fri, 2 Feb 2024 19:51:17 +0000 Subject: [PATCH 16/25] Add exclude for E1101: Module 'nh3' has no 'clean' member --False Positive-- Issue tracking (fix planned for pylint 4.0.0) https://github.com/messense/nh3/issues/18 https://github.com/pylint-dev/pylint/issues/8756 --- app/classes/web/base_handler.py | 2 +- app/classes/web/panel_handler.py | 16 ++++++++++++---- app/classes/web/public_handler.py | 21 +++++++++++++++------ 3 files changed, 28 insertions(+), 11 deletions(-) diff --git a/app/classes/web/base_handler.py b/app/classes/web/base_handler.py index ad490c2f..ced6cb97 100644 --- a/app/classes/web/base_handler.py +++ b/app/classes/web/base_handler.py @@ -106,7 +106,7 @@ class BaseHandler(tornado.web.RequestHandler): if type(text) in self.nobleach: logger.debug("Auto-bleaching - bypass type") return text - return nh3.clean(text) + return nh3.clean(text) # pylint: disable=no-member def get_argument( self, diff --git a/app/classes/web/panel_handler.py b/app/classes/web/panel_handler.py index 0dc1df31..08dd1c85 100644 --- a/app/classes/web/panel_handler.py +++ b/app/classes/web/panel_handler.py @@ -80,7 +80,9 @@ class PanelHandler(BaseHandler): ) in self.controller.crafty_perms.list_defined_crafty_permissions(): argument = int( float( - nh3.clean(self.get_argument(f"permission_{permission.name}", "0")) + nh3.clean( + self.get_argument(f"permission_{permission.name}", "0") + ) # pylint: disable=no-member ) ) if argument: @@ -89,7 +91,9 @@ class PanelHandler(BaseHandler): ) q_argument = int( - float(nh3.clean(self.get_argument(f"quantity_{permission.name}", "0"))) + float( + nh3.clean(self.get_argument(f"quantity_{permission.name}", "0")) + ) # pylint: disable=no-member ) if q_argument: server_quantity[permission.name] = q_argument @@ -503,7 +507,9 @@ class PanelHandler(BaseHandler): template = "panel/dashboard.html" elif page == "server_detail": - subpage = nh3.clean(self.get_argument("subpage", "")) + subpage = nh3.clean( + self.get_argument("subpage", "") + ) # pylint: disable=no-member server_id = self.check_server_id() # load page the user was on last @@ -1362,7 +1368,9 @@ class PanelHandler(BaseHandler): template = "panel/panel_edit_user_apikeys.html" elif page == "remove_user": - user_id = nh3.clean(self.get_argument("id", None)) + user_id = nh3.clean( + self.get_argument("id", None) + ) # pylint: disable=no-member if ( not superuser diff --git a/app/classes/web/public_handler.py b/app/classes/web/public_handler.py index 7df88f68..101727eb 100644 --- a/app/classes/web/public_handler.py +++ b/app/classes/web/public_handler.py @@ -29,8 +29,12 @@ class PublicHandler(BaseHandler): # self.clear_cookie("user_data") def get(self, page=None): - error = nh3.clean(self.get_argument("error", "Invalid Login!")) - error_msg = nh3.clean(self.get_argument("error_msg", "")) + error = nh3.clean( + self.get_argument("error", "Invalid Login!") + ) # pylint: disable=no-member + error_msg = nh3.clean( + self.get_argument("error_msg", "") + ) # pylint: disable=no-member page_data = { "version": self.helper.get_version_string(), @@ -87,8 +91,12 @@ class PublicHandler(BaseHandler): ) def post(self, page=None): - error = nh3.clean(self.get_argument("error", "Invalid Login!")) - error_msg = nh3.clean(self.get_argument("error_msg", "")) + error = nh3.clean( + self.get_argument("error", "Invalid Login!") + ) # pylint: disable=no-member + error_msg = nh3.clean( + self.get_argument("error_msg", "") + ) # pylint: disable=no-member page_data = { "version": self.helper.get_version_string(), @@ -108,10 +116,11 @@ class PublicHandler(BaseHandler): if self.request.query: next_page = "/login?" + self.request.query - entered_username = nh3.clean(self.get_argument("username")) + entered_username = nh3.clean( + self.get_argument("username") + ) # pylint: disable=no-member entered_password = self.get_argument("password") - # pylint: disable=no-member try: user_id = HelperUsers.get_user_id_by_name(entered_username.lower()) user_data = HelperUsers.get_user_model(user_id) From a3236d72fd9a7e053d2909fc8744bae942ab7ebd Mon Sep 17 00:00:00 2001 From: Zedifus Date: Fri, 2 Feb 2024 20:36:04 +0000 Subject: [PATCH 17/25] Correct nh3 no-member exemptions affected by black formatting --- app/classes/web/panel_handler.py | 20 ++++++++++---------- app/classes/web/public_handler.py | 26 +++++++++++--------------- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/app/classes/web/panel_handler.py b/app/classes/web/panel_handler.py index 08dd1c85..a7e54974 100644 --- a/app/classes/web/panel_handler.py +++ b/app/classes/web/panel_handler.py @@ -80,9 +80,8 @@ class PanelHandler(BaseHandler): ) in self.controller.crafty_perms.list_defined_crafty_permissions(): argument = int( float( - nh3.clean( - self.get_argument(f"permission_{permission.name}", "0") - ) # pylint: disable=no-member + # pylint: disable=no-member + nh3.clean(self.get_argument(f"permission_{permission.name}", "0")) ) ) if argument: @@ -92,8 +91,9 @@ class PanelHandler(BaseHandler): q_argument = int( float( + # pylint: disable=no-member nh3.clean(self.get_argument(f"quantity_{permission.name}", "0")) - ) # pylint: disable=no-member + ) ) if q_argument: server_quantity[permission.name] = q_argument @@ -507,9 +507,9 @@ class PanelHandler(BaseHandler): template = "panel/dashboard.html" elif page == "server_detail": - subpage = nh3.clean( - self.get_argument("subpage", "") - ) # pylint: disable=no-member + # pylint: disable=no-member + subpage = nh3.clean(self.get_argument("subpage", "")) + # pylint: enable=no-member server_id = self.check_server_id() # load page the user was on last @@ -1368,9 +1368,9 @@ class PanelHandler(BaseHandler): template = "panel/panel_edit_user_apikeys.html" elif page == "remove_user": - user_id = nh3.clean( - self.get_argument("id", None) - ) # pylint: disable=no-member + # pylint: disable=no-member + user_id = nh3.clean(self.get_argument("id", None)) + # pylint: enable=no-member if ( not superuser diff --git a/app/classes/web/public_handler.py b/app/classes/web/public_handler.py index 101727eb..762d3fb1 100644 --- a/app/classes/web/public_handler.py +++ b/app/classes/web/public_handler.py @@ -29,12 +29,10 @@ class PublicHandler(BaseHandler): # self.clear_cookie("user_data") def get(self, page=None): - error = nh3.clean( - self.get_argument("error", "Invalid Login!") - ) # pylint: disable=no-member - error_msg = nh3.clean( - self.get_argument("error_msg", "") - ) # pylint: disable=no-member + # pylint: disable=no-member + error = nh3.clean(self.get_argument("error", "Invalid Login!")) + error_msg = nh3.clean(self.get_argument("error_msg", "")) + # pylint: enable=no-member page_data = { "version": self.helper.get_version_string(), @@ -91,12 +89,10 @@ class PublicHandler(BaseHandler): ) def post(self, page=None): - error = nh3.clean( - self.get_argument("error", "Invalid Login!") - ) # pylint: disable=no-member - error_msg = nh3.clean( - self.get_argument("error_msg", "") - ) # pylint: disable=no-member + # pylint: disable=no-member + error = nh3.clean(self.get_argument("error", "Invalid Login!")) + error_msg = nh3.clean(self.get_argument("error_msg", "")) + # pylint: enable=no-member page_data = { "version": self.helper.get_version_string(), @@ -116,10 +112,10 @@ class PublicHandler(BaseHandler): if self.request.query: next_page = "/login?" + self.request.query - entered_username = nh3.clean( - self.get_argument("username") - ) # pylint: disable=no-member + # pylint: disable=no-member + entered_username = nh3.clean(self.get_argument("username")) entered_password = self.get_argument("password") + # pylint: enable=no-member try: user_id = HelperUsers.get_user_id_by_name(entered_username.lower()) From 798a9524d7a8a08a17622e534de8948c8d7c1225 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Fri, 2 Feb 2024 20:45:28 +0000 Subject: [PATCH 18/25] Update changelog !704 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b6590c19..70eb4d89 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ ### Refactor - Refactor subpage perm checks ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/695)) ### Bug fixes +- [`CVE-2024-1064`] Security-related fix to resolve an issue with the HTTP listener ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/704)) - Fix bukkit and downstream fork MOTD crash ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/686)) - Fix bug where invalid server Id leads to stack ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/690)) - Fix indent on public status check box ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/691)) From fdba7bb0c72a1e74965926bca53c2e5418591e86 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Fri, 2 Feb 2024 21:25:55 +0000 Subject: [PATCH 19/25] Update changelog !703 --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70eb4d89..4d93b93f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,9 @@ - Refactor Forge server initialisation flow for newer versions ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/687)) - Remove scroll bars from player management ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/693)) - Add warning to wizard for unsupported mc ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/701)) +- Improve display for `th-TH`` characters ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/703)) +- Improve display of white text on **wssErrors** ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/703)) +- Improve display of white text on **Buttons** ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/703)) ### Lang - Update `zh_CN, pl_PL, nl_BE, lv_LV, he_IL, fr_FR, de_DE, lol_EN` translations for `4.2.3` ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/696)) - New `uk_UA, tr_TR, th_TH` translations for `4.2.3` ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/696)) From f86efbd57e4c3fd4c1a1c5bec2c2cf77849d7804 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Fri, 2 Feb 2024 21:44:48 +0000 Subject: [PATCH 20/25] Fix changelog !703 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d93b93f..7f1ddad3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,7 +18,7 @@ - Refactor Forge server initialisation flow for newer versions ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/687)) - Remove scroll bars from player management ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/693)) - Add warning to wizard for unsupported mc ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/701)) -- Improve display for `th-TH`` characters ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/703)) +- Improve display for `th-TH` characters ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/703)) - Improve display of white text on **wssErrors** ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/703)) - Improve display of white text on **Buttons** ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/703)) ### Lang From 16e9124e927e6cd54505a12a515284dd2d614a83 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Fri, 2 Feb 2024 21:58:47 +0000 Subject: [PATCH 21/25] Update changelog !705 --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f1ddad3..d02386a9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ - Improve display for `th-TH` characters ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/703)) - Improve display of white text on **wssErrors** ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/703)) - Improve display of white text on **Buttons** ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/703)) +- Fix dashboard motd issue #322 ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/705)) ### Lang - Update `zh_CN, pl_PL, nl_BE, lv_LV, he_IL, fr_FR, de_DE, lol_EN` translations for `4.2.3` ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/696)) - New `uk_UA, tr_TR, th_TH` translations for `4.2.3` ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/696)) From 4309abecbb7d2e9d7de0cd3803fdf99913654598 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Fri, 2 Feb 2024 22:12:39 +0000 Subject: [PATCH 22/25] Update changelog !706 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d02386a9..3e700e0b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,7 @@ ### New features - Use Papermc Group's API for `paper` & `folia` builds in server builder ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/688)) - Allow omission of player count from Dashboard (e.g. for proxy servers) ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/692)) -- Add lockout user for forgot password ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/694)) +- Add lockout user for forgot password ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/694) | [Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/706)) ### Refactor - Refactor subpage perm checks ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/695)) ### Bug fixes From 50e65f65318b12b904442aca7bc474c0b36b97af Mon Sep 17 00:00:00 2001 From: Zedifus Date: Fri, 2 Feb 2024 22:41:07 +0000 Subject: [PATCH 23/25] Fix hardcoded banner issue from !703 --- app/frontend/templates/base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/frontend/templates/base.html b/app/frontend/templates/base.html index a1fe0f9c..00938782 100755 --- a/app/frontend/templates/base.html +++ b/app/frontend/templates/base.html @@ -489,7 +489,7 @@ if (link) { let linkEl = document.createElement('a') linkEl.href = link; - linkEl.innerHTML = "See our documentation for details."; + linkEl.innerHTML = link_msg; //linkEl.style.color = 'white'; linkEl.style.textDecoration = 'underline'; linkEl.target = "_blank"; From ba94e828c6fad0e46a269b1480d794ecd40d32c2 Mon Sep 17 00:00:00 2001 From: Zedifus Date: Fri, 2 Feb 2024 23:00:01 +0000 Subject: [PATCH 24/25] Close changelog v4.2.3 --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e700e0b..4f627936 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,5 @@ # Changelog -## --- [4.2.3] - 2023/TBD +## --- [4.2.3] - 2023/02/02 ### New features - Use Papermc Group's API for `paper` & `folia` builds in server builder ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/688)) - Allow omission of player count from Dashboard (e.g. for proxy servers) ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/692)) @@ -19,7 +19,7 @@ - Remove scroll bars from player management ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/693)) - Add warning to wizard for unsupported mc ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/701)) - Improve display for `th-TH` characters ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/703)) -- Improve display of white text on **wssErrors** ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/703)) +- Improve display of white text on **wssErrors** ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/703) | [50e65f6](https://gitlab.com/crafty-controller/crafty-4/-/commit/50e65f65318b12b904442aca7bc474c0b36b97af)) - Improve display of white text on **Buttons** ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/703)) - Fix dashboard motd issue #322 ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/705)) ### Lang From 8e199dcd67020184044e6189d38090a7f3efc67f Mon Sep 17 00:00:00 2001 From: Zedifus Date: Fri, 2 Feb 2024 23:35:09 +0000 Subject: [PATCH 25/25] Prepare 4.2.4 release base --- CHANGELOG.md | 11 +++++++++++ README.md | 2 +- app/config/version.json | 2 +- sonar-project.properties | 2 +- 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f627936..a1a8dd9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,15 @@ # Changelog +## --- [4.2.4] - 2023/TBD +### New features +TBD +### Bug fixes +TBD +### Tweaks +TBD +### Lang +TBD +

+ ## --- [4.2.3] - 2023/02/02 ### New features - Use Papermc Group's API for `paper` & `folia` builds in server builder ([Merge Request](https://gitlab.com/crafty-controller/crafty-4/-/merge_requests/688)) diff --git a/README.md b/README.md index 7e9ab498..b1b401d7 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ [![Crafty Logo](app/frontend/static/assets/images/logo_long.svg)](https://craftycontrol.com) -# Crafty Controller 4.2.3 +# Crafty Controller 4.2.4 > Python based Control Panel for your Minecraft Server ## What is Crafty Controller? diff --git a/app/config/version.json b/app/config/version.json index bb776b5b..3c001e77 100644 --- a/app/config/version.json +++ b/app/config/version.json @@ -1,5 +1,5 @@ { "major": 4, "minor": 2, - "sub": 3 + "sub": 4 } diff --git a/sonar-project.properties b/sonar-project.properties index 68eafe21..635324ef 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -3,7 +3,7 @@ sonar.organization=crafty-controller # This is the name and version displayed in the SonarCloud UI. sonar.projectName=Crafty 4 -sonar.projectVersion=4.2.3 +sonar.projectVersion=4.2.4 sonar.python.version=3.9, 3.10, 3.11 sonar.exclusions=app/migrations/**, app/frontend/static/assets/vendors/**