]>
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' | |
a8b666e9 C |
8 | import { isTestInstance } from '../helpers/core-utils' |
9 | ||
10 | const sendFileOptions = { | |
11 | maxAge: '30 days', | |
12 | immutable: !isTestInstance() | |
13 | } | |
345da516 C |
14 | |
15 | const pluginsRouter = express.Router() | |
16 | ||
b5f919ac | 17 | pluginsRouter.get('/plugins/global.css', |
2c053942 | 18 | servePluginGlobalCSS |
345da516 C |
19 | ) |
20 | ||
b5f919ac C |
21 | pluginsRouter.get('/plugins/:pluginName/:pluginVersion/static/:staticEndpoint(*)', |
22 | servePluginStaticDirectoryValidator(PluginType.PLUGIN), | |
345da516 C |
23 | servePluginStaticDirectory |
24 | ) | |
25 | ||
b5f919ac C |
26 | pluginsRouter.get('/plugins/:pluginName/:pluginVersion/client-scripts/:staticEndpoint(*)', |
27 | servePluginStaticDirectoryValidator(PluginType.PLUGIN), | |
345da516 C |
28 | servePluginClientScripts |
29 | ) | |
30 | ||
b5f919ac C |
31 | pluginsRouter.get('/themes/:pluginName/:pluginVersion/static/:staticEndpoint(*)', |
32 | servePluginStaticDirectoryValidator(PluginType.THEME), | |
33 | servePluginStaticDirectory | |
34 | ) | |
35 | ||
36 | pluginsRouter.get('/themes/:pluginName/:pluginVersion/client-scripts/:staticEndpoint(*)', | |
37 | servePluginStaticDirectoryValidator(PluginType.THEME), | |
38 | servePluginClientScripts | |
39 | ) | |
40 | ||
41 | pluginsRouter.get('/themes/:themeName/:themeVersion/css/:staticEndpoint(*)', | |
42 | serveThemeCSSValidator, | |
43 | serveThemeCSSDirectory | |
44 | ) | |
45 | ||
345da516 C |
46 | // --------------------------------------------------------------------------- |
47 | ||
48 | export { | |
49 | pluginsRouter | |
50 | } | |
51 | ||
52 | // --------------------------------------------------------------------------- | |
53 | ||
2c053942 | 54 | function servePluginGlobalCSS (req: express.Request, res: express.Response) { |
a8b666e9 C |
55 | // Only cache requests that have a ?hash=... query param |
56 | const globalCSSOptions = req.query.hash | |
57 | ? sendFileOptions | |
58 | : {} | |
59 | ||
60 | return res.sendFile(PLUGIN_GLOBAL_CSS_PATH, globalCSSOptions) | |
2c053942 C |
61 | } |
62 | ||
345da516 C |
63 | function servePluginStaticDirectory (req: express.Request, res: express.Response) { |
64 | const plugin: RegisteredPlugin = res.locals.registeredPlugin | |
65 | const staticEndpoint = req.params.staticEndpoint | |
66 | ||
2c053942 C |
67 | const [ directory, ...file ] = staticEndpoint.split('/') |
68 | ||
69 | const staticPath = plugin.staticDirs[directory] | |
345da516 C |
70 | if (!staticPath) { |
71 | return res.sendStatus(404) | |
72 | } | |
73 | ||
2c053942 | 74 | const filepath = file.join('/') |
a8b666e9 | 75 | return res.sendFile(join(plugin.path, staticPath, filepath), sendFileOptions) |
345da516 C |
76 | } |
77 | ||
78 | function servePluginClientScripts (req: express.Request, res: express.Response) { | |
79 | const plugin: RegisteredPlugin = res.locals.registeredPlugin | |
80 | const staticEndpoint = req.params.staticEndpoint | |
81 | ||
2c053942 C |
82 | const file = plugin.clientScripts[staticEndpoint] |
83 | if (!file) { | |
84 | return res.sendStatus(404) | |
85 | } | |
86 | ||
a8b666e9 | 87 | return res.sendFile(join(plugin.path, staticEndpoint), sendFileOptions) |
345da516 | 88 | } |
b5f919ac C |
89 | |
90 | function serveThemeCSSDirectory (req: express.Request, res: express.Response) { | |
91 | const plugin: RegisteredPlugin = res.locals.registeredPlugin | |
92 | const staticEndpoint = req.params.staticEndpoint | |
93 | ||
94 | if (plugin.css.includes(staticEndpoint) === false) { | |
95 | return res.sendStatus(404) | |
96 | } | |
97 | ||
a8b666e9 | 98 | return res.sendFile(join(plugin.path, staticEndpoint), sendFileOptions) |
b5f919ac | 99 | } |