Merge pull request #20756 from overleaf/jpa-clear-admin-sessions
[web] add script for clearing admin sessions GitOrigin-RevId: c5103b233073db62276698067b2262d7a785592b
This commit is contained in:
@@ -0,0 +1,70 @@
|
||||
const {
|
||||
db,
|
||||
waitForDb,
|
||||
READ_PREFERENCE_SECONDARY,
|
||||
} = require('../app/src/infrastructure/mongodb')
|
||||
const UserSessionsManager = require('../app/src/Features/User/UserSessionsManager')
|
||||
|
||||
const COMMIT = process.argv.includes('--commit')
|
||||
const LOG_SESSIONS = !process.argv.includes('--log-sessions=false')
|
||||
|
||||
async function main() {
|
||||
await waitForDb()
|
||||
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.')
|
||||
}
|
||||
}
|
||||
|
||||
main()
|
||||
.then(() => {
|
||||
console.error('Done.')
|
||||
process.exit(0)
|
||||
})
|
||||
.catch(error => {
|
||||
console.error({ error })
|
||||
process.exit(1)
|
||||
})
|
||||
Reference in New Issue
Block a user