import { program } from 'commander' import readline from 'readline' import { Writable } from 'stream' import { isUserPasswordValid } from '@server/helpers/custom-validators/users.js' import { initDatabaseModels } from '@server/initializers/database.js' import { UserModel } from '@server/models/user/user.js' program .option('-u, --user [user]', 'User') .parse(process.argv) const options = program.opts() if (options.user === undefined) { console.error('All parameters are mandatory.') process.exit(-1) } initDatabaseModels(true) .then(() => { return UserModel.loadByUsername(options.user) }) .then(user => { if (!user) { console.error('Unknown user.') process.exit(-1) } const mutableStdout = new Writable({ write: function (_chunk, _encoding, callback) { callback() } }) const rl = readline.createInterface({ input: process.stdin, output: mutableStdout, terminal: true }) console.log('New password?') rl.on('line', function (password) { if (!isUserPasswordValid(password)) { console.error('New password is invalid.') process.exit(-1) } user.password = password user.save() .then(() => console.log('User password updated.')) .catch(err => console.error(err)) .finally(() => process.exit(0)) }) }) .catch(err => { console.error(err) process.exit(-1) })