From 8704acf49efc770d73bf07c10468ed8c74d28a83 Mon Sep 17 00:00:00 2001 From: Rigel Kent Date: Thu, 13 Sep 2018 14:27:44 +0200 Subject: one cli to unite them all MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ash nazg thrakatulûk agh burzum-ishi krimpatul - refactor import-videos to use the youtubeDL helper - add very basic tests for the cli --- server/tools/peertube-auth.ts | 140 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 server/tools/peertube-auth.ts (limited to 'server/tools/peertube-auth.ts') diff --git a/server/tools/peertube-auth.ts b/server/tools/peertube-auth.ts new file mode 100644 index 000000000..33438811e --- /dev/null +++ b/server/tools/peertube-auth.ts @@ -0,0 +1,140 @@ +import * as program from 'commander' +import * as prompt from 'prompt' +const Table = require('cli-table') +import { getSettings, writeSettings, netrc } from './cli' +import { isHostValid } from '../helpers/custom-validators/servers' +import { isUserUsernameValid } from '../helpers/custom-validators/users' + +function delInstance (url: string) { + return new Promise((res, rej): void => { + getSettings() + .then(async (settings) => { + settings.remotes.splice(settings.remotes.indexOf(url)) + await writeSettings(settings) + delete netrc.machines[url] + netrc.save() + res() + }) + .catch(err => rej(err)) + }) +} + +async function setInstance (url: string, username: string, password: string) { + return new Promise((res, rej): void => { + getSettings() + .then(async settings => { + if (settings.remotes.indexOf(url) === -1) { + settings.remotes.push(url) + } + await writeSettings(settings) + netrc.machines[url] = { login: username, password } + netrc.save() + res() + }) + .catch(err => rej(err)) + }) +} + +function isURLaPeerTubeInstance (url: string) { + return isHostValid(url) || (url.includes('localhost')) +} + +program + .name('auth') + .usage('[command] [options]') + +program + .command('add') + .description('remember your accounts on remote instances for easier use') + .option('-u, --url ', 'Server url') + .option('-U, --username ', 'Username') + .option('-p, --password ', 'Password') + .option('--default', 'add the entry as the new default') + .action(options => { + prompt.override = options + prompt.start() + prompt.get({ + properties: { + url: { + description: 'instance url', + conform: (value) => isURLaPeerTubeInstance(value), + required: true + }, + username: { + conform: (value) => isUserUsernameValid(value), + message: 'Name must be only letters, spaces, or dashes', + required: true + }, + password: { + hidden: true, + replace: '*', + required: true + } + } + }, (_, result) => { + setInstance(result.url, result.username, result.password) + }) + }) + +program + .command('del ') + .description('unregisters a remote instance') + .action((url) => { + delInstance(url) + }) + +program + .command('list') + .description('lists registered remote instances') + .action(() => { + getSettings() + .then(settings => { + const table = new Table({ + head: ['instance', 'login'], + colWidths: [30, 30] + }) + netrc.loadSync() + settings.remotes.forEach(element => { + table.push([ + element, + netrc.machines[element].login + ]) + }) + + console.log(table.toString()) + }) + }) + +program + .command('set-default ') + .description('set an existing entry as default') + .action((url) => { + getSettings() + .then(settings => { + const instanceExists = settings.remotes.indexOf(url) !== -1 + + if (instanceExists) { + settings.default = settings.remotes.indexOf(url) + writeSettings(settings) + } else { + console.log(' is not a registered instance.') + process.exit(-1) + } + }) + }) + +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() +}) + +if (!process.argv.slice(2).length) { + program.outputHelp() +} + +program.parse(process.argv) -- cgit v1.2.3