From c3abff58f4c06cf91e6b66ba8a3ec97227765361 Mon Sep 17 00:00:00 2001 From: Master3395 Date: Thu, 1 Jan 2026 05:29:46 +0100 Subject: [PATCH] Download CDN libraries locally to eliminate tracking prevention warnings. Updated index.html to reference local copies of qrious.min.js and chart.umd.min.js. Added functionality in install.py and upgrade.py to download these libraries before running collectstatic. Updated website.html to ensure compatibility with the new local scripts. --- .../templates/baseTemplate/index.html | 4 +- install/install.py | 61 ++++++++++++++++++ plogical/upgrade.py | 63 +++++++++++++++++++ .../templates/websiteFunctions/website.html | 3 +- 4 files changed, 128 insertions(+), 3 deletions(-) diff --git a/baseTemplate/templates/baseTemplate/index.html b/baseTemplate/templates/baseTemplate/index.html index e8798ff3f..e62ba6d4f 100644 --- a/baseTemplate/templates/baseTemplate/index.html +++ b/baseTemplate/templates/baseTemplate/index.html @@ -33,14 +33,14 @@ - + - + diff --git a/install/install.py b/install/install.py index 2abd86778..1402a8bb9 100644 --- a/install/install.py +++ b/install/install.py @@ -1070,6 +1070,64 @@ class preFlightsChecks: self.stdOut(f"ERROR: {msg} [downloadCustomBinary]", 0) return False + def downloadCDNLibraries(self): + """ + Download CDN libraries (qrious, chart.js) locally to eliminate tracking prevention warnings. + These files are downloaded before collectstatic runs so they're included in the static files. + Tries latest version of qrious first, falls back to hardcoded version if latest fails. + """ + try: + custom_js_dir = '/usr/local/CyberCP/baseTemplate/static/baseTemplate/custom-js' + + # Ensure directory exists + if not os.path.exists(custom_js_dir): + os.makedirs(custom_js_dir, mode=0o755) + + # Download qrious.min.js - try latest first, fallback to known working version + qrious_path = os.path.join(custom_js_dir, 'qrious.min.js') + qrious_urls = [ + 'https://cdn.jsdelivr.net/npm/qrious@latest/dist/qrious.min.js', # Try latest first + 'https://cdn.jsdelivr.net/npm/qrious@4.0.2/dist/qrious.min.js' # Fallback to known working version + ] + qrious_downloaded = False + for qrious_url in qrious_urls: + command = f'wget -q --timeout=30 {qrious_url} -O {qrious_path}' + result = self.call(command, self.distro, command, command, 0, 0, os.EX_OSERR) + if result == 0 and os.path.exists(qrious_path) and os.path.getsize(qrious_path) > 1000: # At least 1KB + os.chmod(qrious_path, 0o644) + version_info = "latest" if "latest" in qrious_url else "4.0.2" + logging.InstallLog.writeToFile(f"Downloaded qrious.min.js ({version_info})", 0) + qrious_downloaded = True + break + if not qrious_downloaded: + logging.InstallLog.writeToFile("Warning: Failed to download qrious.min.js, continuing anyway", 0) + + # Download chart.js - try latest first, fallback to known working version + chartjs_path = os.path.join(custom_js_dir, 'chart.umd.min.js') + chartjs_urls = [ + 'https://cdn.jsdelivr.net/npm/chart.js@latest/dist/chart.umd.min.js', # Try latest first + 'https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js' # Fallback to known working version + ] + chartjs_downloaded = False + for chartjs_url in chartjs_urls: + command = f'wget -q --timeout=30 {chartjs_url} -O {chartjs_path}' + result = self.call(command, self.distro, command, command, 0, 0, os.EX_OSERR) + if result == 0 and os.path.exists(chartjs_path) and os.path.getsize(chartjs_path) > 100000: # At least 100KB + os.chmod(chartjs_path, 0o644) + version_info = "latest" if "latest" in chartjs_url else "4.4.1" + logging.InstallLog.writeToFile(f"Downloaded chart.umd.min.js ({version_info})", 0) + chartjs_downloaded = True + # Create copy for chart.js compatibility (some code may expect chart.js name) + chartjs_compat_path = os.path.join(custom_js_dir, 'chart.js') + if not os.path.exists(chartjs_compat_path): + shutil.copy2(chartjs_path, chartjs_compat_path) + break + if not chartjs_downloaded: + logging.InstallLog.writeToFile("Warning: Failed to download chart.umd.min.js, continuing anyway", 0) + + except Exception as msg: + logging.InstallLog.writeToFile(f"Warning: Error downloading CDN libraries: {str(msg)}, continuing anyway", 0) + def installCustomOLSBinaries(self): """Install custom OpenLiteSpeed binaries with PHP config support""" try: @@ -2826,6 +2884,9 @@ password="%s" if not os.path.exists("/usr/local/CyberCP/public"): os.mkdir("/usr/local/CyberCP/public") + # Download CDN libraries before collectstatic runs + self.downloadCDNLibraries() + command = f"{python_path} manage.py collectstatic --noinput --clear" preFlightsChecks.call(command, self.distro, command, command, 1, 1, os.EX_OSERR) diff --git a/plogical/upgrade.py b/plogical/upgrade.py index cacfeacf5..7523bf319 100644 --- a/plogical/upgrade.py +++ b/plogical/upgrade.py @@ -1607,6 +1607,66 @@ $cfg['Servers'][$i]['LogoutURL'] = 'phpmyadminsignin.php?logout'; Upgrade.stdOut("Failed to setup CLI [setupCLI]") return 0 + @staticmethod + def downloadCDNLibraries(): + """ + Download CDN libraries (qrious, chart.js) locally to eliminate tracking prevention warnings. + These files are downloaded before collectstatic runs so they're included in the static files. + Tries latest version first, falls back to hardcoded version if latest fails. + """ + try: + custom_js_dir = '/usr/local/CyberCP/baseTemplate/static/baseTemplate/custom-js' + + # Ensure directory exists + if not os.path.exists(custom_js_dir): + os.makedirs(custom_js_dir, mode=0o755) + + # Download qrious.min.js - try latest first, fallback to known working version + qrious_path = os.path.join(custom_js_dir, 'qrious.min.js') + qrious_urls = [ + 'https://cdn.jsdelivr.net/npm/qrious@latest/dist/qrious.min.js', # Try latest first + 'https://cdn.jsdelivr.net/npm/qrious@4.0.2/dist/qrious.min.js' # Fallback to known working version + ] + qrious_downloaded = False + for qrious_url in qrious_urls: + command = f'wget -q --timeout=30 {qrious_url} -O {qrious_path}' + result = subprocess.call(shlex.split(command)) + if result == 0 and os.path.exists(qrious_path) and os.path.getsize(qrious_path) > 1000: # At least 1KB + os.chmod(qrious_path, 0o644) + version_info = "latest" if "latest" in qrious_url else "4.0.2" + Upgrade.stdOut(f"Downloaded qrious.min.js ({version_info})", 0) + qrious_downloaded = True + break + if not qrious_downloaded: + Upgrade.stdOut("Warning: Failed to download qrious.min.js, continuing anyway", 0) + + # Download chart.js - try latest first, fallback to known working version + chartjs_path = os.path.join(custom_js_dir, 'chart.umd.min.js') + chartjs_urls = [ + 'https://cdn.jsdelivr.net/npm/chart.js@latest/dist/chart.umd.min.js', # Try latest first + 'https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js' # Fallback to known working version + ] + chartjs_downloaded = False + for chartjs_url in chartjs_urls: + command = f'wget -q --timeout=30 {chartjs_url} -O {chartjs_path}' + result = subprocess.call(shlex.split(command)) + if result == 0 and os.path.exists(chartjs_path) and os.path.getsize(chartjs_path) > 100000: # At least 100KB + os.chmod(chartjs_path, 0o644) + version_info = "latest" if "latest" in chartjs_url else "4.4.1" + Upgrade.stdOut(f"Downloaded chart.umd.min.js ({version_info})", 0) + chartjs_downloaded = True + # Create copy for chart.js compatibility (some code may expect chart.js name) + chartjs_compat_path = os.path.join(custom_js_dir, 'chart.js') + if not os.path.exists(chartjs_compat_path): + shutil.copy2(chartjs_path, chartjs_compat_path) + break + if not chartjs_downloaded: + Upgrade.stdOut("Warning: Failed to download chart.umd.min.js, continuing anyway", 0) + + except BaseException as msg: + ErrorSanitizer.log_error_securely(msg, 'downloadCDNLibraries') + Upgrade.stdOut(f"Warning: Error downloading CDN libraries: {str(msg)}, continuing anyway", 0) + @staticmethod def staticContent(): @@ -1618,6 +1678,9 @@ $cfg['Servers'][$i]['LogoutURL'] = 'phpmyadminsignin.php?logout'; if not os.path.exists("/usr/local/CyberCP/public"): os.mkdir("/usr/local/CyberCP/public") + # Download CDN libraries before collectstatic runs + Upgrade.downloadCDNLibraries() + cwd = os.getcwd() os.chdir('/usr/local/CyberCP') diff --git a/websiteFunctions/templates/websiteFunctions/website.html b/websiteFunctions/templates/websiteFunctions/website.html index 97a271777..252926266 100644 --- a/websiteFunctions/templates/websiteFunctions/website.html +++ b/websiteFunctions/templates/websiteFunctions/website.html @@ -2535,7 +2535,8 @@ {% block footer_scripts %} {{ block.super }} - + +