Просмотр исходного кода

Merge pull request #16012 from overleaf/jpa-purge-legacy-pw

[web] purge legacy passwords

GitOrigin-RevId: db779de632e1ac96cce341d79ff251908640ea72
Jakob Ackermann 2 лет назад
Родитель
Сommit
5ea17d452f
1 измененных файлов с 40 добавлено и 0 удалено
  1. 40 0
      services/web/scripts/purge_legacy_passwords.js

+ 40 - 0
services/web/scripts/purge_legacy_passwords.js

@@ -0,0 +1,40 @@
+const { db, waitForDb } = require('../app/src/infrastructure/mongodb')
+const { batchedUpdateWithResultHandling } = require('./helpers/batchedUpdate')
+const { UserAuditLogEntry } = require('../app/src/models/UserAuditLogEntry')
+const DRY_RUN = process.env.DRY_RUN !== 'false'
+
+const VARIANTS = [
+  {
+    query: { sharelatexHashedPassword: { $exists: true } },
+    update: { $unset: { sharelatexHashedPassword: true } },
+  },
+  {
+    query: { hashedPassword: { $regex: /^[0-9a-f]{64}$/ } },
+    update: { $unset: { hashedPassword: true } },
+  },
+]
+
+if (require.main === module) {
+  batchedUpdateWithResultHandling(
+    'users',
+    { $or: VARIANTS.map(variant => variant.query) },
+    async users => {
+      const userIds = users.map(user => user._id)
+      if (DRY_RUN) {
+        console.warn(`Running in dry-run mode. Skipping updates for ${userIds}`)
+        return
+      }
+      for (const userId of userIds) {
+        await UserAuditLogEntry.create({
+          userId,
+          operation: 'purge-legacy-password',
+          info: { script: true },
+        })
+      }
+      await waitForDb()
+      for (const { query, update } of VARIANTS) {
+        await db.users.updateMany({ _id: { $in: userIds }, ...query }, update)
+      }
+    }
+  )
+}