| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- const Settings = require('@overleaf/settings')
- const { db, waitForDb } = require('../../../app/src/infrastructure/mongodb')
- const UserRegistrationHandler = require('../../../app/src/Features/User/UserRegistrationHandler')
- const OneTimeTokenHandler = require('../../../app/src/Features/Security/OneTimeTokenHandler')
- async function main() {
- await waitForDb()
- const email = (process.argv.slice(2).pop() || '').replace(/^--email=/, '')
- if (!email) {
- console.error(`Usage: node ${__filename} --email=joe@example.com`)
- process.exit(1)
- }
- await new Promise((resolve, reject) => {
- UserRegistrationHandler.registerNewUser(
- {
- email,
- password: require('crypto').randomBytes(32).toString('hex'),
- },
- (error, user) => {
- if (error && error.message !== 'EmailAlreadyRegistered') {
- return reject(error)
- }
- db.users.updateOne(
- { _id: user._id },
- { $set: { isAdmin: true } },
- error => {
- if (error) {
- return reject(error)
- }
- const ONE_WEEK = 7 * 24 * 60 * 60 // seconds
- OneTimeTokenHandler.getNewToken(
- 'password',
- {
- expiresIn: ONE_WEEK,
- email: user.email,
- user_id: user._id.toString(),
- },
- (err, token) => {
- if (err) {
- return reject(err)
- }
- console.log('')
- console.log(`\
- Successfully created ${email} as an admin user.
- Please visit the following URL to set a password for ${email} and log in:
- ${Settings.siteUrl}/user/password/set?passwordResetToken=${token}
- \
- `)
- resolve()
- }
- )
- }
- )
- }
- )
- })
- }
- main()
- .then(() => {
- console.error('Done.')
- process.exit(0)
- })
- .catch(err => {
- console.error(err)
- process.exit(1)
- })
|