From 41c0f6928d1ffc82fd8dcdf2f9470a97690e8da0 Mon Sep 17 00:00:00 2001 From: Alan Plum Date: Mon, 31 Oct 2016 16:10:27 +0100 Subject: [PATCH] Allow passing config & deps on install/upgrade/replace --- js/apps/system/_api/foxx/APP/index.js | 48 +++++++++++++++++-------- js/apps/system/_api/foxx/APP/schemas.js | 4 ++- 2 files changed, 36 insertions(+), 16 deletions(-) diff --git a/js/apps/system/_api/foxx/APP/index.js b/js/apps/system/_api/foxx/APP/index.js index a37202d4bb..f0cd50aaef 100644 --- a/js/apps/system/_api/foxx/APP/index.js +++ b/js/apps/system/_api/foxx/APP/index.js @@ -67,11 +67,17 @@ router.post((req, res) => { if (source instanceof Buffer) { source = writeUploadToTempFile(source); } - const service = fm.install( - source, - req.queryParams.mount, - _.omit(req.queryParams, ['mount']) - ); + const dependencies = req.body.dependencies && JSON.parse(req.body.dependencies); + const configuration = req.body.configuration && JSON.parse(req.body.configuration); + const mount = req.queryParams.mount; + fm.install(source, mount, _.omit(req.queryParams, ['mount'])); + if (configuration) { + fm.setConfiguration(mount, {configuration, replace: true}); + } + if (dependencies) { + fm.setDependencies(mount, {dependencies, replace: true}); + } + const service = fm.lookupService(mount); res.json(serviceToJson(service)); }) .body(schemas.service, ['multipart/form-data', 'application/json'], `Service to be installed.`) @@ -121,11 +127,17 @@ serviceRouter.patch((req, res) => { if (source instanceof Buffer) { source = writeUploadToTempFile(source); } - const service = fm.upgrade( - source, - req.queryParams.mount, - _.omit(req.queryParams, ['mount']) - ); + const dependencies = req.body.dependencies && JSON.parse(req.body.dependencies); + const configuration = req.body.configuration && JSON.parse(req.body.configuration); + const mount = req.queryParams.mount; + fm.upgrade(source, mount, _.omit(req.queryParams, ['mount'])); + if (configuration) { + fm.setConfiguration(mount, {configuration, replace: false}); + } + if (dependencies) { + fm.setDependencies(mount, {dependencies, replace: false}); + } + const service = fm.lookupService(mount); res.json(serviceToJson(service)); }) .body(schemas.service, ['multipart/form-data', 'application/json'], `Service to be installed.`) @@ -149,11 +161,17 @@ serviceRouter.put((req, res) => { if (source instanceof Buffer) { source = writeUploadToTempFile(source); } - const service = fm.replace( - source, - req.queryParams.mount, - _.omit(req.queryParams, ['mount']) - ); + const dependencies = req.body.dependencies && JSON.parse(req.body.dependencies); + const configuration = req.body.configuration && JSON.parse(req.body.configuration); + const mount = req.queryParams.mount; + fm.replace(source, mount, _.omit(req.queryParams, ['mount'])); + if (configuration) { + fm.setConfiguration(mount, {configuration, replace: true}); + } + if (dependencies) { + fm.setDependencies(mount, {dependencies, replace: true}); + } + const service = fm.lookupService(mount); res.json(serviceToJson(service)); }) .body(schemas.service, ['multipart/form-data', 'application/json'], `Service to be installed.`) diff --git a/js/apps/system/_api/foxx/APP/schemas.js b/js/apps/system/_api/foxx/APP/schemas.js index 6c76dab6c5..b24419392e 100644 --- a/js/apps/system/_api/foxx/APP/schemas.js +++ b/js/apps/system/_api/foxx/APP/schemas.js @@ -42,5 +42,7 @@ exports.service = joi.object({ source: joi.alternatives( joi.string().description(`Local file path or URL of the service to be installed`), joi.object().type(Buffer).description(`Zip bundle of the service to be installed`) - ).required().description(`Local file path, URL or zip bundle of the service to be installed`) + ).required().description(`Local file path, URL or zip bundle of the service to be installed`), + configuration: joi.string().optional().description(`Configuration to use for the service (JSON)`), + dependencies: joi.string().optional().description(`Dependency options to use for the service (JSON)`) }).required();