From 80e170967b094af2709d98c247fc9b28ecda9445 Mon Sep 17 00:00:00 2001 From: Miguel Serrano Date: Thu, 9 Nov 2023 10:54:55 +0100 Subject: [PATCH] Merge pull request #15635 from overleaf/jpa-safer-disconnect [web] make disconnect_all_users script safer GitOrigin-RevId: 2b17478b27b516ccdf15ade41d81c75176c8a0cd --- services/web/scripts/disconnect_all_users.js | 53 +++++++++++++++++--- 1 file changed, 46 insertions(+), 7 deletions(-) diff --git a/services/web/scripts/disconnect_all_users.js b/services/web/scripts/disconnect_all_users.js index a50e58b693..a44e4b58a8 100644 --- a/services/web/scripts/disconnect_all_users.js +++ b/services/web/scripts/disconnect_all_users.js @@ -1,14 +1,53 @@ +const { promisify } = require('util') +const Settings = require('@overleaf/settings') const AdminController = require('../app/src/Features/ServerAdmin/AdminController') -if (require.main === module) { - if (['--help', 'help'].includes(process.argv[2])) { - console.log('\n usage: node disconnect_all_users.js [delay-in-seconds]\n') +const args = require('minimist')(process.argv.slice(2), { + string: ['confirm-site-url', 'delay-in-seconds'], + default: { + 'delay-in-seconds': 10, + 'confirm-site-url': '', + }, +}) +const sleep = promisify(setTimeout) + +async function main() { + if (args.help) { + console.error() + console.error( + ' usage: node disconnect_all_users.js [--delay-in-seconds=10] --confirm-site-url=https://www....\n' + ) process.exit(1) } - const delaySecondsString = process.argv[2] - const delay = parseInt(delaySecondsString, 10) || 10 - console.log(`Disconnect all users, with delay ${delay}`) - AdminController._sendDisconnectAllUsersMessage(delay) + if (Settings.overleaf && args['confirm-site-url'] !== Settings.siteUrl) { + console.error() + console.error( + 'Please confirm the environment you want to disconnect ALL USERS from by specifying the site URL aka PUBLIC_URL, e.g. --confirm-site-url=https://www.dev-overleaf.com for the dev-env' + ) + console.error() + console.error( + `!!! --confirm-site-url=${ + args['confirm-site-url'] || "''" + } does not match the PUBLIC_URL in this environment.` + ) + console.error() + console.error(' Are you running this script in the correct environment?') + process.exit(1) + } + const delay = parseInt(args['delay-in-seconds'], 10) || 10 + console.log() + console.log( + `Disconnect all users from ${args['confirm-site-url']}, with delay ${delay}` + ) + + console.error(' Use CTRL+C in the next 5s to abort.') + await sleep(5 * 1000) + + await AdminController._sendDisconnectAllUsersMessage(delay) +} + +if (require.main === module) { + main() .then(() => { console.error('Done.') process.exit(0)