| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- /* eslint-disable no-unused-vars */
- import Helpers from './lib/helpers.mjs'
- import Crypto from 'node:crypto'
- import { batchedUpdate } from '@overleaf/mongo-utils/batchedUpdate.js'
- const tags = ['server-ce', 'server-pro', 'saas']
- // Copied from services/web/app/src/Features/Collaborators/CollaboratorsInviteHelper.js
- function hashInviteToken(token) {
- return Crypto.createHmac('sha256', 'overleaf-token-invite')
- .update(token)
- .digest('hex')
- }
- const index = {
- key: {
- tokenHmac: 1,
- },
- name: 'tokenHmac_1',
- }
- const migrate = async client => {
- const { db } = client
- await Helpers.addIndexesToCollection(db.projectInvites, [index])
- await batchedUpdate(
- db.projectInvites,
- { tokenHmac: { $exists: false } },
- async invites => {
- for (const invite of invites) {
- const tokenHmac = hashInviteToken(invite.token)
- await db.projectInvites.updateOne(
- { _id: invite._id },
- { $set: { tokenHmac } }
- )
- }
- },
- { token: 1 }
- )
- }
- const rollback = async client => {
- const { db } = client
- await Helpers.dropIndexesFromCollection(db.projectInvites, [index])
- }
- export default {
- tags,
- migrate,
- rollback,
- }
|