mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-21 20:47:08 -05:00
Add in dry run option for holding account migration and log out removed users
This commit is contained in:
parent
92da38bb6b
commit
a539398275
1 changed files with 73 additions and 43 deletions
|
@ -4,50 +4,80 @@ ObjectId = mongojs.ObjectId
|
||||||
db = mongojs(Settings.mongo.url, ['users', 'projects'])
|
db = mongojs(Settings.mongo.url, ['users', 'projects'])
|
||||||
async = require "async"
|
async = require "async"
|
||||||
|
|
||||||
findHoldingAccounts = (callback = (error, users) ->) ->
|
module.exports = HoldingAccountMigration =
|
||||||
db.users.find({holdingAccount: true}, {holdingAccount: 1, email: 1}, callback)
|
DRY_RUN: true
|
||||||
|
|
||||||
deleteUserProjects = (user_id, callback = (error) ->) ->
|
findHoldingAccounts: (callback = (error, users) ->) ->
|
||||||
# Holding accounts can't own projects, so only remove from
|
db.users.find({holdingAccount: true}, {holdingAccount: 1, email: 1}, callback)
|
||||||
# collaberator_refs and readOnly_refs
|
|
||||||
console.log "[Removing user from projects]", user_id
|
|
||||||
db.projects.update {
|
|
||||||
$or: [
|
|
||||||
{collaberator_refs: user_id},
|
|
||||||
{readOnly_refs: user_id}
|
|
||||||
]
|
|
||||||
}, {
|
|
||||||
$pull: {
|
|
||||||
collaberator_refs: user_id,
|
|
||||||
readOnly_refs: user_id
|
|
||||||
}
|
|
||||||
}, {
|
|
||||||
multi: true
|
|
||||||
}, (error, result) ->
|
|
||||||
console.log "[Removed user from projects]", user_id, result
|
|
||||||
callback(error)
|
|
||||||
|
|
||||||
deleteUser = (user_id, callback = (error) ->) ->
|
deleteUserProjects: (user_id, callback = (error) ->) ->
|
||||||
if !user_id?
|
# Holding accounts can't own projects, so only remove from
|
||||||
throw new Error("must have user_id")
|
# collaberator_refs and readOnly_refs
|
||||||
console.log "[Removing user]", user_id
|
console.log "[Removing user from projects]", user_id
|
||||||
db.users.remove {_id: user_id}, (error, result) ->
|
db.projects.find {
|
||||||
console.log "[Removed user]", user_id, result
|
$or: [
|
||||||
callback(error)
|
{collaberator_refs: user_id},
|
||||||
|
{readOnly_refs: user_id}
|
||||||
|
]
|
||||||
|
}, { collaberator_refs: 1, readOnly_refs: 1 }, (error, projects = []) ->
|
||||||
|
return callback(error) if error?
|
||||||
|
jobs = projects.map (project) ->
|
||||||
|
(cb) ->
|
||||||
|
console.log "[Removing user from project]", user_id, JSON.stringify(project)
|
||||||
|
if !project._id?
|
||||||
|
throw new Error("no project id")
|
||||||
|
|
||||||
|
if !HoldingAccountMigration.DRY_RUN
|
||||||
|
db.projects.update {
|
||||||
|
_id: project._id
|
||||||
|
}, {
|
||||||
|
$pull: {
|
||||||
|
collaberator_refs: user_id,
|
||||||
|
readOnly_refs: user_id
|
||||||
|
}
|
||||||
|
}, (error, result) ->
|
||||||
|
return cb(error) if error?
|
||||||
|
console.log "[Removed user from project]", user_id, project._id, result
|
||||||
|
cb()
|
||||||
|
else
|
||||||
|
console.log "[Would have removed user from project]", user_id, project._id
|
||||||
|
cb()
|
||||||
|
|
||||||
|
async.series jobs, callback
|
||||||
|
|
||||||
exports.migrate = (client, done=()->) ->
|
deleteUser: (user_id, callback = (error) ->) ->
|
||||||
findHoldingAccounts (error, users) ->
|
if !user_id?
|
||||||
throw error if error?
|
throw new Error("must have user_id")
|
||||||
console.log "[Got list of holding accounts]", users.map (u) -> u._id
|
db.users.find {_id: user_id}, (error, user) ->
|
||||||
jobs = users.map (u) ->
|
return callback(error) if error?
|
||||||
(cb) ->
|
if !user?
|
||||||
deleteUserProjects u._id, (error) ->
|
throw new Error("expected user")
|
||||||
return cb(error) if error?
|
console.log "[Removing user]", user_id, JSON.stringify(user)
|
||||||
deleteUser u._id, cb
|
if !HoldingAccountMigration.DRY_RUN
|
||||||
async.series jobs, (error) ->
|
db.users.remove {_id: user_id}, (error, result) ->
|
||||||
|
console.log "[Removed user]", user_id, result
|
||||||
|
callback(error)
|
||||||
|
else
|
||||||
|
console.log "[Would have removed user]", user_id
|
||||||
|
callback()
|
||||||
|
|
||||||
|
run: (done) ->
|
||||||
|
HoldingAccountMigration.findHoldingAccounts (error, users) ->
|
||||||
throw error if error?
|
throw error if error?
|
||||||
console.log "[Removed holding accounts]"
|
console.log "[Got list of holding accounts]", users.map (u) -> u._id
|
||||||
done()
|
jobs = users.map (u) ->
|
||||||
|
(cb) ->
|
||||||
exports.rollback = (client, done) ->
|
HoldingAccountMigration.deleteUserProjects u._id, (error) ->
|
||||||
done()
|
return cb(error) if error?
|
||||||
|
HoldingAccountMigration.deleteUser u._id, cb
|
||||||
|
async.series jobs, (error) ->
|
||||||
|
throw error if error?
|
||||||
|
console.log "[Removed holding accounts]"
|
||||||
|
done()
|
||||||
|
|
||||||
|
migrate: (client, done=()->) ->
|
||||||
|
HoldingAccountMigration.DRY_RUN = false
|
||||||
|
HoldingAccountMigration.run(done)
|
||||||
|
|
||||||
|
rollback: (client, done) ->
|
||||||
|
done()
|
||||||
|
|
Loading…
Reference in a new issue