]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/controllers/plugins.ts
WIP plugins: static files
[github/Chocobozzz/PeerTube.git] / server / controllers / plugins.ts
1 import * as express from 'express'
2 import { PLUGIN_GLOBAL_CSS_PATH } from '../initializers/constants'
3 import { basename, join } from 'path'
4 import { RegisteredPlugin } from '../lib/plugins/plugin-manager'
5 import { servePluginStaticDirectoryValidator } from '../middlewares/validators/plugins'
6
7 const pluginsRouter = express.Router()
8
9 pluginsRouter.get('/global.css',
10 servePluginGlobalCSS
11 )
12
13 pluginsRouter.get('/:pluginName/:pluginVersion/static/:staticEndpoint(*)',
14 servePluginStaticDirectoryValidator,
15 servePluginStaticDirectory
16 )
17
18 pluginsRouter.get('/:pluginName/:pluginVersion/client-scripts/:staticEndpoint(*)',
19 servePluginStaticDirectoryValidator,
20 servePluginClientScripts
21 )
22
23 // ---------------------------------------------------------------------------
24
25 export {
26 pluginsRouter
27 }
28
29 // ---------------------------------------------------------------------------
30
31 function servePluginGlobalCSS (req: express.Request, res: express.Response) {
32 return res.sendFile(PLUGIN_GLOBAL_CSS_PATH)
33 }
34
35 function servePluginStaticDirectory (req: express.Request, res: express.Response) {
36 const plugin: RegisteredPlugin = res.locals.registeredPlugin
37 const staticEndpoint = req.params.staticEndpoint
38
39 const [ directory, ...file ] = staticEndpoint.split('/')
40
41 const staticPath = plugin.staticDirs[directory]
42 if (!staticPath) {
43 return res.sendStatus(404)
44 }
45
46 const filepath = file.join('/')
47 return res.sendFile(join(plugin.path, staticPath, filepath))
48 }
49
50 function servePluginClientScripts (req: express.Request, res: express.Response) {
51 const plugin: RegisteredPlugin = res.locals.registeredPlugin
52 const staticEndpoint = req.params.staticEndpoint
53
54 const file = plugin.clientScripts[staticEndpoint]
55 if (!file) {
56 return res.sendStatus(404)
57 }
58
59 return res.sendFile(join(plugin.path, staticEndpoint))
60 }