]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/commitdiff
Adapt CLI to new commands
authorChocobozzz <me@florianbigard.com>
Tue, 13 Jul 2021 09:44:16 +0000 (11:44 +0200)
committerChocobozzz <me@florianbigard.com>
Tue, 20 Jul 2021 13:27:18 +0000 (15:27 +0200)
server/tools/cli.ts
server/tools/peertube-auth.ts
server/tools/peertube-get-access-token.ts
server/tools/peertube-import-videos.ts
server/tools/peertube-plugins.ts
server/tools/peertube-redundancy.ts
server/tools/peertube-upload.ts
shared/extra-utils/users/login-command.ts

index 0528859a46f966a0cd98e7cf3056dacaadd8c201..3e0e03b9726c47355af8111c41398d5b7d3300a9 100644 (file)
@@ -3,12 +3,10 @@ import { Netrc } from 'netrc-parser'
 import { join } from 'path'
 import { createLogger, format, transports } from 'winston'
 import { assignCommands, ServerInfo } from '@shared/extra-utils'
-import { getAccessToken } from '@shared/extra-utils/users/login'
 import { getMyUserInformation } from '@shared/extra-utils/users/users'
 import { User, UserRole } from '@shared/models'
-import { root } from '../../shared/extra-utils/miscs/miscs'
 import { VideoPrivacy } from '../../shared/models/videos'
-import { getAppNumber, isTestInstance } from '../helpers/core-utils'
+import { getAppNumber, isTestInstance, root } from '../helpers/core-utils'
 
 let configName = 'PeerTube/CLI'
 if (isTestInstance()) configName += `-${getAppNumber()}`
@@ -17,9 +15,9 @@ const config = require('application-config')(configName)
 
 const version = require('../../../package.json').version
 
