mirror of https://github.com/Chocobozzz/PeerTube
Add SQL query support in plugins
parent
bc0d801bb7
commit
1b05d82d86
|
@ -40,7 +40,7 @@ const logger = winston.createLogger({
|
||||||
stderrLevels: [],
|
stderrLevels: [],
|
||||||
format: winston.format.combine(
|
format: winston.format.combine(
|
||||||
winston.format.splat(),
|
winston.format.splat(),
|
||||||
labelFormatter,
|
labelFormatter(),
|
||||||
winston.format.colorize(),
|
winston.format.colorize(),
|
||||||
loggerFormat
|
loggerFormat
|
||||||
)
|
)
|
||||||
|
|
|
@ -36,7 +36,7 @@ const auditLogger = winston.createLogger({
|
||||||
maxFiles: 5,
|
maxFiles: 5,
|
||||||
format: winston.format.combine(
|
format: winston.format.combine(
|
||||||
winston.format.timestamp(),
|
winston.format.timestamp(),
|
||||||
labelFormatter,
|
labelFormatter(),
|
||||||
winston.format.splat(),
|
winston.format.splat(),
|
||||||
jsonLoggerFormat
|
jsonLoggerFormat
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
import { PluginModel } from '@server/models/server/plugin'
|
|
||||||
import { PeerTubeHelpers } from '@server/typings/plugins'
|
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 {
|
function buildPluginHelpers (npmName: string): PeerTubeHelpers {
|
||||||
const logger = buildLogger(npmName)
|
const logger = buildPluginLogger(npmName)
|
||||||
|
|
||||||
|
const database = buildDatabaseHelpers()
|
||||||
|
|
||||||
return {
|
return {
|
||||||
logger
|
logger,
|
||||||
|
database
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,6 +19,12 @@ export {
|
||||||
|
|
||||||
// ---------------------------------------------------------------------------
|
// ---------------------------------------------------------------------------
|
||||||
|
|
||||||
function buildLogger (npmName: string) {
|
function buildPluginLogger (npmName: string) {
|
||||||
return buildLogger(npmName)
|
return buildLogger(npmName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function buildDatabaseHelpers () {
|
||||||
|
return {
|
||||||
|
query: sequelizeTypescript.query.bind(sequelizeTypescript)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ function buildRegisterHelpers (npmName: string, plugin: PluginModel): Omit<Regis
|
||||||
const videoCategoryManager = buildVideoCategoryManager(npmName)
|
const videoCategoryManager = buildVideoCategoryManager(npmName)
|
||||||
const videoLicenceManager = buildVideoLicenceManager(npmName)
|
const videoLicenceManager = buildVideoLicenceManager(npmName)
|
||||||
|
|
||||||
const peertubeHelpers = buildPluginHelpers(npmName, plugin)
|
const peertubeHelpers = buildPluginHelpers(npmName)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
settingsManager,
|
settingsManager,
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
||||||
|
// ###########################################################################
|
|
@ -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": {}
|
||||||
|
}
|
|
@ -2,3 +2,4 @@ import './action-hooks'
|
||||||
import './filter-hooks'
|
import './filter-hooks'
|
||||||
import './translations'
|
import './translations'
|
||||||
import './video-constants'
|
import './video-constants'
|
||||||
|
import './plugin-helpers'
|
||||||
|
|
|
@ -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 ])
|
||||||
|
})
|
||||||
|
})
|
|
@ -9,6 +9,10 @@ import { Logger } from 'winston'
|
||||||
|
|
||||||
export type PeerTubeHelpers = {
|
export type PeerTubeHelpers = {
|
||||||
logger: Logger
|
logger: Logger
|
||||||
|
|
||||||
|
database: {
|
||||||
|
query: Function
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export type RegisterServerOptions = {
|
export type RegisterServerOptions = {
|
||||||
|
|
|
@ -285,7 +285,7 @@ function cleanupTests (servers: ServerInfo[]) {
|
||||||
return Promise.all(p)
|
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')
|
const logfile = join(root(), 'test' + server.internalServerNumber, 'logs/peertube.log')
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
|
@ -293,6 +293,7 @@ async function waitUntilLog (server: ServerInfo, str: string, count = 1) {
|
||||||
|
|
||||||
const matches = buf.toString().match(new RegExp(str, 'g'))
|
const matches = buf.toString().match(new RegExp(str, 'g'))
|
||||||
if (matches && matches.length === count) return
|
if (matches && matches.length === count) return
|
||||||
|
if (matches && strictCount === false && matches.length >= count) return
|
||||||
|
|
||||||
await wait(1000)
|
await wait(1000)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue