Merge branch 'release/v1.2.0'
[oweals/peertube.git] / scripts / reset-password.ts
1 import * as program from 'commander'
2 import { initDatabaseModels } from '../server/initializers'
3 import { UserModel } from '../server/models/account/user'
4 import { isUserPasswordValid } from '../server/helpers/custom-validators/users'
5
6 program
7   .option('-u, --user [user]', 'User')
8   .parse(process.argv)
9
10 if (program['user'] === undefined) {
11   console.error('All parameters are mandatory.')
12   process.exit(-1)
13 }
14
15 initDatabaseModels(true)
16   .then(() => {
17     return UserModel.loadByUsername(program['user'])
18   })
19   .then(user => {
20     if (!user) {
21       console.error('User unknown.')
22       process.exit(-1)
23     }
24
25     const readline = require('readline')
26     const Writable = require('stream').Writable
27     const mutableStdout = new Writable({
28       write: function (chunk, encoding, callback) {
29         callback()
30       }
31     })
32     const rl = readline.createInterface({
33       input: process.stdin,
34       output: mutableStdout,
35       terminal: true
36     })
37
38     console.log('New password?')
39     rl.on('line', function (password) {
40       if (!isUserPasswordValid(password)) {
41         console.error('New password is invalid.')
42         process.exit(-1)
43       }
44
45       user.password = password
46
47       user.save()
48         .then(() => console.log('User password updated.'))
49         .catch(err => console.error(err))
50         .finally(() => process.exit(0))
51     })
52   })