overleaf/services/web/scripts/clear_admin_sessions.mjs
Jakob Ackermann a7517eefcb Merge pull request #21427 from overleaf/jpa-populate-db-on-import
[web] populate db with collections on import, ahead of waitForDb() call

GitOrigin-RevId: 7eb4cd61c2052187acd9947d7060f54d9822d314
2024-11-01 09:05:15 +00:00

67 lines
1.6 KiB
JavaScript

import {
db,
READ_PREFERENCE_SECONDARY,
} from '../app/src/infrastructure/mongodb.js'
import UserSessionsManager from '../app/src/Features/User/UserSessionsManager.js'
const COMMIT = process.argv.includes('--commit')
const LOG_SESSIONS = !process.argv.includes('--log-sessions=false')
async function main() {
const adminUsers = await db.users
.find(
{ isAdmin: true },
{
projection: {
_id: 1,
email: 1,
},
readPreference: READ_PREFERENCE_SECONDARY,
}
)
.toArray()
if (LOG_SESSIONS) {
for (const user of adminUsers) {
user.sessions = JSON.stringify(
await UserSessionsManager.promises.getAllUserSessions(user, [])
)
}
}
console.log('All Admin users before clearing:')
console.table(adminUsers)
if (COMMIT) {
let anyFailed = false
for (const user of adminUsers) {
console.error(
`Clearing sessions for ${user.email} (${user._id.toString()})`
)
user.clearedSessions = 0
try {
user.clearedSessions =
await UserSessionsManager.promises.removeSessionsFromRedis(user)
} catch (err) {
anyFailed = true
console.error(err)
}
}
console.log('All Admin users after clearing:')
console.table(adminUsers)
if (anyFailed) {
throw new Error('failed to clear some sessions, see above for details')
}
} else {
console.warn('Use --commit to clear sessions.')
}
}
try {
await main()
console.error('Done.')
process.exit(0)
} catch (error) {
console.error({ error })
process.exit(1)
}