diff options
Diffstat (limited to 'server/tools/cli.ts')
-rw-r--r-- | server/tools/cli.ts | 62 |
1 files changed, 40 insertions, 22 deletions
diff --git a/server/tools/cli.ts b/server/tools/cli.ts index 58e2445ac..d1a631b69 100644 --- a/server/tools/cli.ts +++ b/server/tools/cli.ts | |||
@@ -6,6 +6,9 @@ import { getVideoChannel } from '../../shared/extra-utils/videos/video-channels' | |||
6 | import { Command } from 'commander' | 6 | import { Command } from 'commander' |
7 | import { VideoChannel, VideoPrivacy } from '../../shared/models/videos' | 7 | import { VideoChannel, VideoPrivacy } from '../../shared/models/videos' |
8 | import { createLogger, format, transports } from 'winston' | 8 | import { createLogger, format, transports } from 'winston' |
9 | import { getMyUserInformation } from '@shared/extra-utils/users/users' | ||
10 | import { User, UserRole } from '@shared/models' | ||
11 | import { getAccessToken } from '@shared/extra-utils/users/login' | ||
9 | 12 | ||
10 | let configName = 'PeerTube/CLI' | 13 | let configName = 'PeerTube/CLI' |
11 | if (isTestInstance()) configName += `-${getAppNumber()}` | 14 | if (isTestInstance()) configName += `-${getAppNumber()}` |
@@ -14,8 +17,21 @@ const config = require('application-config')(configName) | |||
14 | 17 | ||
15 | const version = require('../../../package.json').version | 18 | const version = require('../../../package.json').version |
16 | 19 | ||
20 | async function getAdminTokenOrDie (url: string, username: string, password: string) { | ||
21 | const accessToken = await getAccessToken(url, username, password) | ||
22 | const resMe = await getMyUserInformation(url, accessToken) | ||
23 | const me: User = resMe.body | ||
24 | |||
25 | if (me.role !== UserRole.ADMINISTRATOR) { | ||
26 | console.error('You must be an administrator.') | ||
27 | process.exit(-1) | ||
28 | } | ||
29 | |||
30 | return accessToken | ||
31 | } | ||
32 | |||
17 | interface Settings { | 33 | interface Settings { |
18 | remotes: any[], | 34 | remotes: any[] |
19 | default: number | 35 | default: number |
20 | } | 36 | } |
21 | 37 | ||
@@ -74,9 +90,9 @@ function getRemoteObjectOrDie ( | |||
74 | if (!program['url'] || !program['username'] || !program['password']) { | 90 | if (!program['url'] || !program['username'] || !program['password']) { |
75 | // No remote and we don't have program parameters: quit | 91 | // No remote and we don't have program parameters: quit |
76 | if (settings.remotes.length === 0 || Object.keys(netrc.machines).length === 0) { | 92 | if (settings.remotes.length === 0 || Object.keys(netrc.machines).length === 0) { |
77 | if (!program[ 'url' ]) console.error('--url field is required.') | 93 | if (!program['url']) console.error('--url field is required.') |
78 | if (!program[ 'username' ]) console.error('--username field is required.') | 94 | if (!program['username']) console.error('--username field is required.') |
79 | if (!program[ 'password' ]) console.error('--password field is required.') | 95 | if (!program['password']) console.error('--password field is required.') |
80 | 96 | ||
81 | return process.exit(-1) | 97 | return process.exit(-1) |
82 | } | 98 | } |
@@ -96,9 +112,9 @@ function getRemoteObjectOrDie ( | |||
96 | } | 112 | } |
97 | 113 | ||
98 | return { | 114 | return { |
99 | url: program[ 'url' ], | 115 | url: program['url'], |
100 | username: program[ 'username' ], | 116 | username: program['username'], |
101 | password: program[ 'password' ] | 117 | password: program['password'] |
102 | } | 118 | } |
103 | } | 119 | } |
104 | 120 | ||
@@ -134,8 +150,8 @@ async function buildVideoAttributesFromCommander (url: string, command: Command, | |||
134 | const booleanAttributes: { [id in keyof typeof defaultBooleanAttributes]: boolean } | {} = {} | 150 | const booleanAttributes: { [id in keyof typeof defaultBooleanAttributes]: boolean } | {} = {} |
135 | 151 | ||
136 | for (const key of Object.keys(defaultBooleanAttributes)) { | 152 | for (const key of Object.keys(defaultBooleanAttributes)) { |
137 | if (command[ key ] !== undefined) { | 153 | if (command[key] !== undefined) { |
138 | booleanAttributes[key] = command[ key ] | 154 | booleanAttributes[key] = command[key] |
139 | } else if (defaultAttributes[key] !== undefined) { | 155 | } else if (defaultAttributes[key] !== undefined) { |
140 | booleanAttributes[key] = defaultAttributes[key] | 156 | booleanAttributes[key] = defaultAttributes[key] |
141 | } else { | 157 | } else { |
@@ -144,19 +160,19 @@ async function buildVideoAttributesFromCommander (url: string, command: Command, | |||
144 | } | 160 | } |
145 | 161 | ||
146 | const videoAttributes = { | 162 | const videoAttributes = { |
147 | name: command[ 'videoName' ] || defaultAttributes.name, | 163 | name: command['videoName'] || defaultAttributes.name, |
148 | category: command[ 'category' ] || defaultAttributes.category || undefined, | 164 | category: command['category'] || defaultAttributes.category || undefined, |
149 | licence: command[ 'licence' ] || defaultAttributes.licence || undefined, | 165 | licence: command['licence'] || defaultAttributes.licence || undefined, |
150 | language: command[ 'language' ] || defaultAttributes.language || undefined, | 166 | language: command['language'] || defaultAttributes.language || undefined, |
151 | privacy: command[ 'privacy' ] || defaultAttributes.privacy || VideoPrivacy.PUBLIC, | 167 | privacy: command['privacy'] || defaultAttributes.privacy || VideoPrivacy.PUBLIC, |
152 | support: command[ 'support' ] || defaultAttributes.support || undefined, | 168 | support: command['support'] || defaultAttributes.support || undefined, |
153 | description: command[ 'videoDescription' ] || defaultAttributes.description || undefined, | 169 | description: command['videoDescription'] || defaultAttributes.description || undefined, |
154 | tags: command[ 'tags' ] || defaultAttributes.tags || undefined | 170 | tags: command['tags'] || defaultAttributes.tags || undefined |
155 | } | 171 | } |
156 | 172 | ||
157 | Object.assign(videoAttributes, booleanAttributes) | 173 | Object.assign(videoAttributes, booleanAttributes) |
158 | 174 | ||
159 | if (command[ 'channelName' ]) { | 175 | if (command['channelName']) { |
160 | const res = await getVideoChannel(url, command['channelName']) | 176 | const res = await getVideoChannel(url, command['channelName']) |
161 | const videoChannel: VideoChannel = res.body | 177 | const videoChannel: VideoChannel = res.body |
162 | 178 | ||
@@ -172,9 +188,9 @@ async function buildVideoAttributesFromCommander (url: string, command: Command, | |||
172 | 188 | ||
173 | function getServerCredentials (program: any) { | 189 | function getServerCredentials (program: any) { |
174 | return Promise.all([ getSettings(), getNetrc() ]) | 190 | return Promise.all([ getSettings(), getNetrc() ]) |
175 | .then(([ settings, netrc ]) => { | 191 | .then(([ settings, netrc ]) => { |
176 | return getRemoteObjectOrDie(program, settings, netrc) | 192 | return getRemoteObjectOrDie(program, settings, netrc) |
177 | }) | 193 | }) |
178 | } | 194 | } |
179 | 195 | ||
180 | function getLogger (logLevel = 'info') { | 196 | function getLogger (logLevel = 'info') { |
@@ -222,5 +238,7 @@ export { | |||
222 | getServerCredentials, | 238 | getServerCredentials, |
223 | 239 | ||
224 | buildCommonVideoOptions, | 240 | buildCommonVideoOptions, |
225 | buildVideoAttributesFromCommander | 241 | buildVideoAttributesFromCommander, |
242 | |||
243 | getAdminTokenOrDie | ||
226 | } | 244 | } |