]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/tools/cli.ts
Fix netrc tools
[github/Chocobozzz/PeerTube.git] / server / tools / cli.ts
CommitLineData
8704acf4
RK
1const config = require('application-config')('PeerTube/CLI')
2const netrc = require('netrc-parser').default
3
499d9015 4const version = require('../../../package.json').version
8704acf4 5
8704acf4
RK
6interface Settings {
7 remotes: any[],
8 default: number
9}
10
2b4dd7e2 11function getSettings () {
8704acf4 12 return new Promise<Settings>((res, rej) => {
2b4dd7e2 13 const defaultSettings = {
8704acf4
RK
14 remotes: [],
15 default: 0
2b4dd7e2
C
16 }
17
8704acf4 18 config.read((err, data) => {
2b4dd7e2
C
19 if (err) return rej(err)
20
21 return res(Object.keys(data).length === 0 ? defaultSettings : data)
8704acf4
RK
22 })
23 })
24}
25
2b4dd7e2
C
26async function getNetrc () {
27 await netrc.load()
28
29 return netrc
30}
31
32function writeSettings (settings) {
8704acf4
RK
33 return new Promise((res, rej) => {
34 config.write(settings, function (err) {
2b4dd7e2
C
35 if (err) return rej(err)
36
8704acf4
RK
37 return res()
38 })
39 })
40}
41
2b4dd7e2
C
42function getRemoteObjectOrDie (program: any, settings: Settings) {
43 if (!program['url'] || !program['username'] || !program['password']) {
44 // No remote and we don't have program parameters: throw
9f167f12 45 if (settings.remotes.length === 0 || Object.keys(netrc.machines).length === 0) {
2b4dd7e2
C
46 if (!program[ 'url' ]) console.error('--url field is required.')
47 if (!program[ 'username' ]) console.error('--username field is required.')
48 if (!program[ 'password' ]) console.error('--password field is required.')
49
50 return process.exit(-1)
51 }
52
53 let url: string = program['url']
54 let username: string = program['username']
55 let password: string = program['password']
56
57 if (!url) {
58 url = settings.default !== -1
59 ? settings.remotes[settings.default]
60 : settings.remotes[0]
61 }
62
9f167f12
C
63 const machine = netrc.machines[url]
64 if (!username) username = machine.login
65 if (!password) password = machine.password
2b4dd7e2
C
66
67 return { url, username, password }
68 }
69
70 return {
71 url: program[ 'url' ],
72 username: program[ 'username' ],
73 password: program[ 'password' ]
74 }
75}
8704acf4
RK
76
77// ---------------------------------------------------------------------------
78
79export {
80 version,
81 config,
8704acf4 82 getSettings,
2b4dd7e2
C
83 getNetrc,
84 getRemoteObjectOrDie,
85 writeSettings
8704acf4 86}