DweebUI/controllers/settings.js
2024-09-18 00:47:50 -07:00

245 lines
No EOL
11 KiB
JavaScript

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(`<button class="btn btn-primary" id="submit" form="settings">Update</button>`);
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(`<button class="btn btn-success" hx-post="/settings" hx-trigger="load delay:2s" hx-swap="outerHTML" id="submit" hx-target="#submit">Updated</button>`);
}
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('<button class="btn" aria-label="button" id="checking" hx-post="/update_languages" hx-swap="outerHTML" hx-target="#checking" hx-trigger="every 2s">Checking For Updates<div class="mx-2 spinner-border spinner-border-sm"></div></button>');
return;
}
if (trigger_id == 'check_languages') {
inProgress = true;
res.send('<button class="btn" aria-label="button" id="checking" hx-post="/update_languages" hx-swap="outerHTML" hx-target="#checking" hx-trigger="every 2s">Checking For Updates<div class="mx-2 spinner-border spinner-border-sm"></div></button>');
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('<button class="btn" aria-label="button" name="check_languages" id="check_languages" value="true" hx-post="/update_languages" hx-swap="outerHTML" hx-target="#check_languages">Update Language Files</button>');
return;
}
}
}
export const searchSettings = async function (req, res) {
console.log(`[Search] ${req.body.search}`);
res.send('ok');
return;
}