From a1a1932c36b44fe09db0463104b39570344789f0 Mon Sep 17 00:00:00 2001 From: Muaz Khan Date: Sun, 4 Nov 2018 12:50:40 +0500 Subject: [PATCH] Added "enableAdmin=false". Which allows to enable/disable /admin/ page "enableLogs" is disabled by default. "autoRebootServerOnFailure" is disabled by default. getJsonFile now handles error if JSON file is missing. "dirPath" is set to EMPTY string to force current-directory as default option. Behind the scene "process.cwd()" is used for empty "dirPath". --- bower.json | 2 +- config.json | 7 ++-- node_scripts/Signaling-Server.js | 12 ++++--- node_scripts/get-bash-parameters.js | 15 +++++++-- node_scripts/get-values-from-config-json.js | 9 +++-- node_scripts/getJsonFile.js | 13 ++++++-- node_scripts/index.js | 37 ++++++++++++++++----- package.json | 2 +- 8 files changed, 73 insertions(+), 24 deletions(-) diff --git a/bower.json b/bower.json index 84da62f..91ca3ad 100644 --- a/bower.json +++ b/bower.json @@ -1,7 +1,7 @@ { "name": "rtcmulticonnection-server", "description": "RTCMultiConnection socket.io server", - "version": "1.2.3", + "version": "1.2.4", "authors": [ { "name": "Muaz Khan", diff --git a/config.json b/config.json index 3289183..0730bfa 100644 --- a/config.json +++ b/config.json @@ -1,16 +1,17 @@ { "socketURL": "/", - "dirPath": "./", + "dirPath": "", "homePage": "/demos/index.html", "socketMessageEvent": "RTCMultiConnection-Message", "socketCustomEvent": "RTCMultiConnection-Custom-Message", "port": "9001", - "enableLogs": "true", - "autoRebootServerOnFailure": "true", + "enableLogs": "false", + "autoRebootServerOnFailure": "false", "isUseHTTPs": "false", "sslKey": "./fake-keys/privatekey.pem", "sslCert": "./fake-keys/certificate.pem", "sslCabundle": "", + "enableAdmin": "false", "adminUserName": "username", "adminPassword": "password" } diff --git a/node_scripts/Signaling-Server.js b/node_scripts/Signaling-Server.js index c7e8b4b..24b831f 100644 --- a/node_scripts/Signaling-Server.js +++ b/node_scripts/Signaling-Server.js @@ -81,13 +81,15 @@ module.exports = exports = function(root, app, socketCallback) { } function sendToAdmin(all) { - return; // disabled admin + if(app.config.enableAdmin === false) { + return; + } try { if (adminSocket) { var users = []; // temporarily disabled - false && Object.keys(listOfUsers).forEach(function(userid) { + app.config.enableAdmin === true && Object.keys(listOfUsers).forEach(function(userid) { try { var item = listOfUsers[userid]; if (!item) return; // maybe user just left? @@ -128,8 +130,10 @@ module.exports = exports = function(root, app, socketCallback) { } function handleAdminSocket(socket, params) { - socket.disconnect(); //disabled admin - return; + if(app.config.enableAdmin === false) { + socket.disconnect(); //disabled admin + return; + } if (!app.request || !app.isAdminAuthorized || !app.config || !app.isAdminAuthorized(app.request, app.config)) { var adminAuthorization = require('basic-auth'); diff --git a/node_scripts/get-bash-parameters.js b/node_scripts/get-bash-parameters.js index 6bd57f9..ead84e2 100644 --- a/node_scripts/get-bash-parameters.js +++ b/node_scripts/get-bash-parameters.js @@ -24,9 +24,9 @@ module.exports = exports = function(config, BASH_COLORS_HELPER) { } } - // node server.js --autoRebootServerOnFailure=false - if (val.indexOf('--autoRebootServerOnFailure=false') === 0) { - config.autoRebootServerOnFailure = false; + // node server.js --autoRebootServerOnFailure=true + if (val.indexOf('--autoRebootServerOnFailure=true') === 0) { + config.autoRebootServerOnFailure = true; } // node server.js --port=9002 @@ -56,6 +56,11 @@ module.exports = exports = function(config, BASH_COLORS_HELPER) { } } + // node server.js --enableAdmin=true + if (val.indexOf('--enableAdmin=true') === 0) { + config.enableAdmin = true; + } + // node server.js --adminUserName=username if (val.indexOf('--adminUserName') === 0) { var inner = val.split('--adminUserName=')[1]; @@ -157,6 +162,8 @@ module.exports = exports = function(config, BASH_COLORS_HELPER) { console.log('\tDirectory path that is used for HTML/CSS/JS content delivery.'); console.log(BASH_COLORS_HELPER.getYellowFG(), '--homePage=/demos/Video-Conferencing.html'); console.log('\tOpen a specific demo instead of loading list of demos.'); + console.log(BASH_COLORS_HELPER.getYellowFG(), '--enableAdmin=true'); + console.log('\tEnable /admin/ page.'); console.log(BASH_COLORS_HELPER.getYellowFG(), '--adminUserName=username'); console.log('\t/admin/ page\'s username.'); console.log(BASH_COLORS_HELPER.getYellowFG(), '--adminPassword=password'); @@ -166,4 +173,6 @@ module.exports = exports = function(config, BASH_COLORS_HELPER) { process.exit(1); } }); + + return config; }; diff --git a/node_scripts/get-values-from-config-json.js b/node_scripts/get-values-from-config-json.js index 9a220dc..5f41930 100644 --- a/node_scripts/get-values-from-config-json.js +++ b/node_scripts/get-values-from-config-json.js @@ -14,12 +14,13 @@ function getValues(root) { socketMessageEvent: 'RTCMultiConnection-Message', socketCustomEvent: 'RTCMultiConnection-Custom-Message', port: process.env.PORT || 9001, - enableLogs: true, - autoRebootServerOnFailure: null, + enableLogs: false, + autoRebootServerOnFailure: false, isUseHTTPs: null, sslKey: null, sslCert: null, sslCabundle: null, + enableAdmin: false, adminUserName: null, adminPassword: null }; @@ -88,6 +89,10 @@ function getValues(root) { result.socketCustomEvent = (config.socketCustomEvent || '').toString(); } + if ((config.enableAdmin || '').toString() === 'true') { + result.enableAdmin = true; + } + if ((config.adminUserName || '').toString().length) { result.adminUserName = (config.adminUserName || '').toString(); } diff --git a/node_scripts/getJsonFile.js b/node_scripts/getJsonFile.js index c491bd0..ee94cbd 100644 --- a/node_scripts/getJsonFile.js +++ b/node_scripts/getJsonFile.js @@ -1,7 +1,16 @@ function getJsonFile(path) { var fs = require('fs'); - var json = fs.readFileSync(path); - return JSON.parse(json); + var output = {}; + try { + var json = fs.readFileSync(path); + output = JSON.parse(json); + } + catch(e) { + output = {}; + + // console.log(e.message, e.stack); + } + return output; } module.exports = exports = getJsonFile; diff --git a/node_scripts/index.js b/node_scripts/index.js index 0b9d432..6ca1887 100644 --- a/node_scripts/index.js +++ b/node_scripts/index.js @@ -13,9 +13,13 @@ module.exports = exports = function(root) { var resolveURL = require('./resolveURL.js'); var BASH_COLORS_HELPER = require('./BASH_COLORS_HELPER.js'); - var config = require('./get-values-from-config-json.js')(root); - require('./get-bash-parameters.js')(config, BASH_COLORS_HELPER); + var getValuesFromConfigJson = require('./get-values-from-config-json.js'); + var config = getValuesFromConfigJson(root); + + var getBashParameters = require('./get-bash-parameters.js'); + + config = getBashParameters(config, BASH_COLORS_HELPER); root.enableLogs = config.enableLogs; // used by "pushLogs" var isAdminAuthorized = require('./verify-admin.js'); @@ -27,6 +31,11 @@ module.exports = exports = function(root) { function serverHandler(request, response) { try { + // to make sure we always get valid info from json file + // even if nested codes are overriding it + config = getValuesFromConfigJson(root); + config = getBashParameters(config, BASH_COLORS_HELPER); + var uri, filename; try { @@ -41,6 +50,8 @@ module.exports = exports = function(root) { pushLogs(root, 'url.parse', e); } + filename = (filename || '').toString(); + if (request.method !== 'GET' || uri.indexOf('..') !== -1) { try { response.writeHead(401, { @@ -56,12 +67,16 @@ module.exports = exports = function(root) { } var matched = false; - filename && ['/demos/', '/dev/', '/dist/', '/socket.io/', /*'/admin/',*/ '/node_modules/canvas-designer/'].forEach(function(item) { + ['/demos/', '/dev/', '/dist/', '/socket.io/', '/node_modules/canvas-designer/'].forEach(function(item) { if (filename.indexOf(resolveURL(item)) !== -1) { matched = true; } }); + if(config.enableAdmin === true && filename.indexOf(resolveURL('/admin/')) !== -1) { + matched = true; + } + // files from node_modules ['RecordRTC.js', 'FileBufferReader.js', 'getStats.js', 'getScreenId.js', 'adapter.js', 'MultiStreamsMixer.js'].forEach(function(item) { if (filename.indexOf(resolveURL('/node_modules/')) !== -1 && filename.indexOf(resolveURL(item)) !== -1) { @@ -69,7 +84,7 @@ module.exports = exports = function(root) { } }); - if(false && filename.indexOf(resolveURL('/logs.json')) !== -1) { + if(config.enableAdmin === true && filename.indexOf(resolveURL('/logs.json')) !== -1) { filename = path.join(config.dirPath ? resolveURL(config.dirPath) : process.cwd(), '/logs.json'); try { @@ -89,7 +104,7 @@ module.exports = exports = function(root) { } // handle /admin/ page - if (false && filename && filename.indexOf(resolveURL('/admin/')) !== -1) { + if (config.enableAdmin === true && filename.indexOf(resolveURL('/admin/')) !== -1) { if (!isAdminAuthorized(request, config)) { try { var adminAuthorization = require('basic-auth'); @@ -142,7 +157,7 @@ module.exports = exports = function(root) { return; } - if (filename && filename.search(/.js|.json/g) !== -1 && !matched) { + if (filename.search(/.js|.json/g) !== -1 && !matched) { try { response.writeHead(404, { 'Content-Type': 'text/plain' @@ -158,7 +173,7 @@ module.exports = exports = function(root) { ['Video-Broadcasting', 'Screen-Sharing', 'Switch-Cameras'].forEach(function(fname) { try { - if (filename && filename.indexOf(fname + '.html') !== -1) { + if (filename.indexOf(fname + '.html') !== -1) { filename = filename.replace(fname + '.html', fname.toLowerCase() + '.html'); } } @@ -172,7 +187,7 @@ module.exports = exports = function(root) { try { stats = fs.lstatSync(filename); - if (filename && filename.search(/demos/g) === -1 && stats.isDirectory() && config.homePage === '/demos/index.html') { + if (filename.search(/demos/g) === -1 && stats.isDirectory() && config.homePage === '/demos/index.html') { if (response.redirect) { response.redirect('/demos/'); } else { @@ -429,6 +444,12 @@ module.exports = exports = function(root) { console.log(BASH_COLORS_HELPER.getRedBG(), 'Please run on HTTPs to make sure audio,video and screen demos can work on Google Chrome as well.'); } + if(config.enableAdmin === true) { + console.log('Admin page is enabled and running on: ' + domainURL + 'admin/'); + console.log('\tAdmin page username: ' + config.adminUserName); + console.log('\tAdmin page password: ' + config.adminPassword); + } + console.log('For more help: ', BASH_COLORS_HELPER.getYellowFG('node server.js --help')); console.log('\n'); } diff --git a/package.json b/package.json index 13269ce..336b381 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "rtcmulticonnection-server", "preferGlobal": false, - "version": "1.2.3", + "version": "1.2.4", "author": { "name": "Muaz Khan", "email": "muazkh@gmail.com",