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()}`
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) {
return accessToken
}
-async function getAccessTokenOrDie (url: string, username: string, password: string) {
- return getAccessToken(url, username, password)
-}
-
interface Settings {
remotes: any[]
default: number
})
}
-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,
buildVideoAttributesFromCommander,
getAdminTokenOrDie,
- getAccessTokenOrDie,
- buildServer
+ buildServer,
+ assignToken
}
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) {
// @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)
registerTSPaths()
import { program } from 'commander'
-import { getAccessToken } from '../../shared/extra-utils'
+import { assignToken, buildServer } from './cli'
program
.option('-u, --url <url>', 'Server url')
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 => {
import { doRequestAndSaveToFile } from '../helpers/requests'
import { CONSTRAINTS_FIELDS } from '../initializers/constants'
import {
+ assignToken,
buildCommonVideoOptions,
buildServer,
buildVideoAttributesFromCommander,
- getAccessTokenOrDie,
getLogger,
getServerCredentials
} from './cli'
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)
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)
}
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'
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
}
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 })
}
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 })
}
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 })
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')
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 })
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')
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')
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')
.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)
})
try {
- await uploadVideo(url, token, videoAttributes)
+ await uploadVideo(url, server.accessToken, videoAttributes)
console.log(`Video ${options.videoName} uploaded.`)
process.exit(0)
} catch (err) {
-import { PeerTubeRequestError } from '@server/helpers/requests'
import { HttpStatusCode } from '@shared/core-utils'
import { PeerTubeProblemDocument } from '@shared/models'
import { unwrapBody } from '../requests'
}))
}
- 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 }
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})`)
}
}