user kick, plugins, bugfixes

This commit is contained in:
NoobishSVK
2024-04-25 20:41:05 +02:00
parent 981c0f25e2
commit 510ed6b8f3
15 changed files with 152 additions and 46 deletions
+3 -2
View File
@@ -4,7 +4,7 @@ const verboseMode = process.argv.includes('--debug');
const verboseModeFfmpeg = process.argv.includes('--ffmpegdebug');
const ANSI_ESCAPE_CODE_PATTERN = /\x1b\[[0-9;]*m/g;
const MAX_LOG_LINES = 100000;
const MAX_LOG_LINES = 5000;
const getCurrentTime = () => {
const currentTime = new Date();
@@ -90,7 +90,8 @@ const logWarn = (...messages) => {
};
function appendLogToFile(logMessage) {
const cleanLogMessage = removeANSIEscapeCodes(logMessage);
const date = new Date();
const cleanLogMessage = date.toLocaleDateString() + ' | ' + removeANSIEscapeCodes(logMessage);
fs.appendFile('serverlog.txt', cleanLogMessage + '\n', (err) => {
if (err) {
+16 -1
View File
@@ -13,6 +13,7 @@ const storage = require('./storage');
const { logInfo, logDebug, logWarn, logError, logFfmpeg, logs } = require('./console');
const dataHandler = require('./datahandler');
const fmdxList = require('./fmdx_list');
const { allPluginConfigs } = require('./plugins');
// Endpoints
router.get('/', (req, res) => {
@@ -56,6 +57,7 @@ router.get('/', (req, res) => {
tuningUpperLimit: serverConfig.webserver.tuningUpperLimit,
chatEnabled: serverConfig.webserver.chatEnabled,
device: serverConfig.device,
plugins: serverConfig.plugins,
bwSwitch: serverConfig.bwSwitch ? serverConfig.bwSwitch : false
});
}
@@ -108,6 +110,7 @@ router.get('/setup', (req, res) => {
memoryUsage: (process.memoryUsage.rss() / 1024 / 1024).toFixed(1) + ' MB',
processUptime: formattedProcessUptime,
consoleOutput: logs,
plugins: allPluginConfigs,
onlineUsers: dataHandler.dataToSend.users,
connectedUsers: storage.connectedUsers
});
@@ -154,6 +157,17 @@ router.get('/logout', (req, res) => {
});
});
router.get('/kick', (req, res) => {
const ipAddress = req.query.ip; // Extract the IP address parameter from the query string
// Terminate the WebSocket connection for the specified IP address
if(req.session.isAdminAuthenticated) {
helpers.kickClient(ipAddress);
}
setTimeout(() => {
res.redirect('/setup');
}, 500);
});
router.post('/saveData', (req, res) => {
const data = req.body;
let firstSetup;
@@ -215,7 +229,8 @@ router.get('/static_data', (req, res) => {
qthLongitude: serverConfig.identification.lon,
presets: serverConfig.webserver.presets || [],
defaultTheme: serverConfig.webserver.defaultTheme || 'theme1',
bgImage: serverConfig.webserver.bgImage || ''
bgImage: serverConfig.webserver.bgImage || '',
rdsMode: serverConfig.webserver.rdsMode || false,
});
});
+20 -1
View File
@@ -1,5 +1,7 @@
const WebSocket = require('ws');
const dataHandler = require('./datahandler');
const storage = require('./storage');
const consoleCmd = require('./console');
function parseMarkdown(parsed) {
parsed = parsed.replace(/<\/?[^>]+(>|$)/g, '');
@@ -79,6 +81,23 @@ function resolveDataBuffer(data, wss) {
}
}
function kickClient(ipAddress) {
// Find the entry in connectedClients associated with the provided IP address
const targetClient = storage.connectedUsers.find(client => client.ip === ipAddress);
if (targetClient && targetClient.instance) {
// Send a termination message to the client
targetClient.instance.send('KICK');
// Close the WebSocket connection after a short delay to allow the client to receive the message
setTimeout(() => {
targetClient.instance.close();
consoleCmd.logInfo(`Web client kicked (${ipAddress})`);
}, 500);
} else {
consoleCmd.logInfo(`Kicking client ${ipAddress} failed. No suitable client found.`);
}
}
module.exports = {
parseMarkdown, removeMarkdown, formatUptime, resolveDataBuffer
parseMarkdown, removeMarkdown, formatUptime, resolveDataBuffer, kickClient
}
+2 -1
View File
@@ -38,6 +38,7 @@ console.log('\x1b[90m―――――――――――――――――――
// Start ffmpeg
require('./stream/index');
require('./plugins');
// Create a WebSocket proxy instance
const proxy = httpProxy.createProxyServer({
@@ -253,7 +254,7 @@ wss.on('connection', (ws, request) => {
const connectionTime = new Date().toLocaleString([], options);
if(locationInfo.country === undefined) {
const userData = { ip: clientIp, location: 'Unknown', time: connectionTime };
const userData = { ip: clientIp, location: 'Unknown', time: connectionTime, instance: ws };
storage.connectedUsers.push(userData);
logInfo(`Web client \x1b[32mconnected\x1b[0m (${clientIp}) \x1b[90m[${currentUsers}]\x1b[0m`);
} else {
+3 -1
View File
@@ -45,6 +45,7 @@ let serverConfig = {
tunePass: "",
adminPass: ""
},
plugins: [],
device: 'tef',
defaultFreq: 87.5,
publicTuner: true,
@@ -65,9 +66,10 @@ function deepMerge(target, source)
}
function configUpdate(newConfig) {
if (newConfig.webserver && newConfig.webserver.banlist !== undefined) {
if (newConfig.webserver && (newConfig.webserver.banlist !== undefined || newConfig.plugins !== undefined)) {
// If new banlist is provided, replace the existing one
serverConfig.webserver.banlist = newConfig.webserver.banlist;
serverConfig.plugins = newConfig.plugins;
delete newConfig.webserver.banlist; // Remove banlist from newConfig to avoid merging
}