mirror of
https://github.com/overleaf/overleaf.git
synced 2024-10-17 21:05:04 -04:00
54 lines
1.5 KiB
CoffeeScript
54 lines
1.5 KiB
CoffeeScript
|
Settings = require "settings-sharelatex"
|
||
|
mongojs = require("mongojs")
|
||
|
ObjectId = mongojs.ObjectId
|
||
|
db = mongojs(Settings.mongo.url, ['users', 'projects'])
|
||
|
async = require "async"
|
||
|
|
||
|
findHoldingAccounts = (callback = (error, users) ->) ->
|
||
|
db.users.find({holdingAccount: true}, {holdingAccount: 1, email: 1}, callback)
|
||
|
|
||
|
deleteUserProjects = (user_id, callback = (error) ->) ->
|
||
|
# Holding accounts can't own projects, so only remove from
|
||
|
# 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) ->) ->
|
||
|
if !user_id?
|
||
|
throw new Error("must have user_id")
|
||
|
console.log "[Removing user]", user_id
|
||
|
db.users.remove {_id: user_id}, (error, result) ->
|
||
|
console.log "[Removed user]", user_id, result
|
||
|
callback(error)
|
||
|
|
||
|
exports.migrate = (client, done=()->) ->
|
||
|
findHoldingAccounts (error, users) ->
|
||
|
throw error if error?
|
||
|
console.log "[Got list of holding accounts]", users.map (u) -> u._id
|
||
|
jobs = users.map (u) ->
|
||
|
(cb) ->
|
||
|
deleteUserProjects u._id, (error) ->
|
||
|
return cb(error) if error?
|
||
|
deleteUser u._id, cb
|
||
|
async.series jobs, (error) ->
|
||
|
throw error if error?
|
||
|
console.log "[Removed holding accounts]"
|
||
|
done()
|
||
|
|
||
|
exports.rollback = (client, done) ->
|
||
|
done()
|