|
@@ -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
|
|
|
|
|
+ )
|
|
|
|
|
+ })
|
|
|
|
|
+ })
|
|
|
|
|
+}
|