diff options
Diffstat (limited to 'server/controllers/api')
-rw-r--r-- | server/controllers/api/plugins.ts | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/server/controllers/api/plugins.ts b/server/controllers/api/plugins.ts index 8e59f27cf..14675fdf3 100644 --- a/server/controllers/api/plugins.ts +++ b/server/controllers/api/plugins.ts | |||
@@ -13,13 +13,13 @@ import { PluginModel } from '../../models/server/plugin' | |||
13 | import { UserRight } from '../../../shared/models/users' | 13 | import { UserRight } from '../../../shared/models/users' |
14 | import { | 14 | import { |
15 | existingPluginValidator, | 15 | existingPluginValidator, |
16 | installPluginValidator, | 16 | installOrUpdatePluginValidator, |
17 | listPluginsValidator, | 17 | listPluginsValidator, |
18 | uninstallPluginValidator, | 18 | uninstallPluginValidator, |
19 | updatePluginSettingsValidator | 19 | updatePluginSettingsValidator |
20 | } from '../../middlewares/validators/plugins' | 20 | } from '../../middlewares/validators/plugins' |
21 | import { PluginManager } from '../../lib/plugins/plugin-manager' | 21 | import { PluginManager } from '../../lib/plugins/plugin-manager' |
22 | import { InstallPlugin } from '../../../shared/models/plugins/install-plugin.model' | 22 | import { InstallOrUpdatePlugin } from '../../../shared/models/plugins/install-plugin.model' |
23 | import { ManagePlugin } from '../../../shared/models/plugins/manage-plugin.model' | 23 | import { ManagePlugin } from '../../../shared/models/plugins/manage-plugin.model' |
24 | import { logger } from '../../helpers/logger' | 24 | import { logger } from '../../helpers/logger' |
25 | 25 | ||
@@ -61,10 +61,17 @@ pluginRouter.put('/:npmName/settings', | |||
61 | pluginRouter.post('/install', | 61 | pluginRouter.post('/install', |
62 | authenticate, | 62 | authenticate, |
63 | ensureUserHasRight(UserRight.MANAGE_PLUGINS), | 63 | ensureUserHasRight(UserRight.MANAGE_PLUGINS), |
64 | installPluginValidator, | 64 | installOrUpdatePluginValidator, |
65 | asyncMiddleware(installPlugin) | 65 | asyncMiddleware(installPlugin) |
66 | ) | 66 | ) |
67 | 67 | ||
68 | pluginRouter.post('/update', | ||
69 | authenticate, | ||
70 | ensureUserHasRight(UserRight.MANAGE_PLUGINS), | ||
71 | installOrUpdatePluginValidator, | ||
72 | asyncMiddleware(updatePlugin) | ||
73 | ) | ||
74 | |||
68 | pluginRouter.post('/uninstall', | 75 | pluginRouter.post('/uninstall', |
69 | authenticate, | 76 | authenticate, |
70 | ensureUserHasRight(UserRight.MANAGE_PLUGINS), | 77 | ensureUserHasRight(UserRight.MANAGE_PLUGINS), |
@@ -100,18 +107,33 @@ function getPlugin (req: express.Request, res: express.Response) { | |||
100 | } | 107 | } |
101 | 108 | ||
102 | async function installPlugin (req: express.Request, res: express.Response) { | 109 | async function installPlugin (req: express.Request, res: express.Response) { |
103 | const body: InstallPlugin = req.body | 110 | const body: InstallOrUpdatePlugin = req.body |
104 | 111 | ||
105 | const fromDisk = !!body.path | 112 | const fromDisk = !!body.path |
106 | const toInstall = body.npmName || body.path | 113 | const toInstall = body.npmName || body.path |
107 | try { | 114 | try { |
108 | await PluginManager.Instance.install(toInstall, undefined, fromDisk) | 115 | const plugin = await PluginManager.Instance.install(toInstall, undefined, fromDisk) |
116 | |||
117 | return res.json(plugin.toFormattedJSON()) | ||
109 | } catch (err) { | 118 | } catch (err) { |
110 | logger.warn('Cannot install plugin %s.', toInstall, { err }) | 119 | logger.warn('Cannot install plugin %s.', toInstall, { err }) |
111 | return res.sendStatus(400) | 120 | return res.sendStatus(400) |
112 | } | 121 | } |
122 | } | ||
113 | 123 | ||
114 | return res.sendStatus(204) | 124 | async function updatePlugin (req: express.Request, res: express.Response) { |
125 | const body: InstallOrUpdatePlugin = req.body | ||
126 | |||
127 | const fromDisk = !!body.path | ||
128 | const toUpdate = body.npmName || body.path | ||
129 | try { | ||
130 | const plugin = await PluginManager.Instance.update(toUpdate, undefined, fromDisk) | ||
131 | |||
132 | return res.json(plugin.toFormattedJSON()) | ||
133 | } catch (err) { | ||
134 | logger.warn('Cannot update plugin %s.', toUpdate, { err }) | ||
135 | return res.sendStatus(400) | ||
136 | } | ||
115 | } | 137 | } |
116 | 138 | ||
117 | async function uninstallPlugin (req: express.Request, res: express.Response) { | 139 | async function uninstallPlugin (req: express.Request, res: express.Response) { |
@@ -123,9 +145,7 @@ async function uninstallPlugin (req: express.Request, res: express.Response) { | |||
123 | } | 145 | } |
124 | 146 | ||
125 | function getPluginRegisteredSettings (req: express.Request, res: express.Response) { | 147 | function getPluginRegisteredSettings (req: express.Request, res: express.Response) { |
126 | const plugin = res.locals.plugin | 148 | const settings = PluginManager.Instance.getRegisteredSettings(req.params.npmName) |
127 | |||
128 | const settings = PluginManager.Instance.getSettings(plugin.name) | ||
129 | 149 | ||
130 | return res.json({ | 150 | return res.json({ |
131 | settings | 151 | settings |