]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - server/tools/peertube-plugins.ts
Fix duplicate HLS resolution in master playlist
[github/Chocobozzz/PeerTube.git] / server / tools / peertube-plugins.ts
index d5e024383678d6a0f06091d0c7340adec33b95e0..e40606107249e5b7ab8ea81be2dd14c5b9cfbd4e 100644 (file)
@@ -1,8 +1,11 @@
+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 { installPlugin, listPlugins, uninstallPlugin, updatePlugin } from '../../shared/extra-utils/server/plugins'
 import { getServerCredentials } from './cli'
 import { User, UserRole } from '../../shared/models/users'
 import { PeerTubePlugin } from '../../shared/models/plugins/peertube-plugin.model'
@@ -34,6 +37,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 +68,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,7 +78,7 @@ async function pluginsListCLI () {
     start: 0,
     count: 100,
     sort: 'name',
-    type
+    pluginType
   })
   const plugins: PeerTubePlugin[] = res.body.data
 
@@ -122,6 +135,38 @@ async function installPluginCLI (options: any) {
   process.exit(0)
 }
 
+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 updatePlugin({
+      url,
+      accessToken,
+      npmName: options['npmName'],
+      path: options['path']
+    })
+  } catch (err) {
+    console.error('Cannot update plugin.', err)
+    process.exit(-1)
+    return
+  }
+
+  console.log('Plugin updated.')
+  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')