From 4abc7b053ae6f3f5499c27a71d464f7f389711e9 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Thu, 20 Jan 2022 09:33:49 +0100 Subject: [PATCH] Fix peertube tools auth --- server/helpers/core-utils.ts | 2 +- server/tools/cli.ts | 47 +++++++++++++++++++++-------------- server/tools/peertube-auth.ts | 4 +-- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/server/helpers/core-utils.ts b/server/helpers/core-utils.ts index 531ccfba9..0ec45eb2e 100644 --- a/server/helpers/core-utils.ts +++ b/server/helpers/core-utils.ts @@ -153,7 +153,7 @@ function isProdInstance () { } function getAppNumber () { - return process.env.NODE_APP_INSTANCE + return process.env.NODE_APP_INSTANCE || '' } // --------------------------------------------------------------------------- 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) { diff --git a/server/tools/peertube-auth.ts b/server/tools/peertube-auth.ts index f8ac8b2ab..051156d66 100644 --- a/server/tools/peertube-auth.ts +++ b/server/tools/peertube-auth.ts @@ -47,7 +47,7 @@ function stripExtraneousFromPeerTubeUrl (url: string) { ? url.indexOf('/', 8) : url.length - return url.substr(0, urlLength) + return url.substring(0, urlLength) } program @@ -89,7 +89,7 @@ program // Check credentials try { // Strip out everything after the domain:port. - // @see https://github.com/Chocobozzz/PeerTube/issues/3520 + // See https://github.com/Chocobozzz/PeerTube/issues/3520 result.url = stripExtraneousFromPeerTubeUrl(result.url) const server = buildServer(result.url) -- 2.41.0