import { ServerSettings } from '../database/config.js'; import { Alert, getLanguage, Navbar, Sidebar, Footer } from '../utils/system.js'; import { read, readdirSync, readFileSync, writeFileSync } from 'fs'; export const Settings = async function(req,res){ let user_registration = await ServerSettings.findOne({ where: {key: 'user_registration'}}); let registration_secret = await ServerSettings.findOne({ where: {key: 'registration_secret'}}); let authentication = await ServerSettings.findOne({ where: {key: 'authentication'}}) || { value: 'default' }; let user_registration_enabled = ''; try { if (user_registration.value == true) { user_registration_enabled = 'checked'; } } catch { } let registration_secret_value = ''; try { registration_secret_value = registration_secret.value; } catch { } let custom_link = await ServerSettings.findOne({ where: {key: 'custom_link'}}); let link_url = await ServerSettings.findOne({ where: {key: 'link_url'}}); let custom_link_enabled = ''; try { if (custom_link.value == true) { custom_link_enabled = 'checked'; } } catch { } let link_url_value = ''; try { link_url_value = link_url.value; } catch { } let host2 = await ServerSettings.findOne({ where: {key: 'host2'}}); let host3 = await ServerSettings.findOne({ where: {key: 'host3'}}); let host4 = await ServerSettings.findOne({ where: {key: 'host4'}}); let [host2_toggle, host2_tag, host2_ip, host2_port] = ['', '', '', '']; let [host3_toggle, host3_tag, host3_ip, host3_port] = ['', '', '', '']; let [host4_toggle, host4_tag, host4_ip, host4_port] = ['', '', '', '']; if (host2.value) { host2_toggle = 'checked'; [host2_tag, host2_ip, host2_port] = host2.value.split(','); } if (host3.value) { host3_toggle = 'checked'; [host3_tag, host3_ip, host3_port] = host3.value.split(','); } if (host4.value) { host4_toggle = 'checked'; [host4_tag, host4_ip, host4_port] = host4.value.split(','); } res.render("settings",{ alert: '', username: req.session.username, role: req.session.role, user_registration: user_registration_enabled, registration_secret: registration_secret_value, custom_link: custom_link_enabled, link_url: link_url_value, authentication: authentication.value, host2_toggle: host2_toggle, host2_tag: host2_tag, host2_ip: host2_ip, host2_port: host2_port, host3_toggle: host3_toggle, host3_tag: host3_tag, host3_ip: host3_ip, host3_port: host3_port, host4_toggle: host4_toggle, host4_tag: host4_tag, host4_ip: host4_ip, host4_port: host4_port, selected: 'english', navbar: await Navbar(req), sidebar: await Sidebar(req), footer: await Footer(req), }); } export const updateSettings = async function (req, res) { let { user_registration, registration_secret, custom_link, link_url, authentication } = req.body; let { host2, tag2, ip2, port2 } = req.body; let { host3, tag3, ip3, port3 } = req.body; let { host4, tag4, ip4, port4 } = req.body; if (tag2 == '') { tag2 = 'Host 2'; } if (tag3 == '') { tag3 = 'Host 3'; } if (tag4 == '') { tag4 = 'Host 4'; } let trigger_name = req.header('hx-trigger-name'); let trigger_id = req.header('hx-trigger'); // If the trigger is 'submit', return the button if (trigger_id == 'submit'){ res.send(``); return; } // Continues on if the trigger is 'settings' // Custom link if (custom_link) { let exists = await ServerSettings.findOne({ where: {key: 'custom_link'}}); if (exists) { await ServerSettings.update({value: true}, {where: {key: 'custom_link'}}); } else { await ServerSettings.create({ key: 'custom_link', value: true}); } let exists2 = await ServerSettings.findOne({ where: {key: 'link_url'}}); if (exists2) { await ServerSettings.update({value: link_url}, {where: {key: 'link_url'}}); } else { await ServerSettings.create({ key: 'link_url', value: link_url}); } } else if (!custom_link) { let exists = await ServerSettings.findOne({ where: {key: 'custom_link'}}); if (exists) { await ServerSettings.update({value: false}, {where: {key: 'custom_link'}}); } else { await ServerSettings.create({ key: 'custom_link', value: false}); } let exists2 = await ServerSettings.findOne({ where: {key: 'link_url'}}); if (exists2) { await ServerSettings.update({value: 'http://localhost'}, {where: {key: 'link_url'}}); } else { await ServerSettings.create({ key: 'link_url', value: 'http://localhost'}); } } // User registration if (user_registration) { let exists = await ServerSettings.findOne({ where: {key: 'user_registration'}}); if (exists) { const setting = await ServerSettings.update({value: true}, {where: {key: 'user_registration'}}); } else { const newSetting = await ServerSettings.create({ key: 'user_registration', value: true}); } let exists2 = await ServerSettings.findOne({ where: {key: 'registration_secret'}}); if (exists2) { await ServerSettings.update({value: registration_secret}, {where: {key: 'registration_secret'}}); } else { await ServerSettings.create({ key: 'registration_secret', value: registration_secret}); } } else if (!user_registration) { let exists = await ServerSettings.findOne({ where: {key: 'user_registration'}}); if (exists) { await ServerSettings.update({value: false}, {where: {key: 'user_registration'}}); } else { await ServerSettings.create({ key: 'user_registration', value: false}); } let exists2 = await ServerSettings.findOne({ where: {key: 'registration_secret'}}); if (exists2) { await ServerSettings.update({value: ''}, {where: {key: 'registration_secret'}}); } else { await ServerSettings.create({ key: 'registration_secret', value: ''}); } } // Authentication if (authentication) { let exists = await ServerSettings.findOne({ where: {key: 'authentication'}}); if (exists) { await ServerSettings.update({value: authentication}, {where: {key: 'authentication'}}); } else { await ServerSettings.create({ key: 'authentication', value: authentication}); } } else if (!authentication) { let exists = await ServerSettings.findOne({ where: {key: 'authentication'}}); if (exists) { await ServerSettings.update({value: 'default'}, {where: {key: 'authentication'}}); } else { await ServerSettings.create({ key: 'authentication', value: 'off'}); } } // Host 2 if (host2) { let exists = await ServerSettings.findOne({ where: {key: 'host2'}}); if (exists) { await ServerSettings.update({value: `${tag2},${ip2},${port2}`}, {where: {key: 'host2'}}); } else { await ServerSettings.create({ key: 'host2', value: `${tag2},${ip2},${port2}`}); } } else if (!host2) { let exists = await ServerSettings.findOne({ where: {key: 'host2'}}); if (exists) { await ServerSettings.update({value: ''}, {where: {key: 'host2'}}); } else { await ServerSettings.create({ key: 'host2', value: ''}); } } // Host 3 if (host3) { let exists = await ServerSettings.findOne({ where: {key: 'host3'}}); if (exists) { await ServerSettings.update({value: `${tag3},${ip3},${port3}`}, {where: {key: 'host3'}}); } else { await ServerSettings.create({ key: 'host3', value: `${tag3},${ip3},${port3}`}); } } else if (!host3) { let exists = await ServerSettings.findOne({ where: {key: 'host3'}}); if (exists) { await ServerSettings.update({value: ''}, {where: {key: 'host3'}}); } else { await ServerSettings.create({ key: 'host3', value: ''}); } } // Host 4 if (host4) { let exists = await ServerSettings.findOne({ where: {key: 'host4'}}); if (exists) { await ServerSettings.update({value: `${tag4},${ip4},${port4}`}, {where: {key: 'host4'}}); } else { await ServerSettings.create({ key: 'host4', value: `${tag4},${ip4},${port4}`}); } } else if (!host4) { let exists = await ServerSettings.findOne({ where: {key: 'host4'}}); if (exists) { await ServerSettings.update({value: ''}, {where: {key: 'host4'}}); } else { await ServerSettings.create({ key: 'host4', value: ''}); } } console.log('Settings updated'); res.send(``); } let inProgress = false; export const updateLanguages = async function(req,res){ let trigger_id = req.header('hx-trigger'); if (inProgress == true) { console.log('Language update still in progress'); res.send(''); return; } if (trigger_id == 'check_languages') { inProgress = true; res.send(''); const resp = await fetch(`https://api.github.com/repos/lllllllillllllillll/DweebUI/contents/languages?ref=dev`); const data = await resp.json(); let languages = []; data.forEach((lang) => { languages.push({ language: lang.name, download_url: lang.download_url }); }); for (let i = 0; i < languages.length; i++) { let language_dev = await fetch(languages[i].download_url); language_dev = await language_dev.text(); let language_local = readFileSync(`./languages/${languages[i].language}`, 'utf8'); if (language_dev != language_local) { console.log(`\x1b[31mLanguage: ${languages[i].language} is out of date.\x1b[0m`); console.log(`\x1b[31mUpdating ${languages[i].language}...\x1b[0m`); writeFileSync(`./languages/${languages[i].language}`, language_dev); console.log(`\x1b[32mLanguage: ${languages[i].language} has been updated.\x1b[0m`); } else { console.log(`\x1b[32mLanguage: ${languages[i].language} is up to date.\x1b[0m`); } } inProgress = false; console.log('Language update complete'); return; } else { if ((trigger_id == "checking") && (inProgress == false)) { res.send(''); return; } } } export const searchSettings = async function (req, res) { console.log(`[Search] ${req.body.search}`); res.send('ok'); return; }