From 59cd78ee8231ccc6575ba1580c3f2cc4cb3f8f8c Mon Sep 17 00:00:00 2001 From: John Livingston Date: Fri, 9 Apr 2021 21:28:16 +0200 Subject: [PATCH] Initializing a diagnostic tools. WIP --- client/settings.ts | 1 + package.json | 3 +- server/lib/helpers.ts | 25 ++++++++++++++++ server/lib/routers/index.ts | 2 ++ server/lib/routers/settings.ts | 52 ++++++++++++++++++++++++++++++++++ server/lib/settings.ts | 18 +++++++++--- webpack.config.js | 19 +++++++++++++ 7 files changed, 115 insertions(+), 5 deletions(-) create mode 100644 client/settings.ts create mode 100644 server/lib/helpers.ts create mode 100644 server/lib/routers/settings.ts diff --git a/client/settings.ts b/client/settings.ts new file mode 100644 index 00000000..c00ce2a7 --- /dev/null +++ b/client/settings.ts @@ -0,0 +1 @@ +// TODO: launch test one by one, using authent Bearer. diff --git a/package.json b/package.json index 6af9077b..3e45e3b4 100644 --- a/package.json +++ b/package.json @@ -69,7 +69,8 @@ "staticDirs": { "static": "dist/client/static", "conversejs": "dist/client/conversejs/", - "images": "dist/client/images/" + "images": "dist/client/images/", + "settings": "dist/client/settings" }, "translations": { "fr-FR": "./languages/fr.json" diff --git a/server/lib/helpers.ts b/server/lib/helpers.ts new file mode 100644 index 00000000..caabb007 --- /dev/null +++ b/server/lib/helpers.ts @@ -0,0 +1,25 @@ +const packagejson: any = require('../../../package.json') +const version: string = packagejson.version || '' +if (!/^\d+\.\d+\.\d+/.test(version)) { + throw new Error('Incorrect version in package.json.') +} +const name: string = packagejson.name || '' +if (!/^peertube-plugin-[-a-z]+$/.test(name)) { + throw new Error('Incorrect plugin name in package.json.') +} +const shortName = name.substring('peertube-plugin-'.length) + +// FIXME: in Peertube <= 3.1.0, PeertubeHelpers dont provide this function +function getBaseRouter (): string { + return '/plugins/' + shortName + '/router/' +} + +// FIXME: in Peertube <= 3.1.0, PeertubeHelpers dont provide this function +function getBaseStaticRoute (): string { + return '/plugins/' + shortName + '/' + version + '/static/' +} + +export { + getBaseRouter, + getBaseStaticRoute +} diff --git a/server/lib/routers/index.ts b/server/lib/routers/index.ts index f918f1c8..15b3a5c3 100644 --- a/server/lib/routers/index.ts +++ b/server/lib/routers/index.ts @@ -1,5 +1,6 @@ import type { NextFunction, Request, Response } from 'express' import { initWebchatRouter } from './webchat' +import { initSettingsRouter } from './settings' async function initRouters (options: RegisterServerOptions): Promise { const { getRouter } = options @@ -8,6 +9,7 @@ async function initRouters (options: RegisterServerOptions): Promise { router.get('/ping', (req: Request, res: Response, _next: NextFunction) => res.json({ message: 'pong' })) router.use('/webchat', await initWebchatRouter(options)) + router.use('/settings', await initSettingsRouter(options)) } export { diff --git a/server/lib/routers/settings.ts b/server/lib/routers/settings.ts new file mode 100644 index 00000000..20189b88 --- /dev/null +++ b/server/lib/routers/settings.ts @@ -0,0 +1,52 @@ +import type { Router, Request, Response, NextFunction } from 'express' +import { getBaseStaticRoute } from '../helpers' + +async function initSettingsRouter ({ + peertubeHelpers, + getRouter +}: RegisterServerOptions): Promise { + const router = getRouter() + const logger = peertubeHelpers.logger + + router.get('/diagnostic', async (req: Request, res: Response, next: NextFunction) => { + try { + logger.info('Accessing peertube-plugin-livechat diagnostic tool.') + const src = getBaseStaticRoute() + 'settings/settings.js' + res.status(200) + res.type('html') + res.send('
Loading...
') + } catch (error) { + return next(error) + } + }) + + router.post('/diagnostic/test', async (req: Request, res: Response, next: NextFunction) => { + try { + if (!res.locals.authenticated) { + return res.sendStatus(403) + } + // FIXME: test that user is admin. + logger.error('FIXME: test that user is admin') + + const test: string = req.body.test || '' + logger.info('Accessing peertube-plugin-livechat diagnostic tool, test "' + test + '".') + const result: any = { + test: test, + message: null, + next: null, + ok: false + } + + res.status(200) + res.json(result) + } catch (error) { + return next(error) + } + }) + + return router +} + +export { + initSettingsRouter +} diff --git a/server/lib/settings.ts b/server/lib/settings.ts index fad41d1c..12ea6131 100644 --- a/server/lib/settings.ts +++ b/server/lib/settings.ts @@ -1,10 +1,8 @@ -interface InitSettingsOptions { - registerSetting: (options: RegisterServerSettingOptions) => void -} +import { getBaseRouter } from './helpers' export function initSettings ({ registerSetting -}: InitSettingsOptions): void { +}: RegisterServerOptions): void { registerSetting({ name: 'chat-auto-display', label: 'Automatically open the chat', @@ -54,6 +52,18 @@ export function initSettings ({ private: false }) + registerSetting({ + name: 'chat-use-prosody', + label: 'Use builtin Prosody XMPP Server', + type: 'input-checkbox', + // /!\ dont auto-activate on existing settups. FIXME: how to do this? + default: false, // TODO: set to true when peertube has fixed https://github.com/Chocobozzz/PeerTube/issues/3838 + private: false, + descriptionHTML: 'If checked, this will use a builtin XMPP server. This is the recommanded setup.
' + + 'TODO: add link to documentation.
' + + 'Launch diagnostic.
' + }) + registerSetting({ name: 'chat-use-builtin', label: 'Use builtin ConverseJS', diff --git a/webpack.config.js b/webpack.config.js index 48f9982b..5d45a900 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -37,4 +37,23 @@ config.push({ } }) +config.push({ + entry: "./client/settings.ts", + module: { + rules: [ + { + test: /\.tsx?$/, + use: 'ts-loader' + } + ] + }, + resolve: { + extensions: [ '.tsx', '.ts', '.js' ], + }, + output: { + path: path.resolve(__dirname, "./dist/client/settings"), + filename: "./settings.js" + } +}) + module.exports = config