From 4abc7b053ae6f3f5499c27a71d464f7f389711e9 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 20 Jan 2022 09:33:49 +0100 Subject: Fix peertube tools auth --- server/tools/cli.ts | 47 ++++++++++++++++++++++++++++------------------- 1 file changed, 28 insertions(+), 19 deletions(-) (limited to 'server/tools/cli.ts') diff --git a/server/tools/cli.ts b/server/tools/cli.ts index 7036ae3ec..671b56ed0 100644 --- a/server/tools/cli.ts +++ b/server/tools/cli.ts @@ -73,14 +73,13 @@ function getRemoteObjectOrDie ( ): { url: string, username: string, password: string } { const options = program.opts() - const manualOptionMode = options.url || options.username || options.password - - // Check parameters validity - if (manualOptionMode || settings.remotes.length === 0 || Object.keys(netrc.machines).length === 0) { + function exitIfNoOptions (options: string[], errorPrefix: string = '') { let exit = false - for (const key of [ 'url', 'username', 'password' ]) { + for (const key of options) { if (!options[key]) { + if (exit === false && errorPrefix) console.error(errorPrefix) + console.error(`--${key} field is required`) exit = true } @@ -89,26 +88,36 @@ function getRemoteObjectOrDie ( if (exit) process.exit(-1) } - if (!manualOptionMode) { - let url: string = options.url - let username: string = options.username - let password: string = options.password + // If username or password are specified, both are mandatory + if (options.username || options.password) { + exitIfNoOptions([ 'username', 'password' ]) + } - if (!url && settings.default !== -1) url = settings.remotes[settings.default] + // If no available machines, url, username and password args are mandatory + if (Object.keys(netrc.machines).length === 0) { + exitIfNoOptions([ 'url', 'username', 'password' ], 'No account found in netrc') + } - const machine = netrc.machines[url] + if (settings.remotes.length === 0 || settings.default === -1) { + exitIfNoOptions([ 'url' ], 'No default instance found') + } - if (!username && machine) username = machine.login - if (!password && machine) password = machine.password + let url: string = options.url + let username: string = options.username + let password: string = options.password - return { url, username, password } - } + if (!url && settings.default !== -1) url = settings.remotes[settings.default] - return { - url: options.url, - username: options.username, - password: options.password + const machine = netrc.machines[url] + if ((!username || !password) && !machine) { + console.error('Cannot find existing configuration for %s.', url) + process.exit(-1) } + + if (!username && machine) username = machine.login + if (!password && machine) password = machine.password + + return { url, username, password } } function buildCommonVideoOptions (command: Command) { -- cgit v1.2.3