]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/tools/cli.ts
Merge branch 'master' into develop
[github/Chocobozzz/PeerTube.git] / server / tools / cli.ts
1 const config = require('application-config')('PeerTube/CLI')
2 const netrc = require('netrc-parser').default
3
4 const version = require('../../../package.json').version
5
6 interface Settings {
7 remotes: any[],
8 default: number
9 }
10
11 function getSettings () {
12 return new Promise<Settings>((res, rej) => {
13 const defaultSettings = {
14 remotes: [],
15 default: 0
16 }
17
18 config.read((err, data) => {
19 if (err) return rej(err)
20
21 return res(Object.keys(data).length === 0 ? defaultSettings : data)
22 })
23 })
24 }
25
26 async function getNetrc () {
27 await netrc.load()
28
29 return netrc
30 }
31
32 function writeSettings (settings) {
33 return new Promise((res, rej) => {
34 config.write(settings, function (err) {
35 if (err) return rej(err)
36
37 return res()
38 })
39 })
40 }
41
42 function getRemoteObjectOrDie (program: any, settings: Settings) {
43 if (!program['url'] || !program['username'] || !program['password']) {
44 // No remote and we don't have program parameters: throw
45 if (settings.remotes.length === 0) {
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
63 if (!username) username = netrc.machines[url].login
64 if (!password) password = netrc.machines[url].password
65
66 return { url, username, password }
67 }
68
69 return {
70 url: program[ 'url' ],
71 username: program[ 'username' ],
72 password: program[ 'password' ]
73 }
74 }
75
76 // ---------------------------------------------------------------------------
77
78 export {
79 version,
80 config,
81 getSettings,
82 getNetrc,
83 getRemoteObjectOrDie,
84 writeSettings
85 }