From 2c0539420d77339e6afe8d7920b44af4c0dcb1e6 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 8 Jul 2019 14:02:03 +0200 Subject: WIP plugins: static files --- server/controllers/plugins.ts | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) (limited to 'server/controllers') diff --git a/server/controllers/plugins.ts b/server/controllers/plugins.ts index a6705d9c7..05f03324d 100644 --- a/server/controllers/plugins.ts +++ b/server/controllers/plugins.ts @@ -1,21 +1,21 @@ import * as express from 'express' import { PLUGIN_GLOBAL_CSS_PATH } from '../initializers/constants' -import { join } from 'path' +import { basename, 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 }) + servePluginGlobalCSS ) -pluginsRouter.get('/:pluginName/:pluginVersion/statics/:staticEndpoint', +pluginsRouter.get('/:pluginName/:pluginVersion/static/:staticEndpoint(*)', servePluginStaticDirectoryValidator, servePluginStaticDirectory ) -pluginsRouter.get('/:pluginName/:pluginVersion/client-scripts/:staticEndpoint', +pluginsRouter.get('/:pluginName/:pluginVersion/client-scripts/:staticEndpoint(*)', servePluginStaticDirectoryValidator, servePluginClientScripts ) @@ -28,21 +28,33 @@ export { // --------------------------------------------------------------------------- +function servePluginGlobalCSS (req: express.Request, res: express.Response) { + return res.sendFile(PLUGIN_GLOBAL_CSS_PATH) +} + function servePluginStaticDirectory (req: express.Request, res: express.Response) { const plugin: RegisteredPlugin = res.locals.registeredPlugin const staticEndpoint = req.params.staticEndpoint - const staticPath = plugin.staticDirs[staticEndpoint] + const [ directory, ...file ] = staticEndpoint.split('/') + + const staticPath = plugin.staticDirs[directory] if (!staticPath) { return res.sendStatus(404) } - return express.static(join(plugin.path, staticPath), { fallthrough: false }) + const filepath = file.join('/') + return res.sendFile(join(plugin.path, staticPath, filepath)) } 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 }) + const file = plugin.clientScripts[staticEndpoint] + if (!file) { + return res.sendStatus(404) + } + + return res.sendFile(join(plugin.path, staticEndpoint)) } -- cgit v1.2.3