| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import { db } from '../app/src/infrastructure/mongodb.js'
- import BatchedUpdateModule from './helpers/batchedUpdate.mjs'
- import minimist from 'minimist'
- import CollaboratorsInviteHelper from '../app/src/Features/Collaborators/CollaboratorsInviteHelper.js'
- import { fileURLToPath } from 'node:url'
- const { batchedUpdate } = BatchedUpdateModule
- const argv = minimist(process.argv.slice(2), {
- boolean: ['dry-run', 'help'],
- default: {
- 'dry-run': true,
- },
- })
- const DRY_RUN = argv['dry-run']
- async function addTokenHmacField(DRY_RUN) {
- const query = { tokenHmac: { $exists: false } }
- await batchedUpdate(
- 'projectInvites',
- query,
- async invites => {
- for (const invite of invites) {
- console.log(
- `=> Missing "tokenHmac" token in invitation: ${invite._id.toString()}`
- )
- if (DRY_RUN) {
- console.log(
- `=> DRY RUN - would add "tokenHmac" token to invitation ${invite._id.toString()}`
- )
- continue
- }
- const tokenHmac = CollaboratorsInviteHelper.hashInviteToken(
- invite.token
- )
- await db.projectInvites.updateOne(
- { _id: invite._id },
- { $set: { tokenHmac } }
- )
- console.log(
- `=> Added "tokenHmac" token to invitation ${invite._id.toString()}`
- )
- }
- },
- { token: 1 }
- )
- }
- async function main(DRY_RUN) {
- await addTokenHmacField(DRY_RUN)
- }
- export default main
- if (fileURLToPath(import.meta.url) === process.argv[1]) {
- if (argv.help || argv._.length > 1) {
- console.error(`Usage: node scripts/backfill_project_invites_token_hmac.mjs
- Adds a "tokenHmac" field (which is a hashed version of the token) to each project invite record.
- Options:
- --dry-run finds invitations without HMAC token but does not do any updates
- `)
- process.exit(1)
- }
- try {
- await main(DRY_RUN)
- console.error('Done')
- process.exit(0)
- } catch (error) {
- console.error(error)
- process.exit(1)
- }
- }
|