Add SQL query support in plugins

pull/2615/head
Chocobozzz 2020-04-09 11:00:30 +02:00
parent bc0d801bb7
commit 1b05d82d86
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
10 changed files with 110 additions and 9 deletions

View File

@ -40,7 +40,7 @@ const logger = winston.createLogger({
stderrLevels: [],
format: winston.format.combine(
winston.format.splat(),
labelFormatter,
labelFormatter(),
winston.format.colorize(),
loggerFormat
)

View File

@ -36,7 +36,7 @@ const auditLogger = winston.createLogger({
maxFiles: 5,
format: winston.format.combine(
winston.format.timestamp(),
labelFormatter,
labelFormatter(),
winston.format.splat(),
jsonLoggerFormat
)

View File

@ -1,11 +1,15 @@
import { PluginModel } from '@server/models/server/plugin'
import { PeerTubeHelpers } from '@server/typings/plugins'
import { sequelizeTypescript } from '@server/initializers/database'
import { buildLogger } from '@server/helpers/logger'
function buildPluginHelpers (npmName: string, plugin: PluginModel): PeerTubeHelpers {
const logger = buildLogger(npmName)
function buildPluginHelpers (npmName: string): PeerTubeHelpers {
const logger = buildPluginLogger(npmName)
const database = buildDatabaseHelpers()
return {
logger
logger,
database
}
}
@ -15,6 +19,12 @@ export {
// ---------------------------------------------------------------------------
function buildLogger (npmName: string) {
function buildPluginLogger (npmName: string) {
return buildLogger(npmName)
}
function buildDatabaseHelpers () {
return {
query: sequelizeTypescript.query.bind(sequelizeTypescript)
}
}

View File

@ -35,7 +35,7 @@ function buildRegisterHelpers (npmName: string, plugin: PluginModel): Omit<Regis
const videoCategoryManager = buildVideoCategoryManager(npmName)
const videoLicenceManager = buildVideoLicenceManager(npmName)
const peertubeHelpers = buildPluginHelpers(npmName, plugin)
const peertubeHelpers = buildPluginHelpers(npmName)
return {
settingsManager,

View File

@ -0,0 +1,27 @@
async function register ({
peertubeHelpers
}) {
peertubeHelpers.logger.info('Hello world from plugin four')
const username = 'root'
const results = await peertubeHelpers.database.query(
'SELECT "email" from "user" WHERE "username" = $username',
{
type: 'SELECT',
bind: { username }
}
)
peertubeHelpers.logger.info('root email is ' + results[0]['email'])
}
async function unregister () {
return
}
module.exports = {
register,
unregister
}
// ###########################################################################

View File

@ -0,0 +1,20 @@
{
"name": "peertube-plugin-test-four",
"version": "0.0.1",
"description": "Plugin test 4",
"engine": {
"peertube": ">=1.3.0"
},
"keywords": [
"peertube",
"plugin"
],
"homepage": "https://github.com/Chocobozzz/PeerTube",
"author": "Chocobozzz",
"bugs": "https://github.com/Chocobozzz/PeerTube/issues",
"library": "./main.js",
"staticDirs": {},
"css": [],
"clientScripts": [],
"translations": {}
}

View File

@ -2,3 +2,4 @@ import './action-hooks'
import './filter-hooks'
import './translations'
import './video-constants'
import './plugin-helpers'

View File

@ -0,0 +1,38 @@
/* eslint-disable @typescript-eslint/no-unused-expressions,@typescript-eslint/require-await */
import * as chai from 'chai'
import 'mocha'
import { cleanupTests, flushAndRunServer, ServerInfo, waitUntilLog } from '../../../shared/extra-utils/server/servers'
import { getPluginTestPath, installPlugin, setAccessTokensToServers } from '../../../shared/extra-utils'
const expect = chai.expect
describe('Test plugin helpers', function () {
let server: ServerInfo
before(async function () {
this.timeout(30000)
server = await flushAndRunServer(1)
await setAccessTokensToServers([ server ])
await installPlugin({
url: server.url,
accessToken: server.accessToken,
path: getPluginTestPath('-four')
})
})
it('Should have logged things', async function () {
await waitUntilLog(server, 'localhost:' + server.port + ' peertube-plugin-test-four', 1, false)
await waitUntilLog(server, 'Hello world from plugin four', 1)
})
it('Should have made a query', async function () {
await waitUntilLog(server, `root email is admin${server.internalServerNumber}@example.com`, 1)
})
after(async function () {
await cleanupTests([ server ])
})
})

View File

@ -9,6 +9,10 @@ import { Logger } from 'winston'
export type PeerTubeHelpers = {
logger: Logger
database: {
query: Function
}
}
export type RegisterServerOptions = {

View File

@ -285,7 +285,7 @@ function cleanupTests (servers: ServerInfo[]) {
return Promise.all(p)
}
async function waitUntilLog (server: ServerInfo, str: string, count = 1) {
async function waitUntilLog (server: ServerInfo, str: string, count = 1, strictCount = true) {
const logfile = join(root(), 'test' + server.internalServerNumber, 'logs/peertube.log')
while (true) {
@ -293,6 +293,7 @@ async function waitUntilLog (server: ServerInfo, str: string, count = 1) {
const matches = buf.toString().match(new RegExp(str, 'g'))
if (matches && matches.length === count) return
if (matches && strictCount === false && matches.length >= count) return
await wait(1000)
}