From 345da516fae80f24c90c2196e96393b489af2243 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Fri, 5 Jul 2019 13:54:32 +0200 Subject: WIP plugins: add ability to register plugins --- server/controllers/plugins.ts | 48 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 server/controllers/plugins.ts (limited to 'server/controllers/plugins.ts') diff --git a/server/controllers/plugins.ts b/server/controllers/plugins.ts new file mode 100644 index 000000000..a6705d9c7 --- /dev/null +++ b/server/controllers/plugins.ts @@ -0,0 +1,48 @@ +import * as express from 'express' +import { PLUGIN_GLOBAL_CSS_PATH } from '../initializers/constants' +import { join } from 'path' +import { RegisteredPlugin } from '../lib/plugins/plugin-manager' +import { servePluginStaticDirectoryValidator } from '../middlewares/validators/plugins' + +const pluginsRouter = express.Router() + +pluginsRouter.get('/global.css', + express.static(PLUGIN_GLOBAL_CSS_PATH, { fallthrough: false }) +) + +pluginsRouter.get('/:pluginName/:pluginVersion/statics/:staticEndpoint', + servePluginStaticDirectoryValidator, + servePluginStaticDirectory +) + +pluginsRouter.get('/:pluginName/:pluginVersion/client-scripts/:staticEndpoint', + servePluginStaticDirectoryValidator, + servePluginClientScripts +) + +// --------------------------------------------------------------------------- + +export { + pluginsRouter +} + +// --------------------------------------------------------------------------- + +function servePluginStaticDirectory (req: express.Request, res: express.Response) { + const plugin: RegisteredPlugin = res.locals.registeredPlugin + const staticEndpoint = req.params.staticEndpoint + + const staticPath = plugin.staticDirs[staticEndpoint] + if (!staticPath) { + return res.sendStatus(404) + } + + return express.static(join(plugin.path, staticPath), { fallthrough: false }) +} + +function servePluginClientScripts (req: express.Request, res: express.Response) { + const plugin: RegisteredPlugin = res.locals.registeredPlugin + const staticEndpoint = req.params.staticEndpoint + + return express.static(join(plugin.path, staticEndpoint), { fallthrough: false }) +} -- cgit v1.2.3