Convert real world tools to typescript
This commit is contained in:
parent
fdbda9e3d6
commit
8df87ce792
|
@ -1,2 +1,3 @@
|
||||||
// Order of the tests we want to execute
|
// Order of the tests we want to execute
|
||||||
import './reset-password'
|
import './reset-password'
|
||||||
|
import './update-host'
|
||||||
|
|
|
@ -1,45 +0,0 @@
|
||||||
'use strict'
|
|
||||||
|
|
||||||
const program = require('commander')
|
|
||||||
|
|
||||||
const utilsClient = require('../../utils/clients')
|
|
||||||
const utilsLogin = require('../../utils/login')
|
|
||||||
|
|
||||||
program
|
|
||||||
.option('-u, --url <url>', 'Server url')
|
|
||||||
.option('-n, --username <username>', 'Username')
|
|
||||||
.option('-p, --password <token>', 'Password')
|
|
||||||
.parse(process.argv)
|
|
||||||
|
|
||||||
if (
|
|
||||||
!program.url ||
|
|
||||||
!program.username ||
|
|
||||||
!program.password
|
|
||||||
) {
|
|
||||||
throw new Error('All arguments are required.')
|
|
||||||
}
|
|
||||||
|
|
||||||
const server = {
|
|
||||||
url: program.url,
|
|
||||||
user: {
|
|
||||||
username: program.username,
|
|
||||||
password: program.password
|
|
||||||
},
|
|
||||||
client: {
|
|
||||||
id: null,
|
|
||||||
secret: null
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
utilsClient.getClient(program.url, function (err, res) {
|
|
||||||
if (err) throw err
|
|
||||||
|
|
||||||
server.client.id = res.body.client_id
|
|
||||||
server.client.secret = res.body.client_secret
|
|
||||||
|
|
||||||
utilsLogin.loginAndGetAccessToken(server, function (err, accessToken) {
|
|
||||||
if (err) throw err
|
|
||||||
|
|
||||||
console.log(accessToken)
|
|
||||||
})
|
|
||||||
})
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
import * as program from 'commander'
|
||||||
|
import * as Promise from 'bluebird'
|
||||||
|
|
||||||
|
import {
|
||||||
|
getClient,
|
||||||
|
loginAndGetAccessToken
|
||||||
|
} from '../../utils'
|
||||||
|
|
||||||
|
program
|
||||||
|
.option('-u, --url <url>', 'Server url')
|
||||||
|
.option('-n, --username <username>', 'Username')
|
||||||
|
.option('-p, --password <token>', 'Password')
|
||||||
|
.parse(process.argv)
|
||||||
|
|
||||||
|
if (
|
||||||
|
!program['url'] ||
|
||||||
|
!program['username'] ||
|
||||||
|
!program['password']
|
||||||
|
) {
|
||||||
|
throw new Error('All arguments are required.')
|
||||||
|
}
|
||||||
|
|
||||||
|
const server = {
|
||||||
|
url: program['url'],
|
||||||
|
user: {
|
||||||
|
username: program['username'],
|
||||||
|
password: program['password']
|
||||||
|
},
|
||||||
|
client: {
|
||||||
|
id: null,
|
||||||
|
secret: null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
getClient(program.url)
|
||||||
|
.then(res => {
|
||||||
|
server.client.id = res.body.client_id
|
||||||
|
server.client.secret = res.body.client_secret
|
||||||
|
|
||||||
|
return loginAndGetAccessToken(server)
|
||||||
|
})
|
||||||
|
.then(accessToken => {
|
||||||
|
console.log(accessToken)
|
||||||
|
process.exit(0)
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.error(err)
|
||||||
|
process.exit(-1)
|
||||||
|
})
|
|
@ -1,67 +0,0 @@
|
||||||
'use strict'
|
|
||||||
|
|
||||||
const program = require('commander')
|
|
||||||
const eachSeries = require('async/eachSeries')
|
|
||||||
const exec = require('child_process').exec
|
|
||||||
const fs = require('fs')
|
|
||||||
const path = require('path')
|
|
||||||
|
|
||||||
program
|
|
||||||
.option('-u, --url <url>', 'Server url')
|
|
||||||
.option('-n, --username <username>', 'Username')
|
|
||||||
.option('-p, --password <token>', 'Password')
|
|
||||||
.option('-i, --directory <directory>', 'Videos directory absolute path')
|
|
||||||
.option('-d, --description <description>', 'Video description')
|
|
||||||
.option('-t, --tags <tags>', 'Video tags', list)
|
|
||||||
.parse(process.argv)
|
|
||||||
|
|
||||||
if (
|
|
||||||
!program.url ||
|
|
||||||
!program.username ||
|
|
||||||
!program.password ||
|
|
||||||
!program.directory ||
|
|
||||||
!program.description ||
|
|
||||||
!program.tags
|
|
||||||
) {
|
|
||||||
throw new Error('All arguments are required.')
|
|
||||||
}
|
|
||||||
|
|
||||||
exec('node ./get-access-token -u "' + program.url + '" -n "' + program.username + '" -p "' + program.password + '"', function (err, stdout) {
|
|
||||||
if (err) throw err
|
|
||||||
|
|
||||||
const accessToken = stdout.replace('\n', '')
|
|
||||||
|
|
||||||
fs.readdir(program.directory, function (err, files) {
|
|
||||||
if (err) throw err
|
|
||||||
|
|
||||||
eachSeries(files, function (file, callbackEach) {
|
|
||||||
const video = {
|
|
||||||
tags: program.tags,
|
|
||||||
name: file,
|
|
||||||
description: program.description
|
|
||||||
}
|
|
||||||
|
|
||||||
let command = 'node ./upload'
|
|
||||||
command += ' -u "' + program.url + '"'
|
|
||||||
command += ' -a "' + accessToken + '"'
|
|
||||||
command += ' -n "' + video.name + '"'
|
|
||||||
command += ' -d "' + video.description + '"'
|
|
||||||
command += ' -t "' + video.tags.join(',') + '"'
|
|
||||||
command += ' -f "' + path.join(program.directory, file) + '"'
|
|
||||||
|
|
||||||
exec(command, function (err, stdout) {
|
|
||||||
if (err) console.log(err)
|
|
||||||
|
|
||||||
console.log(stdout)
|
|
||||||
|
|
||||||
return callbackEach()
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function list (val) {
|
|
||||||
return val.split(',')
|
|
||||||
}
|
|
|
@ -0,0 +1,83 @@
|
||||||
|
import * as program from 'commander'
|
||||||
|
import * as Promise from 'bluebird'
|
||||||
|
import { isAbsolute } from 'path'
|
||||||
|
import { join } from 'path'
|
||||||
|
|
||||||
|
import { readdirPromise } from '../../../helpers/core-utils'
|
||||||
|
import { execCLI } from '../../utils'
|
||||||
|
|
||||||
|
program
|
||||||
|
.option('-u, --url <url>', 'Server url')
|
||||||
|
.option('-U, --username <username>', 'Username')
|
||||||
|
.option('-p, --password <token>', 'Password')
|
||||||
|
.option('-i, --input <directory>', 'Videos directory absolute path')
|
||||||
|
.option('-d, --description <description>', 'Video descriptions')
|
||||||
|
.option('-c, --category <category>', 'Video categories')
|
||||||
|
.option('-l, --licence <licence>', 'Video licences')
|
||||||
|
.option('-t, --tags <tags>', 'Video tags', list)
|
||||||
|
.parse(process.argv)
|
||||||
|
|
||||||
|
if (
|
||||||
|
!program['url'] ||
|
||||||
|
!program['username'] ||
|
||||||
|
!program['password'] ||
|
||||||
|
!program['input'] ||
|
||||||
|
!program['description'] ||
|
||||||
|
!program['category'] ||
|
||||||
|
!program['licence'] ||
|
||||||
|
!program['tags']
|
||||||
|
) {
|
||||||
|
throw new Error('All arguments are required.')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isAbsolute(program['input']) === false) {
|
||||||
|
throw new Error('Input path should be absolute.')
|
||||||
|
}
|
||||||
|
|
||||||
|
let command = `npm run ts-node -- ${__dirname}/get-access-token.ts`
|
||||||
|
command += ` -u "${program['url']}"`
|
||||||
|
command += ` -n "${program['username']}"`
|
||||||
|
command += ` -p "${program['password']}"`
|
||||||
|
|
||||||
|
execCLI(command)
|
||||||
|
.then(stdout => {
|
||||||
|
const accessToken = stdout.replace('\n', '')
|
||||||
|
|
||||||
|
console.log(accessToken)
|
||||||
|
|
||||||
|
return readdirPromise(program['input']).then(files => ({ accessToken, files }))
|
||||||
|
})
|
||||||
|
.then(({ accessToken, files }) => {
|
||||||
|
return Promise.each(files, file => {
|
||||||
|
const video = {
|
||||||
|
tags: program['tags'],
|
||||||
|
name: file,
|
||||||
|
description: program['description'],
|
||||||
|
category: program['category'],
|
||||||
|
licence: program['licence']
|
||||||
|
}
|
||||||
|
|
||||||
|
let command = `npm run ts-node -- ${__dirname}/upload.ts`
|
||||||
|
command += ` -u "${program['url']}"`
|
||||||
|
command += ` -a "${accessToken}"`
|
||||||
|
command += ` -n "${video.name}"`
|
||||||
|
command += ` -d "${video.description}"`
|
||||||
|
command += ` -c "${video.category}"`
|
||||||
|
command += ` -l "${video.licence}"`
|
||||||
|
command += ` -t "${video.tags.join(',')}"`
|
||||||
|
command += ` -f "${join(program['input'], file)}"`
|
||||||
|
|
||||||
|
return execCLI(command).then(stdout => console.log(stdout))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.then(() => process.exit(0))
|
||||||
|
.catch(err => {
|
||||||
|
console.error(err)
|
||||||
|
process.exit(-1)
|
||||||
|
})
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function list (val) {
|
||||||
|
return val.split(',')
|
||||||
|
}
|
|
@ -1,79 +0,0 @@
|
||||||
'use strict'
|
|
||||||
|
|
||||||
const program = require('commander')
|
|
||||||
const fs = require('fs')
|
|
||||||
|
|
||||||
const utils = require('../../utils/videos')
|
|
||||||
|
|
||||||
program
|
|
||||||
.option('-u, --url <url>', 'Server url')
|
|
||||||
.option('-a, --access-token <token>', 'Access token')
|
|
||||||
.option('-n, --name <name>', 'Video name')
|
|
||||||
.option('-x, --nsfw', 'Video is Not Safe For Work')
|
|
||||||
.option('-c, --category <category number>', 'Category number')
|
|
||||||
.option('-l, --licence <licence number>', 'Licence number')
|
|
||||||
.option('-g, --language <language number>', 'Language number')
|
|
||||||
.option('-d, --description <description>', 'Video description')
|
|
||||||
.option('-t, --tags <tags>', 'Video tags', list)
|
|
||||||
.option('-f, --file <file>', 'Video absolute file path')
|
|
||||||
.parse(process.argv)
|
|
||||||
|
|
||||||
if (
|
|
||||||
!program.url ||
|
|
||||||
!program.accessToken ||
|
|
||||||
!program.name ||
|
|
||||||
!program.category ||
|
|
||||||
!program.licence ||
|
|
||||||
!program.language ||
|
|
||||||
!program.nsfw ||
|
|
||||||
!program.description ||
|
|
||||||
!program.tags ||
|
|
||||||
!Array.isArray(program.tags) ||
|
|
||||||
program.tags.length === 0 ||
|
|
||||||
!program.file
|
|
||||||
) {
|
|
||||||
throw new Error('All arguments are required.')
|
|
||||||
}
|
|
||||||
|
|
||||||
fs.access(program.file, fs.F_OK, function (err) {
|
|
||||||
if (err) throw err
|
|
||||||
|
|
||||||
upload(
|
|
||||||
program.url,
|
|
||||||
program.accessToken,
|
|
||||||
program.name,
|
|
||||||
program.category,
|
|
||||||
program.licence,
|
|
||||||
program.language,
|
|
||||||
program.nsfw,
|
|
||||||
program.description,
|
|
||||||
program.tags,
|
|
||||||
program.file
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
function list (val) {
|
|
||||||
return val.split(',')
|
|
||||||
}
|
|
||||||
|
|
||||||
function upload (url, accessToken, name, category, licence, language, nsfw, description, tags, fixture) {
|
|
||||||
console.log('Uploading %s video...', program.name)
|
|
||||||
|
|
||||||
const videoAttributes = {
|
|
||||||
name,
|
|
||||||
category,
|
|
||||||
licence,
|
|
||||||
language,
|
|
||||||
nsfw,
|
|
||||||
description,
|
|
||||||
tags,
|
|
||||||
fixture
|
|
||||||
}
|
|
||||||
utils.uploadVideo(url, accessToken, videoAttributes, function (err) {
|
|
||||||
if (err) throw err
|
|
||||||
|
|
||||||
console.log('Video uploaded.')
|
|
||||||
})
|
|
||||||
}
|
|
|
@ -0,0 +1,85 @@
|
||||||
|
import * as program from 'commander'
|
||||||
|
import { access, constants } from 'fs'
|
||||||
|
import { isAbsolute } from 'path'
|
||||||
|
import { promisify } from 'util'
|
||||||
|
|
||||||
|
const accessPromise = promisify(access)
|
||||||
|
|
||||||
|
import { uploadVideo } from '../../utils'
|
||||||
|
|
||||||
|
program
|
||||||
|
.option('-u, --url <url>', 'Server url')
|
||||||
|
.option('-a, --access-token <token>', 'Access token')
|
||||||
|
.option('-n, --name <name>', 'Video name')
|
||||||
|
.option('-N, --nsfw', 'Video is Not Safe For Work')
|
||||||
|
.option('-c, --category <category number>', 'Category number')
|
||||||
|
.option('-l, --licence <licence number>', 'Licence number')
|
||||||
|
.option('-L, --language <language number>', 'Language number')
|
||||||
|
.option('-d, --description <description>', 'Video description')
|
||||||
|
.option('-t, --tags <tags>', 'Video tags', list)
|
||||||
|
.option('-f, --file <file>', 'Video absolute file path')
|
||||||
|
.parse(process.argv)
|
||||||
|
|
||||||
|
if (!program['tags']) program['tags'] = []
|
||||||
|
if (!program['nsfw']) program['nsfw'] = false
|
||||||
|
|
||||||
|
if (
|
||||||
|
!program['url'] ||
|
||||||
|
!program['accessToken'] ||
|
||||||
|
!program['name'] ||
|
||||||
|
!program['category'] ||
|
||||||
|
!program['licence'] ||
|
||||||
|
!program['description'] ||
|
||||||
|
!program['file']
|
||||||
|
) {
|
||||||
|
throw new Error('All arguments but tags, language and nsfw are required.')
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isAbsolute(program['file']) === false) {
|
||||||
|
throw new Error('File path should be absolute.')
|
||||||
|
}
|
||||||
|
|
||||||
|
accessPromise(program['file'], constants.F_OK)
|
||||||
|
.then(() => {
|
||||||
|
return upload(
|
||||||
|
program['url'],
|
||||||
|
program['accessToken'],
|
||||||
|
program['name'],
|
||||||
|
program['category'],
|
||||||
|
program['licence'],
|
||||||
|
program['language'],
|
||||||
|
program['nsfw'],
|
||||||
|
program['description'],
|
||||||
|
program['tags'],
|
||||||
|
program['file']
|
||||||
|
)
|
||||||
|
})
|
||||||
|
.then(() => process.exit(0))
|
||||||
|
.catch(err => {
|
||||||
|
console.error(err)
|
||||||
|
process.exit(-1)
|
||||||
|
})
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
function list (val) {
|
||||||
|
return val.split(',')
|
||||||
|
}
|
||||||
|
|
||||||
|
function upload (url, accessToken, name, category, licence, language, nsfw, description, tags, fixture) {
|
||||||
|
console.log('Uploading %s video...', program['name'])
|
||||||
|
|
||||||
|
const videoAttributes = {
|
||||||
|
name,
|
||||||
|
category,
|
||||||
|
licence,
|
||||||
|
language,
|
||||||
|
nsfw,
|
||||||
|
description,
|
||||||
|
tags,
|
||||||
|
fixture
|
||||||
|
}
|
||||||
|
return uploadVideo(url, accessToken, videoAttributes).then(() => {
|
||||||
|
console.log(`Video ${name} uploaded.`)
|
||||||
|
})
|
||||||
|
}
|
|
@ -7,7 +7,7 @@ function getEnvCli (server?: ServerInfo) {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function execCLI (command: string) {
|
async function execCLI (command: string) {
|
||||||
return new Promise((res, rej) => {
|
return new Promise<string>((res, rej) => {
|
||||||
exec(command, (err, stdout, stderr) => {
|
exec(command, (err, stdout, stderr) => {
|
||||||
if (err) return rej(err)
|
if (err) return rej(err)
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import * as request from 'supertest'
|
import * as request from 'supertest'
|
||||||
|
|
||||||
function getClient (url: string) {
|
function getClient (url: string) {
|
||||||
const path = '/api/v1/clients/local'
|
const path = '/api/v1/oauth-clients/local'
|
||||||
|
|
||||||
return request(url)
|
return request(url)
|
||||||
.get(path)
|
.get(path)
|
||||||
|
|
|
@ -185,10 +185,13 @@ function uploadVideo (url: string, accessToken: string, videoAttributesArg: Vide
|
||||||
.field('name', attributes.name)
|
.field('name', attributes.name)
|
||||||
.field('category', attributes.category.toString())
|
.field('category', attributes.category.toString())
|
||||||
.field('licence', attributes.licence.toString())
|
.field('licence', attributes.licence.toString())
|
||||||
.field('language', attributes.language.toString())
|
|
||||||
.field('nsfw', JSON.stringify(attributes.nsfw))
|
.field('nsfw', JSON.stringify(attributes.nsfw))
|
||||||
.field('description', attributes.description)
|
.field('description', attributes.description)
|
||||||
|
|
||||||
|
if (attributes.language !== undefined) {
|
||||||
|
req.field('language', attributes.language.toString())
|
||||||
|
}
|
||||||
|
|
||||||
for (let i = 0; i < attributes.tags.length; i++) {
|
for (let i = 0; i < attributes.tags.length; i++) {
|
||||||
req.field('tags[' + i + ']', attributes.tags[i])
|
req.field('tags[' + i + ']', attributes.tags[i])
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue