X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=server%2Ftools%2Fpeertube-auth.ts;h=afa19ee085753b8eae0db246aaef1d0d46e8b897;hb=c55e3d7227fe1453869e309025996b9d75256d5d;hp=1035d664aa0af2fb391fbd4e6aa527d5f0463cd5;hpb=fd0bfc3ac43eb0c0c2ac0b21bc2e0670f546384f;p=github%2FChocobozzz%2FPeerTube.git diff --git a/server/tools/peertube-auth.ts b/server/tools/peertube-auth.ts index 1035d664a..afa19ee08 100644 --- a/server/tools/peertube-auth.ts +++ b/server/tools/peertube-auth.ts @@ -1,10 +1,14 @@ -import * as program from 'commander' -import * as prompt from 'prompt' -import { getSettings, writeSettings, getNetrc } from './cli' -import { isHostValid } from '../helpers/custom-validators/servers' +// eslint-disable @typescript-eslint/no-unnecessary-type-assertion + +import { registerTSPaths } from '../helpers/register-ts-paths' +registerTSPaths() + +import { OptionValues, program } from 'commander' +import { assignToken, buildServer, getNetrc, getSettings, writeSettings } from './cli' import { isUserUsernameValid } from '../helpers/custom-validators/users' +import CliTable3 from 'cli-table3' -const Table = require('cli-table') +import prompt = require('prompt') async function delInstance (url: string) { const [ settings, netrc ] = await Promise.all([ getSettings(), getNetrc() ]) @@ -24,7 +28,7 @@ async function delInstance (url: string) { async function setInstance (url: string, username: string, password: string, isDefault: boolean) { const [ settings, netrc ] = await Promise.all([ getSettings(), getNetrc() ]) - if (settings.remotes.indexOf(url) === -1) { + if (settings.remotes.includes(url) === false) { settings.remotes.push(url) } @@ -42,6 +46,15 @@ function isURLaPeerTubeInstance (url: string) { return url.startsWith('http://') || url.startsWith('https://') } +function stripExtraneousFromPeerTubeUrl (url: string) { + // Get everything before the 3rd /. + const urlLength = url.includes('/', 8) + ? url.indexOf('/', 8) + : url.length + + return url.substr(0, urlLength) +} + program .name('auth') .usage('[command] [options]') @@ -53,7 +66,8 @@ program .option('-U, --username ', 'Username') .option('-p, --password ', 'Password') .option('--default', 'add the entry as the new default') - .action(options => { + .action((options: OptionValues) => { + /* eslint-disable no-import-assign */ prompt.override = options prompt.start() prompt.get({ @@ -76,7 +90,21 @@ program } } }, async (_, result) => { - await setInstance(result.url, result.username, result.password, program['default']) + + // Check credentials + try { + // Strip out everything after the domain:port. + // @see https://github.com/Chocobozzz/PeerTube/issues/3520 + result.url = stripExtraneousFromPeerTubeUrl(result.url) + + const server = buildServer(result.url) + await assignToken(server, result.username, result.password) + } catch (err) { + console.error(err.message) + process.exit(-1) + } + + await setInstance(result.url, result.username, result.password, options.default) process.exit(0) }) @@ -97,10 +125,10 @@ program .action(async () => { const [ settings, netrc ] = await Promise.all([ getSettings(), getNetrc() ]) - const table = new Table({ - head: ['instance', 'login'], - colWidths: [30, 30] - }) + const table = new CliTable3({ + head: [ 'instance', 'login' ], + colWidths: [ 30, 30 ] + }) as any settings.remotes.forEach(element => { if (!netrc.machines[element]) return @@ -121,7 +149,7 @@ program .description('set an existing entry as default') .action(async url => { const settings = await getSettings() - const instanceExists = settings.remotes.indexOf(url) !== -1 + const instanceExists = settings.remotes.includes(url) if (instanceExists) { settings.default = settings.remotes.indexOf(url) @@ -134,15 +162,12 @@ program } }) -program.on('--help', function () { - console.log(' Examples:') - console.log() - console.log(' $ peertube add -u peertube.cpy.re -U "PEERTUBE_USER" --password "PEERTUBE_PASSWORD"') - console.log(' $ peertube add -u peertube.cpy.re -U root') - console.log(' $ peertube list') - console.log(' $ peertube del peertube.cpy.re') - console.log() -}) +program.addHelpText('after', '\n\n Examples:\n\n' + + ' $ peertube auth add -u https://peertube.cpy.re -U "PEERTUBE_USER" --password "PEERTUBE_PASSWORD"\n' + + ' $ peertube auth add -u https://peertube.cpy.re -U root\n' + + ' $ peertube auth list\n' + + ' $ peertube auth del https://peertube.cpy.re\n' +) if (!process.argv.slice(2).length) { program.outputHelp()