]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/tools/peertube-redundancy.ts
Merge branch 'release/4.0.0' into develop
[github/Chocobozzz/PeerTube.git] / server / tools / peertube-redundancy.ts
index 1ab58a438f2cfc55145a811cc9d950b40023983c..7e27ca49e62418896fab143f48e81b26b7215bf3 100644 (file)
@@ -1,16 +1,13 @@
-// eslint-disable @typescript-eslint/no-unnecessary-type-assertion
-
 import { registerTSPaths } from '../helpers/register-ts-paths'
 registerTSPaths()
 
-import * as program from 'commander'
-import { getAdminTokenOrDie, getServerCredentials } from './cli'
-import { VideoRedundanciesTarget, VideoRedundancy } from '@shared/models'
-import { addVideoRedundancy, listVideoRedundancies, removeVideoRedundancy } from '@shared/extra-utils/server/redundancy'
-import validator from 'validator'
-import * as CliTable3 from 'cli-table3'
-import { URL } from 'url'
+import CliTable3 from 'cli-table3'
+import { Command, program } from 'commander'
 import { uniq } from 'lodash'
+import { URL } from 'url'
+import validator from 'validator'
+import { HttpStatusCode, VideoRedundanciesTarget } from '@shared/models'
+import { assignToken, buildServer, getServerCredentials } from './cli'
 
 import bytes = require('bytes')
 
@@ -41,7 +38,7 @@ program
   .option('-U, --username <username>', 'Username')
   .option('-p, --password <token>', 'Password')
   .option('-v, --video <videoId>', 'Video id to duplicate')
-  .action((options) => addRedundancyCLI(options))
+  .action((options, command) => addRedundancyCLI(options, command))
 
 program
   .command('remove')
@@ -50,7 +47,7 @@ program
   .option('-U, --username <username>', 'Username')
   .option('-p, --password <token>', 'Password')
   .option('-v, --video <videoId>', 'Video id to remove from redundancies')
-  .action((options) => removeRedundancyCLI(options))
+  .action((options, command) => removeRedundancyCLI(options, command))
 
 if (!process.argv.slice(2).length) {
   program.outputHelp()
@@ -62,15 +59,16 @@ program.parse(process.argv)
 
 async function listRedundanciesCLI (target: VideoRedundanciesTarget) {
   const { url, username, password } = await getServerCredentials(program)
-  const accessToken = await getAdminTokenOrDie(url, username, password)
+  const server = buildServer(url)
+  await assignToken(server, username, password)
 
-  const redundancies = await listVideoRedundanciesData(url, accessToken, target)
+  const { data } = await server.redundancy.listVideos({ start: 0, count: 100, sort: 'name', target })
 
   const table = new CliTable3({
     head: [ 'video id', 'video name', 'video url', 'files', 'playlists', 'by instances', 'total size' ]
   }) as any
 
-  for (const redundancy of redundancies) {
+  for (const redundancy of data) {
     const webtorrentFiles = redundancy.redundancies.files
     const streamingPlaylists = redundancy.redundancies.streamingPlaylists
 
@@ -103,30 +101,27 @@ async function listRedundanciesCLI (target: VideoRedundanciesTarget) {
   process.exit(0)
 }
 
-async function addRedundancyCLI (options: { videoId: number }) {
-  const { url, username, password } = await getServerCredentials(program)
-  const accessToken = await getAdminTokenOrDie(url, username, password)
+async function addRedundancyCLI (options: { video: number }, command: Command) {
+  const { url, username, password } = await getServerCredentials(command)
+  const server = buildServer(url)
+  await assignToken(server, username, password)
 
-  if (!options['video'] || validator.isInt('' + options['video']) === false) {
+  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')
-    program.outputHelp()
+    command.outputHelp()
     process.exit(-1)
   }
 
   try {
-    await addVideoRedundancy({
-      url,
-      accessToken,
-      videoId: options['video']
-    })
+    await server.redundancy.addVideo({ videoId: options.video })
 
     console.log('Video will be duplicated by your instance!')
 
     process.exit(0)
   } catch (err) {
-    if (err.message.includes(409)) {
+    if (err.message.includes(HttpStatusCode.CONFLICT_409)) {
       console.error('This video is already duplicated by your instance.')
-    } else if (err.message.includes(404)) {
+    } else if (err.message.includes(HttpStatusCode.NOT_FOUND_404)) {
       console.error('This video id does not exist.')
     } else {
       console.error(err)
@@ -136,24 +131,25 @@ async function addRedundancyCLI (options: { videoId: number }) {
   }
 }
 
-async function removeRedundancyCLI (options: { videoId: number }) {
-  const { url, username, password } = await getServerCredentials(program)
-  const accessToken = await getAdminTokenOrDie(url, username, password)
+async function removeRedundancyCLI (options: { video: number }, command: Command) {
+  const { url, username, password } = await getServerCredentials(command)
+  const server = buildServer(url)
+  await assignToken(server, username, password)
 
-  if (!options['video'] || validator.isInt('' + options['video']) === false) {
+  if (!options.video || validator.isInt('' + options.video) === false) {
     console.error('You need to specify the video id to remove from your redundancies.\n')
-    program.outputHelp()
+    command.outputHelp()
     process.exit(-1)
   }
 
-  const videoId = parseInt(options['video'] + '', 10)
+  const videoId = parseInt(options.video + '', 10)
 
-  let redundancies = await listVideoRedundanciesData(url, accessToken, 'my-videos')
-  let videoRedundancy = redundancies.find(r => videoId === r.id)
+  const myVideoRedundancies = await server.redundancy.listVideos({ target: 'my-videos' })
+  let videoRedundancy = myVideoRedundancies.data.find(r => videoId === r.id)
 
   if (!videoRedundancy) {
-    redundancies = await listVideoRedundanciesData(url, accessToken, 'remote-videos')
-    videoRedundancy = redundancies.find(r => videoId === r.id)
+    const remoteVideoRedundancies = await server.redundancy.listVideos({ target: 'remote-videos' })
+    videoRedundancy = remoteVideoRedundancies.data.find(r => videoId === r.id)
   }
 
   if (!videoRedundancy) {
@@ -167,11 +163,7 @@ async function removeRedundancyCLI (options: { videoId: number }) {
                                .map(r => r.id)
 
     for (const id of ids) {
-      await removeVideoRedundancy({
-        url,
-        accessToken,
-        redundancyId: id
-      })
+      await server.redundancy.removeVideo({ redundancyId: id })
     }
 
     console.log('Video redundancy removed!')
@@ -182,16 +174,3 @@ async function removeRedundancyCLI (options: { videoId: number }) {
     process.exit(-1)
   }
 }
-
-async function listVideoRedundanciesData (url: string, accessToken: string, target: VideoRedundanciesTarget) {
-  const res = await listVideoRedundancies({
-    url,
-    accessToken,
-    start: 0,
-    count: 100,
-    sort: 'name',
-    target
-  })
-
-  return res.body.data as VideoRedundancy[]
-}