Răsfoiți Sursa

Merge pull request #15635 from overleaf/jpa-safer-disconnect

[web] make disconnect_all_users script safer

GitOrigin-RevId: 2b17478b27b516ccdf15ade41d81c75176c8a0cd
Miguel Serrano 2 ani în urmă
părinte
comite
80e170967b
1 a modificat fișierele cu 46 adăugiri și 7 ștergeri
  1. 46 7
      services/web/scripts/disconnect_all_users.js

+ 46 - 7
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)