]>
Commit | Line | Data |
---|---|---|
345da516 C |
1 | import * as express from 'express' |
2 | import { PLUGIN_GLOBAL_CSS_PATH } from '../initializers/constants' | |
b5f919ac | 3 | import { join } from 'path' |
345da516 C |
4 | import { RegisteredPlugin } from '../lib/plugins/plugin-manager' |
5 | import { servePluginStaticDirectoryValidator } from '../middlewares/validators/plugins' | |
b5f919ac C |
6 | import { serveThemeCSSValidator } from '../middlewares/validators/themes' |
7 | import { PluginType } from '../../shared/models/plugins/plugin.type' | |
345da516 C |
8 | |
9 | const pluginsRouter = express.Router() | |
10 | ||
b5f919ac | 11 | pluginsRouter.get('/plugins/global.css', |
2c053942 | 12 | servePluginGlobalCSS |
345da516 C |
13 | ) |
14 | ||
b5f919ac C |
15 | pluginsRouter.get('/plugins/:pluginName/:pluginVersion/static/:staticEndpoint(*)', |
16 | servePluginStaticDirectoryValidator(PluginType.PLUGIN), | |
345da516 C |
17 | servePluginStaticDirectory |
18 | ) | |
19 | ||
b5f919ac C |
20 | pluginsRouter.get('/plugins/:pluginName/:pluginVersion/client-scripts/:staticEndpoint(*)', |
21 | servePluginStaticDirectoryValidator(PluginType.PLUGIN), | |
345da516 C |
22 | servePluginClientScripts |
23 | ) | |
24 | ||
b5f919ac C |
25 | pluginsRouter.get('/themes/:pluginName/:pluginVersion/static/:staticEndpoint(*)', |
26 | servePluginStaticDirectoryValidator(PluginType.THEME), | |
27 | servePluginStaticDirectory | |
28 | ) | |
29 | ||
30 | pluginsRouter.get('/themes/:pluginName/:pluginVersion/client-scripts/:staticEndpoint(*)', | |
31 | servePluginStaticDirectoryValidator(PluginType.THEME), | |
32 | servePluginClientScripts | |
33 | ) | |
34 | ||
35 | pluginsRouter.get('/themes/:themeName/:themeVersion/css/:staticEndpoint(*)', | |
36 | serveThemeCSSValidator, | |
37 | serveThemeCSSDirectory | |
38 | ) | |
39 | ||
345da516 C |
40 | // --------------------------------------------------------------------------- |
41 | ||
42 | export { | |
43 | pluginsRouter | |
44 | } | |
45 | ||
46 | // --------------------------------------------------------------------------- | |
47 | ||
2c053942 C |
48 | function servePluginGlobalCSS (req: express.Request, res: express.Response) { |
49 | return res.sendFile(PLUGIN_GLOBAL_CSS_PATH) | |
50 | } | |
51 | ||
345da516 C |
52 | function servePluginStaticDirectory (req: express.Request, res: express.Response) { |
53 | const plugin: RegisteredPlugin = res.locals.registeredPlugin | |
54 | const staticEndpoint = req.params.staticEndpoint | |
55 | ||
2c053942 C |
56 | const [ directory, ...file ] = staticEndpoint.split('/') |
57 | ||
58 | const staticPath = plugin.staticDirs[directory] | |
345da516 C |
59 | if (!staticPath) { |
60 | return res.sendStatus(404) | |
61 | } | |
62 | ||
2c053942 C |
63 | const filepath = file.join('/') |
64 | return res.sendFile(join(plugin.path, staticPath, filepath)) | |
345da516 C |
65 | } |
66 | ||
67 | function servePluginClientScripts (req: express.Request, res: express.Response) { | |
68 | const plugin: RegisteredPlugin = res.locals.registeredPlugin | |
69 | const staticEndpoint = req.params.staticEndpoint | |
70 | ||
2c053942 C |
71 | const file = plugin.clientScripts[staticEndpoint] |
72 | if (!file) { | |
73 | return res.sendStatus(404) | |
74 | } | |
75 | ||
76 | return res.sendFile(join(plugin.path, staticEndpoint)) | |
345da516 | 77 | } |
b5f919ac C |
78 | |
79 | function serveThemeCSSDirectory (req: express.Request, res: express.Response) { | |
80 | const plugin: RegisteredPlugin = res.locals.registeredPlugin | |
81 | const staticEndpoint = req.params.staticEndpoint | |
82 | ||
83 | if (plugin.css.includes(staticEndpoint) === false) { | |
84 | return res.sendStatus(404) | |
85 | } | |
86 | ||
87 | return res.sendFile(join(plugin.path, staticEndpoint)) | |
88 | } |