clear_admin_sessions.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. const {
  2. db,
  3. waitForDb,
  4. READ_PREFERENCE_SECONDARY,
  5. } = require('../app/src/infrastructure/mongodb')
  6. const UserSessionsManager = require('../app/src/Features/User/UserSessionsManager')
  7. const COMMIT = process.argv.includes('--commit')
  8. const LOG_SESSIONS = !process.argv.includes('--log-sessions=false')
  9. async function main() {
  10. await waitForDb()
  11. const adminUsers = await db.users
  12. .find(
  13. { isAdmin: true },
  14. {
  15. projection: {
  16. _id: 1,
  17. email: 1,
  18. },
  19. readPreference: READ_PREFERENCE_SECONDARY,
  20. }
  21. )
  22. .toArray()
  23. if (LOG_SESSIONS) {
  24. for (const user of adminUsers) {
  25. user.sessions = JSON.stringify(
  26. await UserSessionsManager.promises.getAllUserSessions(user, [])
  27. )
  28. }
  29. }
  30. console.log('All Admin users before clearing:')
  31. console.table(adminUsers)
  32. if (COMMIT) {
  33. let anyFailed = false
  34. for (const user of adminUsers) {
  35. console.error(
  36. `Clearing sessions for ${user.email} (${user._id.toString()})`
  37. )
  38. user.clearedSessions = 0
  39. try {
  40. user.clearedSessions =
  41. await UserSessionsManager.promises.removeSessionsFromRedis(user)
  42. } catch (err) {
  43. anyFailed = true
  44. console.error(err)
  45. }
  46. }
  47. console.log('All Admin users after clearing:')
  48. console.table(adminUsers)
  49. if (anyFailed) {
  50. throw new Error('failed to clear some sessions, see above for details')
  51. }
  52. } else {
  53. console.warn('Use --commit to clear sessions.')
  54. }
  55. }
  56. main()
  57. .then(() => {
  58. console.error('Done.')
  59. process.exit(0)
  60. })
  61. .catch(error => {
  62. console.error({ error })
  63. process.exit(1)
  64. })