-async function getAdminTokenOrDie (url: string, username: string, password: string) {
-  const accessToken = await getAccessToken(url, username, password)
-  const resMe = await getMyUserInformation(url, accessToken)
+async function getAdminTokenOrDie (server: ServerInfo, username: string, password: string) {
+  const accessToken = await server.loginCommand.getAccessToken(username, password)
+  const resMe = await getMyUserInformation(server.url, accessToken)
   const me: User = resMe.body
 
   if (me.role !== UserRole.ADMINISTRATOR) {
@@ -30,10 +28,6 @@ async function getAdminTokenOrDie (url: string, username: string, password: stri
   return accessToken
 }
 
-async function getAccessTokenOrDie (url: string, username: string, password: string) {
-  return getAccessToken(url, username, password)
-}
-
 interface Settings {
   remotes: any[]
   default: number
@@ -187,13 +181,22 @@ function getServerCredentials (program: Command) {
                 })
 }
 
-function buildServer (url: string, accessToken?: string): ServerInfo {
-  const server = { url, accessToken, internalServerNumber: undefined }
+function buildServer (url: string): ServerInfo {
+  const server = { url, internalServerNumber: undefined }
   assignCommands(server)
 
   return server
 }
 
+async function assignToken (server: ServerInfo, username: string, password: string) {
+  const bodyClient = await server.loginCommand.getClient()
+  const client = { id: bodyClient.client_id, secret: bodyClient.client_secret }
+
+  const body = await server.loginCommand.login({ client, user: { username, password } })
+
+  server.accessToken = body.access_token
+}
+
 function getLogger (logLevel = 'info') {
   const logLevels = {
     0: 0,
@@ -241,6 +244,6 @@ export {
   buildVideoAttributesFromCommander,
 
   getAdminTokenOrDie,
-  getAccessTokenOrDie,
-  buildServer
+  buildServer,
+  assignToken
 }
index 1934e7986ea62bff00e8432c808340b161c37748..b9f4ef4f8ef181a2b7486e24ec294df461a1b21a 100644 (file)
@@ -5,9 +5,8 @@ registerTSPaths()
 
 import { OptionValues, program } from 'commander'
 import * as prompt from 'prompt'
-import { getNetrc, getSettings, writeSettings } from './cli'
+import { assignToken, buildServer, getNetrc, getSettings, writeSettings } from './cli'
 import { isUserUsernameValid } from '../helpers/custom-validators/users'
-import { getAccessToken } from '../../shared/extra-utils'
 import * as CliTable3 from 'cli-table3'
 
 async function delInstance (url: string) {
@@ -97,7 +96,8 @@ program
         // @see https://github.com/Chocobozzz/PeerTube/issues/3520
         result.url = stripExtraneousFromPeerTubeUrl(result.url)
 
-        await getAccessToken(result.url, result.username, result.password)
+        const server = buildServer(result.url)
+        await assignToken(server, result.username, result.password)
       } catch (err) {
         console.error(err.message)
         process.exit(-1)
index 5868d05485b0a27abbd6ae82e4991bf74f8bee4d..a67de9180d3b9b1257adc2adef47dc0b728989f4 100644 (file)
@@ -2,7 +2,7 @@ import { registerTSPaths } from '../helpers/register-ts-paths'
 registerTSPaths()
 
 import { program } from 'commander'
-import { getAccessToken } from '../../shared/extra-utils'
+import { assignToken, buildServer } from './cli'
 
 program
   .option('-u, --url <url>', 'Server url')
@@ -24,9 +24,11 @@ if (
   process.exit(-1)
 }
 
-getAccessToken(options.url, options.username, options.password)
-  .then(accessToken => {
-    console.log(accessToken)
+const server = buildServer(options.url)
+
+assignToken(server, options.username, options.password)
+  .then(() => {
+    console.log(server.accessToken)
     process.exit(0)
   })
   .catch(err => {
index a546a8dbe13f6f152a597519a948537740f58ed2..0a4d6fa6e6fcf572e5eeb792098ec6fdc098a9fd 100644 (file)
@@ -14,10 +14,10 @@ import { sha256 } from '../helpers/core-utils'
 import { doRequestAndSaveToFile } from '../helpers/requests'
 import { CONSTRAINTS_FIELDS } from '../initializers/constants'
 import {
+  assignToken,
   buildCommonVideoOptions,
   buildServer,
   buildVideoAttributesFromCommander,
-  getAccessTokenOrDie,
   getLogger,
   getServerCredentials
 } from './cli'
@@ -232,8 +232,8 @@ async function uploadVideoOnPeerTube (parameters: {
     tags
   }
 
-  let accessToken = await getAccessTokenOrDie(url, username, password)
-  const server = buildServer(url, accessToken)
+  const server = buildServer(url)
+  await assignToken(server, username, password)
 
   const videoAttributes = await buildVideoAttributesFromCommander(server, program, defaultAttributes)
 
@@ -247,14 +247,14 @@ async function uploadVideoOnPeerTube (parameters: {
   log.info('\nUploading on PeerTube video "%s".', videoAttributes.name)
 
   try {
-    await uploadVideo(url, accessToken, videoAttributes)
+    await uploadVideo(url, server.accessToken, videoAttributes)
   } catch (err) {
     if (err.message.indexOf('401') !== -1) {
       log.info('Got 401 Unauthorized, token may have expired, renewing token and retry.')
 
-      accessToken = await getAccessTokenOrDie(url, username, password)
+      server.accessToken = await server.loginCommand.getAccessToken(username, password)
 
-      await uploadVideo(url, accessToken, videoAttributes)
+      await uploadVideo(url, server.accessToken, videoAttributes)
     } else {
       exitError(err.message)
     }
index 63541bf2c8aed8bf30533285051f0f612deed4f2..22a09b77981d88f26a7740cc7b477ea11478b30e 100644 (file)
@@ -4,7 +4,7 @@ import { registerTSPaths } from '../helpers/register-ts-paths'
 registerTSPaths()
 
 import { program, Command, OptionValues } from 'commander'
-import { buildServer, getAdminTokenOrDie, getServerCredentials } from './cli'
+import { assignToken, buildServer, getServerCredentials } from './cli'
 import { PluginType } from '../../shared/models'
 import { isAbsolute } from 'path'
 import * as CliTable3 from 'cli-table3'
@@ -62,8 +62,8 @@ program.parse(process.argv)
 
 async function pluginsListCLI (command: Command, options: OptionValues) {
   const { url, username, password } = await getServerCredentials(command)
-  const token = await getAdminTokenOrDie(url, username, password)
-  const server = buildServer(url, token)
+  const server = buildServer(url)
+  await assignToken(server, username, password)
 
   let pluginType: PluginType
   if (options.onlyThemes) pluginType = PluginType.THEME
@@ -105,8 +105,8 @@ async function installPluginCLI (command: Command, options: OptionValues) {
   }
 
   const { url, username, password } = await getServerCredentials(command)
-  const token = await getAdminTokenOrDie(url, username, password)
-  const server = buildServer(url, token)
+  const server = buildServer(url)
+  await assignToken(server, username, password)
 
   try {
     await server.pluginsCommand.install({ npmName: options.npmName, path: options.path })
@@ -132,8 +132,8 @@ async function updatePluginCLI (command: Command, options: OptionValues) {
   }
 
   const { url, username, password } = await getServerCredentials(command)
-  const token = await getAdminTokenOrDie(url, username, password)
-  const server = buildServer(url, token)
+  const server = buildServer(url)
+  await assignToken(server, username, password)
 
   try {
     await server.pluginsCommand.update({ npmName: options.npmName, path: options.path })
@@ -154,8 +154,8 @@ async function uninstallPluginCLI (command: Command, options: OptionValues) {
   }
 
   const { url, username, password } = await getServerCredentials(command)
-  const token = await getAdminTokenOrDie(url, username, password)
-  const server = buildServer(url, token)
+  const server = buildServer(url)
+  await assignToken(server, username, password)
 
   try {
     await server.pluginsCommand.uninstall({ npmName: options.npmName })
index 76d633f9e1757397afccd137fa70032338ac3efc..0f6b3086c9b7e8423597769618d2cb9c94176cf0 100644 (file)
@@ -8,7 +8,7 @@ import { URL } from 'url'
 import validator from 'validator'
 import { HttpStatusCode } from '@shared/core-utils/miscs/http-error-codes'
 import { VideoRedundanciesTarget } from '@shared/models'
-import { buildServer, getAdminTokenOrDie, getServerCredentials } from './cli'
+import { assignToken, buildServer, getServerCredentials } from './cli'
 
 import bytes = require('bytes')
 
@@ -60,8 +60,8 @@ program.parse(process.argv)
 
 async function listRedundanciesCLI (target: VideoRedundanciesTarget) {
   const { url, username, password } = await getServerCredentials(program)
-  const token = await getAdminTokenOrDie(url, username, password)
-  const server = buildServer(url, token)
+  const server = buildServer(url)
+  await assignToken(server, username, password)
 
   const { data } = await server.redundancyCommand.listVideos({ start: 0, count: 100, sort: 'name', target })
 
@@ -104,8 +104,8 @@ async function listRedundanciesCLI (target: VideoRedundanciesTarget) {
 
 async function addRedundancyCLI (options: { video: number }, command: Command) {
   const { url, username, password } = await getServerCredentials(command)
-  const token = await getAdminTokenOrDie(url, username, password)
-  const server = buildServer(url, token)
+  const server = buildServer(url)
+  await assignToken(server, username, password)
 
   if (!options.video || validator.isInt('' + options.video) === false) {
     console.error('You need to specify the video id to duplicate and it should be a number.\n')
@@ -134,8 +134,8 @@ async function addRedundancyCLI (options: { video: number }, command: Command) {
 
 async function removeRedundancyCLI (options: { video: number }, command: Command) {
   const { url, username, password } = await getServerCredentials(command)
-  const token = await getAdminTokenOrDie(url, username, password)
-  const server = buildServer(url, token)
+  const server = buildServer(url)
+  await assignToken(server, username, password)
 
   if (!options.video || validator.isInt('' + options.video) === false) {
     console.error('You need to specify the video id to remove from your redundancies.\n')
index d1c5348d1efb2c1e2f52f80ba7cb7a519b26c83f..c94b0585729b8a643a6c8cc718984d0f024c0d85 100644 (file)
@@ -4,9 +4,8 @@ registerTSPaths()
 import { program } from 'commander'
 import { access, constants } from 'fs-extra'
 import { isAbsolute } from 'path'
-import { getAccessToken } from '../../shared/extra-utils'
 import { uploadVideo } from '../../shared/extra-utils/'
-import { buildCommonVideoOptions, buildServer, buildVideoAttributesFromCommander, getServerCredentials } from './cli'
+import { assignToken, buildCommonVideoOptions, buildServer, buildVideoAttributesFromCommander, getServerCredentials } from './cli'
 
 let command = program
   .name('upload')
@@ -46,8 +45,8 @@ getServerCredentials(command)
   .catch(err => console.error(err))
 
 async function run (url: string, username: string, password: string) {
-  const token = await getAccessToken(url, username, password)
-  const server = buildServer(url, token)
+  const server = buildServer(url)
+  await assignToken(server, username, password)
 
   await access(options.file, constants.F_OK)
 
@@ -62,7 +61,7 @@ async function run (url: string, username: string, password: string) {
   })
 
   try {
-    await uploadVideo(url, token, videoAttributes)
+    await uploadVideo(url, server.accessToken, videoAttributes)
     console.log(`Video ${options.videoName} uploaded.`)
     process.exit(0)
   } catch (err) {
index 97efcb766618b375c02c3d3f0cb5389684528e94..8af3531f97dfe9f96972957ea56d53f44de0eb07 100644 (file)
@@ -1,4 +1,3 @@
-import { PeerTubeRequestError } from '@server/helpers/requests'
 import { HttpStatusCode } from '@shared/core-utils'
 import { PeerTubeProblemDocument } from '@shared/models'
 import { unwrapBody } from '../requests'
@@ -34,8 +33,8 @@ export class LoginCommand extends AbstractCommand {
     }))
   }
 
-  getAccessToken (user?: { username: string, password: string }): Promise<string>
-  getAccessToken (username: string, password: string): Promise<string>
+  getAccessToken (arg1?: { username: string, password: string }): Promise<string>
+  getAccessToken (arg1: string, password: string): Promise<string>
   async getAccessToken (arg1?: { username: string, password: string } | string, password?: string) {
     let user: { username: string, password: string }
 
@@ -48,7 +47,7 @@ export class LoginCommand extends AbstractCommand {
 
       return body.access_token
     } catch (err) {
-      throw new Error('Cannot authenticate. Please check your username/password.')
+      throw new Error(`Cannot authenticate. Please check your username/password. (${err})`)
     }
   }