ソースを参照

Merge pull request #11669 from overleaf/tm-group-invite-emails-to-lowercase

Add migration that normalises group invite emails to lowercase

GitOrigin-RevId: 6352848b2bf13b2eb00ce5c9bff21a3f421c82b6
Mathias Jakobsen 3 年 前
親
コミット
9ff8d93ab8
1 ファイル変更、70 行追加、0 行削除
  1. 70 0
      services/web/scripts/fix_group_invite_emails_to_lowercase.js

+ 70 - 0
services/web/scripts/fix_group_invite_emails_to_lowercase.js

@@ -0,0 +1,70 @@
+const DRY_RUN = process.env.DRY_RUN !== 'false'
+
+const { db, waitForDb } = require('../app/src/infrastructure/mongodb')
+const { batchedUpdate } = require('./helpers/batchedUpdate')
+
+console.log({
+  DRY_RUN,
+})
+
+function anyInviteEmailHasUppercaseChars(subscription) {
+  return subscription.teamInvites.some(invite => {
+    return /[A-Z]/.test(invite.email)
+  })
+}
+
+async function processBatch(_, subscriptions) {
+  subscriptions.forEach(subscription => {
+    if (anyInviteEmailHasUppercaseChars(subscription)) {
+      console.log('fixing emails in group invites for', subscription._id)
+      if (!DRY_RUN) {
+        db.subscriptions.updateOne({ _id: subscription._id }, [
+          {
+            $set: {
+              teamInvites: {
+                $map: {
+                  input: '$teamInvites',
+                  in: {
+                    $mergeObjects: [
+                      '$$this',
+                      {
+                        email: {
+                          $toLower: '$$this.email',
+                        },
+                      },
+                    ],
+                  },
+                },
+              },
+            },
+          },
+        ])
+      }
+    }
+  })
+}
+
+async function main() {
+  await waitForDb()
+
+  const projection = {
+    _id: 1,
+    teamInvites: 1,
+  }
+  const query = {
+    'teamInvites.0': {
+      $exists: true,
+    },
+  }
+  await batchedUpdate('subscriptions', query, processBatch, projection)
+}
+
+main()
+  .then(() => {
+    console.error('Done.')
+    process.exit(0)
+  })
+  .catch(error => {
+    console.error({ error })
+    process.exit(1)
+  })