clear_admin_sessions.mjs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import {
  2. db,
  3. waitForDb,
  4. READ_PREFERENCE_SECONDARY,
  5. } from '../app/src/infrastructure/mongodb.js'
  6. import UserSessionsManager from '../app/src/Features/User/UserSessionsManager.js'
  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. try {
  57. await main()
  58. console.error('Done.')
  59. process.exit(0)
  60. } catch (error) {
  61. console.error({ error })
  62. process.exit(1)
  63. }