mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Merge pull request #2682 from node-red/upload-npm
Add support for file upload on /nodes api
This commit is contained in:
@@ -159,6 +159,7 @@ var api = module.exports = {
|
||||
* @param {User} opts.user - the user calling the api
|
||||
* @param {String} opts.module - the id of the module to install
|
||||
* @param {String} opts.version - (optional) the version of the module to install
|
||||
* @param {Object} opts.tarball - (optional) a tarball file to install. Object has properties `name`, `size` and `buffer`.
|
||||
* @param {String} opts.url - (optional) url to install
|
||||
* @param {Object} opts.req - the request to log (optional)
|
||||
* @return {Promise<ModuleInfo>} - the node module info
|
||||
@@ -173,6 +174,37 @@ var api = module.exports = {
|
||||
err.status = 400;
|
||||
return reject(err);
|
||||
}
|
||||
if (opts.tarball) {
|
||||
if (runtime.settings.editorTheme && runtime.settings.editorTheme.palette && runtime.settings.editorTheme.palette.upload === false) {
|
||||
runtime.log.audit({event: "nodes.install",tarball:opts.tarball.file,error:"invalid_request"}, opts.req);
|
||||
var err = new Error("Invalid request");
|
||||
err.code = "invalid_request";
|
||||
err.status = 400;
|
||||
return reject(err);
|
||||
}
|
||||
if (opts.module || opts.version || opts.url) {
|
||||
runtime.log.audit({event: "nodes.install",tarball:opts.tarball.file,module:opts.module,error:"invalid_request"}, opts.req);
|
||||
var err = new Error("Invalid request");
|
||||
err.code = "invalid_request";
|
||||
err.status = 400;
|
||||
return reject(err);
|
||||
}
|
||||
runtime.nodes.installModule(opts.tarball.buffer).then(function(info) {
|
||||
runtime.log.audit({event: "nodes.install",tarball:opts.tarball.file,module:info.id}, opts.req);
|
||||
return resolve(info);
|
||||
}).catch(function(err) {
|
||||
|
||||
if (err.code) {
|
||||
err.status = 400;
|
||||
runtime.log.audit({event: "nodes.install",module:opts.module,version:opts.version,url:opts.url,error:err.code}, opts.req);
|
||||
} else {
|
||||
err.status = 400;
|
||||
runtime.log.audit({event: "nodes.install",module:opts.module,version:opts.version,url:opts.url,error:err.code||"unexpected_error",message:err.toString()}, opts.req);
|
||||
}
|
||||
return reject(err);
|
||||
})
|
||||
return;
|
||||
}
|
||||
if (opts.module) {
|
||||
var existingModule = runtime.nodes.getModuleInfo(opts.module);
|
||||
if (existingModule) {
|
||||
|
@@ -151,11 +151,9 @@ function reportNodeStateChange(info,enabled) {
|
||||
}
|
||||
|
||||
function installModule(module,version,url) {
|
||||
var existingModule = registry.getModuleInfo(module);
|
||||
var isUpgrade = !!existingModule;
|
||||
return registry.installModule(module,version,url).then(function(info) {
|
||||
if (isUpgrade) {
|
||||
events.emit("runtime-event",{id:"node/upgraded",retain:false,payload:{module:module,version:version}});
|
||||
if (info.pending_version) {
|
||||
events.emit("runtime-event",{id:"node/upgraded",retain:false,payload:{module:info.name,version:info.pending_version}});
|
||||
} else {
|
||||
events.emit("runtime-event",{id:"node/added",retain:false,payload:info.nodes});
|
||||
}
|
||||
|
Reference in New Issue
Block a user