Merge pull request #1766 from overleaf/ta-dropbox-duplicates-script
Add Script to Unlink all Duplicate Dropbox uids GitOrigin-RevId: 6db73dee9f04e9006d0aec558cf370b5079df671
This commit is contained in:
committed by
sharelatex
parent
bd722dda8e
commit
7e32ed5158
@@ -0,0 +1,72 @@
|
||||
const { db } = require('../../app/js/infrastructure/mongojs')
|
||||
const DropboxHandler = require('../../modules/dropbox/app/js/DropboxHandler')
|
||||
const EmailHandler = require('../../app/js/Features/Email/EmailHandler')
|
||||
const async = require('async')
|
||||
const minimist = require('minimist')
|
||||
|
||||
const argv = minimist(process.argv.slice(2))
|
||||
const commit = argv.commit !== undefined
|
||||
|
||||
if (!commit) {
|
||||
console.log('DOING DRY RUN. TO SAVE CHANGES PASS --commit')
|
||||
}
|
||||
|
||||
db.users.aggregate(
|
||||
[
|
||||
{
|
||||
$group: {
|
||||
// group by Dropbox access token uid and count distinct users
|
||||
_id: '$dropbox.access_token.uid',
|
||||
count: { $sum: 1 },
|
||||
_ids: { $addToSet: '$_id' }
|
||||
}
|
||||
},
|
||||
{
|
||||
$match: {
|
||||
// select only uids userd more than once
|
||||
_id: { $ne: null },
|
||||
count: { $gt: 1 }
|
||||
}
|
||||
},
|
||||
{
|
||||
$project: {
|
||||
// filter output
|
||||
_id: false,
|
||||
dropbox_uid: '$_id',
|
||||
_ids: '$_ids'
|
||||
}
|
||||
}
|
||||
],
|
||||
{ allowDiskUse: true },
|
||||
function(error, results) {
|
||||
if (error) throw error
|
||||
console.log('FOUND ' + results.length + ' DUPLICATES')
|
||||
async.mapSeries(results, removeDuplicates, function(error) {
|
||||
if (error) throw error
|
||||
console.log('DONE')
|
||||
process.exit()
|
||||
})
|
||||
}
|
||||
)
|
||||
|
||||
function removeDuplicates(duplicate, callback) {
|
||||
async.mapSeries(duplicate._ids, unlinkUser, function(error) {
|
||||
callback(error)
|
||||
})
|
||||
}
|
||||
|
||||
function unlinkUser(_id, callback) {
|
||||
db.users.findOne({ _id: _id }, function(error, user) {
|
||||
if (error) return callback(error)
|
||||
console.log('UNLINKING USER ' + _id + ' (' + user.email + ')')
|
||||
if (!commit) return callback()
|
||||
DropboxHandler.unlinkAccount(_id, function(error) {
|
||||
if (error) return callback(error)
|
||||
EmailHandler.sendEmail(
|
||||
'dropboxUnlinkedDuplicate',
|
||||
{ to: user.email },
|
||||
callback
|
||||
)
|
||||
})
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user