From 2f8ca38bcab5edac1e7157e717aa9468402b09fc Mon Sep 17 00:00:00 2001 From: Russell2259 Date: Wed, 24 Jan 2024 20:28:13 +0000 Subject: [PATCH] update configuration and fix analytics --- lib/config.js | 38 +++++++++++++++++++++++++++++++++++ polaris.config.js | 25 +++++++++++++---------- polaris.config.template.js | 22 -------------------- server/api.js | 9 ++++----- server/index.js | 4 +--- server/utils/rewriter.js | 1 - static/assets/js/analytics.js | 14 +++++++++++-- static/assets/js/main.js | 4 +--- 8 files changed, 70 insertions(+), 47 deletions(-) create mode 100644 lib/config.js delete mode 100644 polaris.config.template.js diff --git a/lib/config.js b/lib/config.js new file mode 100644 index 0000000..aa1ebd0 --- /dev/null +++ b/lib/config.js @@ -0,0 +1,38 @@ +var config = { + port: 8080, + mode: 'prod', + options: { + api: { + domain: 'api.polarislearning.org', + secure: true + }, + minify: false, + assetScrambling: false, + allowDangerousTemplateInsert: true + } +}; + +/** + * @param {config} userConfig + * @returns {config} + */ +export const useConfig = (userConfig) => { + config = { + ...config, + ...userConfig, + mode: (process.argv[2] === 'prod' || process.argv[2] === 'dev' ? process.argv[2] : (process.argv[3] === 'prod' || process.argv[3] === 'dev' ? process.argv[3] : (userConfig.mode === 'prod' || userConfig.mode === 'dev' ? userConfig.mode : 'prod'))), + port: (process.argv[2] !== 'prod' && process.argv[2] !== 'dev' && Boolean(Number(process.argv[2]))) ? process.argv[2] : (Boolean(Number(process.argv[3])) ? process.argv[3] : (Boolean(Number(userConfig.port)) ? userConfig.port : (mode === 'prod' ? 80 : 8080))) + }; + + Object.keys(userConfig).forEach(option => { + if (typeof config[option] === 'function') config[option] = config[option](); + }); + + return config; +} + +/** + * @returns {config} + */ +export const getConfig = () => config; +export default useConfig; \ No newline at end of file diff --git a/polaris.config.js b/polaris.config.js index ab08369..1e27b7a 100644 --- a/polaris.config.js +++ b/polaris.config.js @@ -1,14 +1,17 @@ -import configTemplate from './polaris.config.template.js'; +import useConfig from './lib/config.js'; -/** - * @type {configTemplate} - */ -export default { +export default useConfig({ port: 8080, mode: 'prod', - //Messes up uv - minify: false, - //Beta - assetScrambling: false, - allowDangerousTemplateInsert: true -}; \ No newline at end of file + options: { + //Messes up uv + minify: false, + //Beta + assetScrambling: false, + allowDangerousTemplateInsert: true, + api: { + domain: 'api.polarislearning.org', + secure: true + } + } +}); \ No newline at end of file diff --git a/polaris.config.template.js b/polaris.config.template.js deleted file mode 100644 index 2472ef9..0000000 --- a/polaris.config.template.js +++ /dev/null @@ -1,22 +0,0 @@ -export default { - /** - * @type {'auto' | number} - */ - port: 8080, - /** - * @type {'prod' | 'dev'} - */ - mode: 'prod', - /** - * @type {boolean} - */ - minify: true, - /** - * @type {boolean} - */ - assetScrambling: true, - /** - * @type {boolean} - */ - allowDangerousTemplateInsert: false -}; \ No newline at end of file diff --git a/server/api.js b/server/api.js index 0953196..4c33d7a 100644 --- a/server/api.js +++ b/server/api.js @@ -8,7 +8,6 @@ import fs from 'node:fs'; const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); const packageFile = JSON.parse(fs.readFileSync(path.join(__dirname, '../package.json'))); const commits = await (await fetch(`https://api.github.com/repos/Skoolgq/Polaris/commits`)).json(); -const mode = (process.argv[2] === 'prod' || process.argv[2] === 'dev' ? process.argv[2] : (process.argv[3] === 'prod' || process.argv[3] === 'dev' ? process.argv[3] : (config.mode === 'prod' || config.mode === 'dev' ? config.mode : 'prod'))); var gitSupported = true; /** @@ -17,7 +16,7 @@ var gitSupported = true; const routes = (app) => { app.get('/api/analytics/site/:domain', async (req, res, next) => { try { - const request = await fetch('https://api.polarislearning.org/analytics/site/' + req.params.domain); + const request = await fetch((config.options.api.secure ? 'https' : 'http') + '://' + config.options.api.domain + '/analytics/site/' + req.params.domain); const buffer = Buffer.from(await request.arrayBuffer()); res.header('content-type', request.headers.get('content-type')).end(buffer); @@ -26,7 +25,7 @@ const routes = (app) => { app.get('/api/analytics/script.js', async (req, res, next) => { try { - const request = await fetch('https://api.polarislearning.org/analytics/script.js'); + const request = await fetch((config.options.api.secure ? 'https' : 'http') + '://' + config.options.api.domain + '/analytics/script.js'); const buffer = Buffer.from(await request.arrayBuffer()); res.header('content-type', request.headers.get('content-type')).end(buffer); @@ -35,7 +34,7 @@ const routes = (app) => { app.post('/api/analytics/api/send', async (req, res, next) => { try { - const request = await fetch('https://api.polarislearning.org/analytics/api/send', { + const request = await fetch((config.options.api.secure ? 'https' : 'http') + '://' + config.options.api.domain + '/analytics/api/send', { method: 'POST', headers: req.headers, body: JSON.stringify(req.body) @@ -73,7 +72,7 @@ const routes = (app) => { upToDate: false }; - changelog.mode = mode === 'dev' ? 'development' : 'production'; + changelog.mode = config.mode === 'dev' ? 'development' : 'production'; res.json(changelog); }); diff --git a/server/index.js b/server/index.js index ec84f43..5c31a9a 100644 --- a/server/index.js +++ b/server/index.js @@ -18,8 +18,6 @@ const server = http.createServer(); const bareServer = createBareServer('/bare/'); const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); const packageFile = JSON.parse(fs.readFileSync(path.join(__dirname, '../package.json'))); -const mode = (process.argv[2] === 'prod' || process.argv[2] === 'dev' ? process.argv[2] : (process.argv[3] === 'prod' || process.argv[3] === 'dev' ? process.argv[3] : (config.mode === 'prod' || config.mode === 'dev' ? config.mode : 'prod'))); -const port = (process.argv[2] !== 'prod' && process.argv[2] !== 'dev' && Boolean(Number(process.argv[2]))) ? process.argv[2] : (Boolean(Number(process.argv[3])) ? process.argv[3] : (Boolean(Number(config.port)) ? config.port : (mode === 'prod' ? 80 : 8080))); const swPaths = [ '/uv/sw.js', @@ -143,4 +141,4 @@ server.on('upgrade', (req, socket, head) => { else socket.end(); }); -server.listen(port, () => console.log(`Polaris running\n\nPort: ${server.address().port}\nVersion: ${packageFile.version + (Number(packageFile.version.split('.')[0]) <= 1 ? ' Beta' : '') || 'Unknown'} ${childProcess.execSync('git rev-parse HEAD').toString().trim().slice(0, 7) || 'Unknown'}\nMode: ${mode === 'dev' ? 'development' : 'production'}\nNode.js: ${process.version}`)); \ No newline at end of file +server.listen(config.port, () => console.log(`Polaris running\n\nPort: ${server.address().port}\nVersion: ${packageFile.version + (Number(packageFile.version.split('.')[0]) <= 1 ? ' Beta' : '') || 'Unknown'} ${childProcess.execSync('git rev-parse HEAD').toString().trim().slice(0, 7) || 'Unknown'}\nMode: ${config.mode === 'dev' ? 'development' : 'production'}\nAPI Server: ${config.options.api.domain}\nNode.js: ${process.version}`)); \ No newline at end of file diff --git a/server/utils/rewriter.js b/server/utils/rewriter.js index 189f9b8..903b95e 100644 --- a/server/utils/rewriter.js +++ b/server/utils/rewriter.js @@ -10,7 +10,6 @@ import path from 'node:path'; import url from 'node:url'; import fs from 'node:fs'; -const mode = (process.argv[2] === 'prod' || process.argv[2] === 'dev' ? process.argv[2] : (process.argv[3] === 'prod' || process.argv[3] === 'dev' ? process.argv[3] : (config.mode === 'prod' || config.mode === 'dev' ? config.mode : 'prod'))); const __dirname = url.fileURLToPath(new URL('../', import.meta.url)); const templateParser = (data) => { diff --git a/static/assets/js/analytics.js b/static/assets/js/analytics.js index ff50f2e..1ce381d 100644 --- a/static/assets/js/analytics.js +++ b/static/assets/js/analytics.js @@ -1,5 +1,10 @@ import { storage } from './utils.js'; +const umamiSpoof = { + track: () => {}, + identify: () => {} +}; + export default () => new Promise(async (resolve, reject) => { const analyticsPreferences = storage('analytics'); @@ -10,7 +15,7 @@ export default () => new Promise(async (resolve, reject) => { try { analyticsData = await (await fetch('/api/analytics/site/' + location.hostname)).json(); analyticsPreferences.set('savedResponse', analyticsData); - } catch (e) { analyticsPreferences.set('enabled', false); resolve({}); } + } catch (e) { analyticsPreferences.set('enabled', false); resolve({}); window.umami = window.umami || umamiSpoof; } } else analyticsData = analyticsPreferences.get('savedResponse'); if (analyticsData.success/* && analyticsData.data.domain === location.hostname*/) { @@ -24,9 +29,14 @@ export default () => new Promise(async (resolve, reject) => { document.head.appendChild(script); script.onload = () => resolve(window.umami); + window.umami = window.umami || umamiSpoof; } else { analyticsPreferences.set('enabled', false); resolve({}); + window.umami = window.umami || umamiSpoof; } - } else resolve({}); + } else { + resolve({}); + window.umami = window.umami || umamiSpoof; + } }); \ No newline at end of file diff --git a/static/assets/js/main.js b/static/assets/js/main.js index 79c3589..c04d176 100644 --- a/static/assets/js/main.js +++ b/static/assets/js/main.js @@ -7,7 +7,7 @@ import Cheats from './cheats.js'; import Games from './games.js'; import Apps from './apps.js'; -const umami = await loadAnalytics(); +await loadAnalytics(); if (location.pathname !== '/view') loadSidebarInterface(); loadEasterEggs(); @@ -48,8 +48,6 @@ setInterval(() => { scope: '/' });*/ -localStorage.clear(); - window.addEventListener('DOMContentLoaded', () => setTimeout(() => document.body.style.opacity = 1, 1000)); /**