]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/tools/peertube-plugins.ts
Fix video block in abuse table
[github/Chocobozzz/PeerTube.git] / server / tools / peertube-plugins.ts
index d5e024383678d6a0f06091d0c7340adec33b95e0..05b75fab2b3429829bf64a0c99dbae20f31353d4 100644 (file)
@@ -1,14 +1,15 @@
+// eslint-disable @typescript-eslint/no-unnecessary-type-assertion
+
+import { registerTSPaths } from '../helpers/register-ts-paths'
+registerTSPaths()
+
 import * as program from 'commander'
 import { PluginType } from '../../shared/models/plugins/plugin.type'
-import { getAccessToken } from '../../shared/extra-utils/users/login'
-import { getMyUserInformation } from '../../shared/extra-utils/users/users'
-import { installPlugin, listPlugins, uninstallPlugin } from '../../shared/extra-utils/server/plugins'
-import { getServerCredentials } from './cli'
-import { User, UserRole } from '../../shared/models/users'
+import { installPlugin, listPlugins, uninstallPlugin, updatePlugin } from '../../shared/extra-utils/server/plugins'
+import { getAdminTokenOrDie, getServerCredentials } from './cli'
 import { PeerTubePlugin } from '../../shared/models/plugins/peertube-plugin.model'
 import { isAbsolute } from 'path'
-
-const Table = require('cli-table')
+import * as CliTable3 from 'cli-table3'
 
 program
   .name('plugins')
@@ -34,6 +35,16 @@ program
   .option('-n, --npm-name <npmName>', 'Install from npm')
   .action((options) => installPluginCLI(options))
 
+program
+  .command('update')
+  .description('Update a plugin or a theme')
+  .option('-u, --url <url>', 'Server url')
+  .option('-U, --username <username>', 'Username')
+  .option('-p, --password <token>', 'Password')
+  .option('-P --path <path>', 'Update from a path')
+  .option('-n, --npm-name <npmName>', 'Update from npm')
+  .action((options) => updatePluginCLI(options))
+
 program
   .command('uninstall')
   .description('Uninstall a plugin or a theme')
@@ -55,9 +66,9 @@ async function pluginsListCLI () {
   const { url, username, password } = await getServerCredentials(program)
   const accessToken = await getAdminTokenOrDie(url, username, password)
 
-  let type: PluginType
-  if (program['onlyThemes']) type = PluginType.THEME
-  if (program['onlyPlugins']) type = PluginType.PLUGIN
+  let pluginType: PluginType
+  if (program['onlyThemes']) pluginType = PluginType.THEME
+  if (program['onlyPlugins']) pluginType = PluginType.PLUGIN
 
   const res = await listPlugins({
     url,
@@ -65,14 +76,14 @@ async function pluginsListCLI () {
     start: 0,
     count: 100,
     sort: 'name',
-    type
+    pluginType
   })
   const plugins: PeerTubePlugin[] = res.body.data
 
-  const table = new Table({
-    head: ['name', 'version', 'homepage'],
+  const table = new CliTable3({
+    head: [ 'name', 'version', 'homepage' ],
     colWidths: [ 50, 10, 50 ]
-  })
+  }) as any
 
   for (const plugin of plugins) {
     const npmName = plugin.type === PluginType.PLUGIN
@@ -115,48 +126,64 @@ async function installPluginCLI (options: any) {
   } catch (err) {
     console.error('Cannot install plugin.', err)
     process.exit(-1)
-    return
   }
 
   console.log('Plugin installed.')
   process.exit(0)
 }
 
-async function uninstallPluginCLI (options: any) {
-  if (!options['npmName']) {
-    console.error('You need to specify the npm name of the plugin/theme you want to uninstall.\n')
+async function updatePluginCLI (options: any) {
+  if (!options['path'] && !options['npmName']) {
+    console.error('You need to specify the npm name or the path of the plugin you want to update.\n')
     program.outputHelp()
     process.exit(-1)
   }
 
+  if (options['path'] && !isAbsolute(options['path'])) {
+    console.error('Path should be absolute.')
+    process.exit(-1)
+  }
+
   const { url, username, password } = await getServerCredentials(options)
   const accessToken = await getAdminTokenOrDie(url, username, password)
 
   try {
-    await uninstallPlugin({
+    await updatePlugin({
       url,
       accessToken,
-      npmName: options[ 'npmName' ]
+      npmName: options['npmName'],
+      path: options['path']
     })
   } catch (err) {
-    console.error('Cannot uninstall plugin.', err)
+    console.error('Cannot update plugin.', err)
     process.exit(-1)
-    return
   }
 
-  console.log('Plugin uninstalled.')
+  console.log('Plugin updated.')
   process.exit(0)
 }
 
-async function getAdminTokenOrDie (url: string, username: string, password: string) {
-  const accessToken = await getAccessToken(url, username, password)
-  const resMe = await getMyUserInformation(url, accessToken)
-  const me: User = resMe.body
+async function uninstallPluginCLI (options: any) {
+  if (!options['npmName']) {
+    console.error('You need to specify the npm name of the plugin/theme you want to uninstall.\n')
+    program.outputHelp()
+    process.exit(-1)
+  }
+
+  const { url, username, password } = await getServerCredentials(options)
+  const accessToken = await getAdminTokenOrDie(url, username, password)
 
-  if (me.role !== UserRole.ADMINISTRATOR) {
-    console.error('Cannot list plugins if you are not administrator.')
+  try {
+    await uninstallPlugin({
+      url,
+      accessToken,
+      npmName: options['npmName']
+    })
+  } catch (err) {
+    console.error('Cannot uninstall plugin.', err)
     process.exit(-1)
   }
 
-  return accessToken
+  console.log('Plugin uninstalled.')
+  process.exit(0)
 }