disconnect_all_users.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. const { promisify } = require('util')
  2. const Settings = require('@overleaf/settings')
  3. const AdminController = require('../app/src/Features/ServerAdmin/AdminController')
  4. const args = require('minimist')(process.argv.slice(2), {
  5. string: ['confirm-site-url', 'delay-in-seconds'],
  6. default: {
  7. 'delay-in-seconds': 10,
  8. 'confirm-site-url': '',
  9. },
  10. })
  11. const sleep = promisify(setTimeout)
  12. async function main() {
  13. if (args.help) {
  14. console.error()
  15. console.error(
  16. ' usage: node disconnect_all_users.js [--delay-in-seconds=10] --confirm-site-url=https://www....\n'
  17. )
  18. process.exit(1)
  19. }
  20. const isSaaS = Boolean(Settings.overleaf)
  21. if (isSaaS && args['confirm-site-url'] !== Settings.siteUrl) {
  22. console.error()
  23. console.error(
  24. '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'
  25. )
  26. console.error()
  27. console.error(
  28. `!!! --confirm-site-url=${
  29. args['confirm-site-url'] || "''"
  30. } does not match the PUBLIC_URL in this environment.`
  31. )
  32. console.error()
  33. console.error(' Are you running this script in the correct environment?')
  34. process.exit(1)
  35. }
  36. const delay = parseInt(args['delay-in-seconds'] || '10', 10)
  37. if (!(delay >= 0)) {
  38. console.error(
  39. `--delay-in-seconds='${args['delay-in-seconds']}' should be a number >=0`
  40. )
  41. process.exit(1)
  42. }
  43. console.log()
  44. console.log(
  45. `Disconnect all users from ${args['confirm-site-url']}, with delay ${delay}`
  46. )
  47. if (isSaaS) {
  48. console.error(' Use CTRL+C in the next 5s to abort.')
  49. await sleep(5 * 1000)
  50. }
  51. await AdminController._sendDisconnectAllUsersMessage(delay)
  52. }
  53. if (require.main === module) {
  54. main()
  55. .then(() => {
  56. console.error('Done.')
  57. process.exit(0)
  58. })
  59. .catch(err => {
  60. console.error('Error', err)
  61. process.exit(1)
  62. })
  63. }