mirror of
https://github.com/KubaPro010/fm-dx-webserver.git
synced 2026-07-30 16:59:15 +02:00
user kick, plugins, bugfixes
This commit is contained in:
+3
-2
@@ -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
@@ -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
@@ -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
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user