mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-07 20:31:06 -05:00
Merge pull request #4146 from overleaf/jel-em-script-must-reconfirm
Add script to clear users' sessions and set must_reconfirm GitOrigin-RevId: 87f85613c6eaf66298eb48e3ddb8eed12d73dd3e
This commit is contained in:
parent
7964067827
commit
d3cc3edf4e
1 changed files with 82 additions and 0 deletions
82
services/web/scripts/clear_sessions_set_must_reconfirm.js
Normal file
82
services/web/scripts/clear_sessions_set_must_reconfirm.js
Normal file
|
@ -0,0 +1,82 @@
|
|||
const fs = require('fs')
|
||||
const { ObjectId, waitForDb } = require('../app/src/infrastructure/mongodb')
|
||||
const async = require('async')
|
||||
const UserUpdater = require('../app/src/Features/User/UserUpdater')
|
||||
const UserSessionsManager = require('../app/src/Features/User/UserSessionsManager')
|
||||
|
||||
const ASYNC_LIMIT = 10
|
||||
|
||||
const processLogger = {
|
||||
failedClear: [],
|
||||
failedSet: [],
|
||||
success: [],
|
||||
printSummary: () => {
|
||||
console.log(
|
||||
{
|
||||
success: processLogger.success,
|
||||
failedClear: processLogger.failedClear,
|
||||
failedSet: processLogger.failedSet,
|
||||
},
|
||||
`\nDONE. ${processLogger.success.length} successful. ${processLogger.failedClear.length} failed to clear sessions. ${processLogger.failedSet.length} failed to set must_reconfirm.`
|
||||
)
|
||||
},
|
||||
}
|
||||
|
||||
function _validateUserIdList(userIds) {
|
||||
if (!Array.isArray(userIds)) throw new Error('users is not an array')
|
||||
|
||||
userIds.forEach(userId => {
|
||||
if (!ObjectId.isValid(userId)) throw new Error('user ID not valid')
|
||||
})
|
||||
}
|
||||
|
||||
function _handleUser(userId, callback) {
|
||||
UserUpdater.updateUser(userId, { $set: { must_reconfirm: true } }, error => {
|
||||
if (error) {
|
||||
console.log(`Failed to set must_reconfirm ${userId}`, error)
|
||||
processLogger.failedSet.push(userId)
|
||||
return callback()
|
||||
} else {
|
||||
UserSessionsManager.revokeAllUserSessions({ _id: userId }, [], error => {
|
||||
if (error) {
|
||||
console.log(`Failed to clear sessions for ${userId}`, error)
|
||||
processLogger.failedClear.push(userId)
|
||||
} else {
|
||||
processLogger.success.push(userId)
|
||||
}
|
||||
return callback()
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
async function _loopUsers(userIds) {
|
||||
await new Promise((resolve, reject) => {
|
||||
async.eachLimit(userIds, ASYNC_LIMIT, _handleUser, error => {
|
||||
if (error) return reject(error)
|
||||
resolve()
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
const fileName = process.argv[2]
|
||||
if (!fileName) throw new Error('missing filename')
|
||||
const usersFile = fs.readFileSync(fileName, 'utf8')
|
||||
const userIds = usersFile
|
||||
.trim()
|
||||
.split('\n')
|
||||
.map(id => id.trim())
|
||||
|
||||
async function processUsers(userIds) {
|
||||
console.log('---Starting set_must_reconfirm script---')
|
||||
await waitForDb()
|
||||
|
||||
_validateUserIdList(userIds)
|
||||
console.log(`---Starting to process ${userIds.length} users---`)
|
||||
await _loopUsers(userIds)
|
||||
|
||||
processLogger.printSummary()
|
||||
process.exit()
|
||||
}
|
||||
|
||||
processUsers(userIds)
|
Loading…
Reference in a new issue