mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Move to express 4.x
This commit is contained in:
@@ -55,7 +55,7 @@ function needsPermission(permission) {
|
||||
return next();
|
||||
}
|
||||
log.audit({event: "permission.fail"},req);
|
||||
return res.send(401);
|
||||
return res.status(401).end();
|
||||
});
|
||||
} else {
|
||||
next();
|
||||
@@ -95,7 +95,7 @@ function revoke(req,res) {
|
||||
// TODO: audit log
|
||||
Tokens.revoke(token).then(function() {
|
||||
log.audit({event: "auth.login.revoke"},req);
|
||||
res.send(200);
|
||||
res.status(200).end();
|
||||
});
|
||||
}
|
||||
|
||||
|
@@ -29,11 +29,11 @@ module.exports = {
|
||||
var deploymentType = req.get("Node-RED-Deployment-Type")||"full";
|
||||
log.audit({event: "flows.set",type:deploymentType},req);
|
||||
redNodes.setFlows(flows,deploymentType).then(function() {
|
||||
res.send(204);
|
||||
res.status(204).end();
|
||||
}).otherwise(function(err) {
|
||||
log.warn(log._("api.flows.error-save",{message:err.message}));
|
||||
log.warn(err.stack);
|
||||
res.json(500,{error:"unexpected_error", message:err.message});
|
||||
res.status(500).json({error:"unexpected_error", message:err.message});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@@ -15,6 +15,7 @@
|
||||
**/
|
||||
|
||||
var express = require("express");
|
||||
var bodyParser = require("body-parser");
|
||||
var util = require('util');
|
||||
var path = require('path');
|
||||
var passport = require('passport');
|
||||
@@ -34,7 +35,7 @@ var settings = require("../settings");
|
||||
|
||||
var errorHandler = function(err,req,res,next) {
|
||||
console.log(err.stack);
|
||||
res.json(400,{error:"unexpected_error", message:err.toString()});
|
||||
res.status(400).json({error:"unexpected_error", message:err.toString()});
|
||||
};
|
||||
|
||||
function init(adminApp,storage) {
|
||||
@@ -54,8 +55,8 @@ function init(adminApp,storage) {
|
||||
adminApp.use(editorApp);
|
||||
}
|
||||
|
||||
adminApp.use(express.json());
|
||||
adminApp.use(express.urlencoded());
|
||||
adminApp.use(bodyParser.json());
|
||||
adminApp.use(bodyParser.urlencoded({extended:true}));
|
||||
|
||||
adminApp.get("/auth/login",auth.login);
|
||||
|
||||
|
@@ -29,7 +29,7 @@ function createLibrary(type) {
|
||||
if (typeof result === "string") {
|
||||
res.writeHead(200, {'Content-Type': 'text/plain'});
|
||||
res.write(result);
|
||||
res.end();
|
||||
res.end();
|
||||
} else {
|
||||
res.json(result);
|
||||
}
|
||||
@@ -38,33 +38,33 @@ function createLibrary(type) {
|
||||
log.warn(log._("api.library.error-load-entry",{path:path,message:err.toString()}));
|
||||
if (err.code === 'forbidden') {
|
||||
log.audit({event: "library.get",type:type,error:"forbidden"},req);
|
||||
res.send(403);
|
||||
res.status(403).end();
|
||||
return;
|
||||
}
|
||||
}
|
||||
log.audit({event: "library.get",type:type,error:"not_found"},req);
|
||||
res.send(404);
|
||||
res.status(404).end();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
redApp.post(new RegExp("/library/"+type+"\/(.*)"),needsPermission("library.write"),function(req,res) {
|
||||
var path = req.params[0];
|
||||
var meta = req.body;
|
||||
var text = meta.text;
|
||||
delete meta.text;
|
||||
|
||||
|
||||
storage.saveLibraryEntry(type,path,meta,text).then(function() {
|
||||
log.audit({event: "library.set",type:type},req);
|
||||
res.send(204);
|
||||
res.status(204).end();
|
||||
}).otherwise(function(err) {
|
||||
log.warn(log._("api.library.error-save-entry",{path:path,message:err.toString()}));
|
||||
if (err.code === 'forbidden') {
|
||||
log.audit({event: "library.set",type:type,error:"forbidden"},req);
|
||||
res.send(403);
|
||||
res.status(403).end();
|
||||
return;
|
||||
}
|
||||
log.audit({event: "library.set",type:type,error:"unexpected_error",message:err.toString()},req);
|
||||
res.json(500,{error:"unexpected_error", message:err.toString()});
|
||||
res.status(500).json({error:"unexpected_error", message:err.toString()});
|
||||
});
|
||||
});
|
||||
}
|
||||
@@ -74,7 +74,7 @@ module.exports = {
|
||||
redApp = app;
|
||||
},
|
||||
register: createLibrary,
|
||||
|
||||
|
||||
getAll: function(req,res) {
|
||||
storage.getAllFlows().then(function(flows) {
|
||||
log.audit({event: "library.get.all",type:"flow"},req);
|
||||
@@ -92,28 +92,28 @@ module.exports = {
|
||||
log.warn(log._("api.library.error-load-flow",{path:req.params[0],message:err.toString()}));
|
||||
if (err.code === 'forbidden') {
|
||||
log.audit({event: "library.get",type:"flow",path:req.params[0],error:"forbidden"},req);
|
||||
res.send(403);
|
||||
res.status(403).end();
|
||||
return;
|
||||
}
|
||||
}
|
||||
log.audit({event: "library.get",type:"flow",path:req.params[0],error:"not_found"},req);
|
||||
res.send(404);
|
||||
res.status(404).end();
|
||||
});
|
||||
},
|
||||
post: function(req,res) {
|
||||
var flow = JSON.stringify(req.body);
|
||||
storage.saveFlow(req.params[0],flow).then(function() {
|
||||
log.audit({event: "library.set",type:"flow",path:req.params[0]},req);
|
||||
res.send(204);
|
||||
res.status(204).end();
|
||||
}).otherwise(function(err) {
|
||||
log.warn(log._("api.library.error-save-flow",{path:req.params[0],message:err.toString()}));
|
||||
if (err.code === 'forbidden') {
|
||||
log.audit({event: "library.set",type:"flow",path:req.params[0],error:"forbidden"},req);
|
||||
res.send(403);
|
||||
res.status(403).end();
|
||||
return;
|
||||
}
|
||||
log.audit({event: "library.set",type:"flow",path:req.params[0],error:"unexpected_error",message:err.toString()},req);
|
||||
res.send(500,{error:"unexpected_error", message:err.toString()});
|
||||
res.status(500).send({error:"unexpected_error", message:err.toString()});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
@@ -19,7 +19,7 @@ module.exports = {
|
||||
get: function(req,res) {
|
||||
var namespace = req.params[0];
|
||||
namespace = namespace.replace(/\.json$/,"");
|
||||
var lang = i18n.determineLangFromHeaders(req.acceptedLanguages || []);
|
||||
var lang = i18n.determineLangFromHeaders(req.acceptsLanguages() || []);
|
||||
var prevLang = i18n.i.lng();
|
||||
i18n.i.setLng(lang, function(){
|
||||
var catalog = i18n.catalog(namespace,lang);
|
||||
|
@@ -29,7 +29,7 @@ module.exports = {
|
||||
log.audit({event: "nodes.list.get"},req);
|
||||
res.json(redNodes.getNodeList());
|
||||
} else {
|
||||
var lang = i18n.determineLangFromHeaders(req.acceptedLanguages);
|
||||
var lang = i18n.determineLangFromHeaders(req.acceptsLanguages());
|
||||
log.audit({event: "nodes.configs.get"},req);
|
||||
res.send(redNodes.getNodeConfigs(lang));
|
||||
}
|
||||
@@ -38,7 +38,7 @@ module.exports = {
|
||||
post: function(req,res) {
|
||||
if (!settings.available()) {
|
||||
log.audit({event: "nodes.install",error:"settings_unavailable"},req);
|
||||
res.json(400,{error:"settings_unavailable", message:"Settings unavailable"});
|
||||
res.status(400).json({error:"settings_unavailable", message:"Settings unavailable"});
|
||||
return;
|
||||
}
|
||||
var node = req.body;
|
||||
@@ -47,7 +47,7 @@ module.exports = {
|
||||
var module = redNodes.getModuleInfo(node.module);
|
||||
if (module) {
|
||||
log.audit({event: "nodes.install",module:node.module,error:"module_already_loaded"},req);
|
||||
res.json(400,{error:"module_already_loaded", message:"Module already loaded"});
|
||||
res.status(400).json({error:"module_already_loaded", message:"Module already loaded"});
|
||||
return;
|
||||
}
|
||||
promise = server.installModule(node.module);
|
||||
@@ -55,7 +55,7 @@ module.exports = {
|
||||
promise = server.installNode(node.file);
|
||||
} else {
|
||||
log.audit({event: "nodes.install",module:node.module,error:"invalid_request"},req);
|
||||
res.json(400,{error:"invalid_request", message:"Invalid request"});
|
||||
res.status(400).json({error:"invalid_request", message:"Invalid request"});
|
||||
return;
|
||||
}
|
||||
promise.then(function(info) {
|
||||
@@ -69,13 +69,13 @@ module.exports = {
|
||||
}).otherwise(function(err) {
|
||||
if (err.code === 404) {
|
||||
log.audit({event: "nodes.install",module:node.module,file:node.file,error:"not_found"},req);
|
||||
res.send(404);
|
||||
res.status(404).end();
|
||||
} else if (err.code) {
|
||||
log.audit({event: "nodes.install",module:node.module,error:err.code},req);
|
||||
res.json(400,{error:err.code, message:err.message});
|
||||
} else {
|
||||
res.status(400).json({error:err.code, message:err.message});
|
||||
} else {
|
||||
log.audit({event: "nodes.install",module:node.module,file:node.file,error:err.code||"unexpected_error",message:err.toString()},req);
|
||||
res.json(400,{error:err.code||"unexpected_error", message:err.toString()});
|
||||
res.status(400).json({error:err.code||"unexpected_error", message:err.toString()});
|
||||
}
|
||||
});
|
||||
},
|
||||
@@ -83,7 +83,7 @@ module.exports = {
|
||||
delete: function(req,res) {
|
||||
if (!settings.available()) {
|
||||
log.audit({event: "nodes.remove",error:"settings_unavailable"},req);
|
||||
res.json(400,{error:"settings_unavailable", message:"Settings unavailable"});
|
||||
res.status(400).json({error:"settings_unavailable", message:"Settings unavailable"});
|
||||
return;
|
||||
}
|
||||
var mod = req.params.mod;
|
||||
@@ -92,7 +92,7 @@ module.exports = {
|
||||
var module = redNodes.getModuleInfo(mod);
|
||||
if (!module) {
|
||||
log.audit({event: "nodes.remove",module:mod,error:"not_found"},req);
|
||||
res.send(404);
|
||||
res.status(404).end();
|
||||
return;
|
||||
} else {
|
||||
promise = server.uninstallModule(mod);
|
||||
@@ -100,14 +100,14 @@ module.exports = {
|
||||
|
||||
promise.then(function() {
|
||||
log.audit({event: "nodes.remove",module:mod},req);
|
||||
res.send(204);
|
||||
res.status(204).end();
|
||||
}).otherwise(function(err) {
|
||||
log.audit({event: "nodes.remove",module:mod,error:err.code||"unexpected_error",message:err.toString()},req);
|
||||
res.json(400,{error:err.code||"unexpected_error", message:err.toString()});
|
||||
res.status(400).json({error:err.code||"unexpected_error", message:err.toString()});
|
||||
});
|
||||
} catch(err) {
|
||||
log.audit({event: "nodes.remove",module:mod,error:err.code||"unexpected_error",message:err.toString()},req);
|
||||
res.json(400,{error:err.code||"unexpected_error", message:err.toString()});
|
||||
res.status(400).json({error:err.code||"unexpected_error", message:err.toString()});
|
||||
}
|
||||
},
|
||||
|
||||
@@ -122,17 +122,17 @@ module.exports = {
|
||||
res.send(result);
|
||||
} else {
|
||||
log.audit({event: "nodes.info.get",id:id,error:"not_found"},req);
|
||||
res.send(404);
|
||||
res.status(404).end();
|
||||
}
|
||||
} else {
|
||||
var lang = i18n.determineLangFromHeaders(req.acceptedLanguages);
|
||||
var lang = i18n.determineLangFromHeaders(req.acceptsLanguages());
|
||||
result = redNodes.getNodeConfig(id,lang);
|
||||
if (result) {
|
||||
log.audit({event: "nodes.config.get",id:id},req);
|
||||
res.send(result);
|
||||
} else {
|
||||
log.audit({event: "nodes.config.get",id:id,error:"not_found"},req);
|
||||
res.send(404);
|
||||
res.status(404).end();
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -145,20 +145,20 @@ module.exports = {
|
||||
res.json(result);
|
||||
} else {
|
||||
log.audit({event: "nodes.module.get",module:module,error:"not_found"},req);
|
||||
res.send(404);
|
||||
res.status(404).end();
|
||||
}
|
||||
},
|
||||
|
||||
putSet: function(req,res) {
|
||||
if (!settings.available()) {
|
||||
log.audit({event: "nodes.info.set",error:"settings_unavailable"},req);
|
||||
res.json(400,{error:"settings_unavailable", message:"Settings unavailable"});
|
||||
res.status(400).json({error:"settings_unavailable", message:"Settings unavailable"});
|
||||
return;
|
||||
}
|
||||
var body = req.body;
|
||||
if (!body.hasOwnProperty("enabled")) {
|
||||
log.audit({event: "nodes.info.set",error:"invalid_request"},req);
|
||||
res.json(400,{error:"invalid_request", message:"Invalid request"});
|
||||
res.status(400).json({error:"invalid_request", message:"Invalid request"});
|
||||
return;
|
||||
}
|
||||
try {
|
||||
@@ -167,7 +167,7 @@ module.exports = {
|
||||
var info;
|
||||
if (!node) {
|
||||
log.audit({event: "nodes.info.set",id:id,error:"not_found"},req);
|
||||
res.send(404);
|
||||
res.status(404).end();
|
||||
} else {
|
||||
delete node.loaded;
|
||||
putNode(node, body.enabled).then(function(result) {
|
||||
@@ -177,20 +177,20 @@ module.exports = {
|
||||
}
|
||||
} catch(err) {
|
||||
log.audit({event: "nodes.info.set",id:id,enabled:body.enabled,error:err.code||"unexpected_error",message:err.toString()},req);
|
||||
res.json(400,{error:err.code||"unexpected_error", message:err.toString()});
|
||||
res.status(400).json({error:err.code||"unexpected_error", message:err.toString()});
|
||||
}
|
||||
},
|
||||
|
||||
putModule: function(req,res) {
|
||||
if (!settings.available()) {
|
||||
log.audit({event: "nodes.module.set",error:"settings_unavailable"},req);
|
||||
res.json(400,{error:"settings_unavailable", message:"Settings unavailable"});
|
||||
res.status(400).json({error:"settings_unavailable", message:"Settings unavailable"});
|
||||
return;
|
||||
}
|
||||
var body = req.body;
|
||||
if (!body.hasOwnProperty("enabled")) {
|
||||
log.audit({event: "nodes.module.set",error:"invalid_request"},req);
|
||||
res.json(400,{error:"invalid_request", message:"Invalid request"});
|
||||
res.status(400).json({error:"invalid_request", message:"Invalid request"});
|
||||
return;
|
||||
}
|
||||
try {
|
||||
@@ -198,7 +198,7 @@ module.exports = {
|
||||
var module = redNodes.getModuleInfo(mod);
|
||||
if (!module) {
|
||||
log.audit({event: "nodes.module.set",module:mod,error:"not_found"},req);
|
||||
return res.send(404);
|
||||
return res.status(404).end();
|
||||
}
|
||||
|
||||
var nodes = module.nodes;
|
||||
@@ -211,7 +211,7 @@ module.exports = {
|
||||
});
|
||||
} catch(err) {
|
||||
log.audit({event: "nodes.module.set",module:mod,enabled:body.enabled,error:err.code||"unexpected_error",message:err.toString()},req);
|
||||
res.json(400,{error:err.code||"unexpected_error", message:err.toString()});
|
||||
res.status(400).json({error:err.code||"unexpected_error", message:err.toString()});
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -227,7 +227,7 @@ function putNode(node, enabled) {
|
||||
} else {
|
||||
promise = redNodes.disableNode(node.id);
|
||||
}
|
||||
|
||||
|
||||
return promise.then(function(info) {
|
||||
if (info.enabled === enabled && !info.err) {
|
||||
comms.publish("node/"+(enabled?"enabled":"disabled"),info,false);
|
||||
|
@@ -43,7 +43,7 @@ function serveFile(app,baseUrl,file) {
|
||||
var url = baseUrl+path.basename(file);
|
||||
//console.log(url,"->",file);
|
||||
app.get(url,function(req, res) {
|
||||
res.sendfile(file);
|
||||
res.sendFile(file);
|
||||
});
|
||||
return "theme"+url;
|
||||
} catch(err) {
|
||||
@@ -58,13 +58,13 @@ module.exports = {
|
||||
var url;
|
||||
themeContext = clone(defaultContext);
|
||||
themeSettings = null;
|
||||
|
||||
|
||||
if (settings.editorTheme) {
|
||||
var theme = settings.editorTheme;
|
||||
themeSettings = {};
|
||||
|
||||
|
||||
var themeApp = express();
|
||||
|
||||
|
||||
if (theme.page) {
|
||||
if (theme.page.css) {
|
||||
var styles = theme.page.css;
|
||||
@@ -72,7 +72,7 @@ module.exports = {
|
||||
styles = [styles];
|
||||
}
|
||||
themeContext.page.css = [];
|
||||
|
||||
|
||||
for (i=0;i<styles.length;i++) {
|
||||
url = serveFile(themeApp,"/css/",styles[i]);
|
||||
if (url) {
|
||||
@@ -80,25 +80,25 @@ module.exports = {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (theme.page.favicon) {
|
||||
url = serveFile(themeApp,"/favicon/",theme.page.favicon)
|
||||
if (url) {
|
||||
themeContext.page.favicon = url;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
themeContext.page.title = theme.page.title || themeContext.page.title;
|
||||
}
|
||||
|
||||
|
||||
if (theme.header) {
|
||||
|
||||
|
||||
themeContext.header.title = theme.header.title || themeContext.header.title;
|
||||
|
||||
|
||||
if (theme.header.hasOwnProperty("url")) {
|
||||
themeContext.header.url = theme.header.url;
|
||||
}
|
||||
|
||||
|
||||
if (theme.header.hasOwnProperty("image")) {
|
||||
if (theme.header.image) {
|
||||
url = serveFile(themeApp,"/header/",theme.header.image);
|
||||
@@ -110,7 +110,7 @@ module.exports = {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (theme.deployButton) {
|
||||
if (theme.deployButton.type == "simple") {
|
||||
themeSettings.deployButton = {
|
||||
@@ -127,11 +127,11 @@ module.exports = {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (theme.hasOwnProperty("userMenu")) {
|
||||
themeSettings.userMenu = theme.userMenu;
|
||||
}
|
||||
|
||||
|
||||
if (theme.login) {
|
||||
if (theme.login.image) {
|
||||
url = serveFile(themeApp,"/login/",theme.login.image);
|
||||
@@ -142,11 +142,11 @@ module.exports = {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (theme.hasOwnProperty("menu")) {
|
||||
themeSettings.menu = theme.menu;
|
||||
}
|
||||
|
||||
|
||||
return themeApp;
|
||||
}
|
||||
},
|
||||
|
@@ -42,7 +42,7 @@ module.exports = {
|
||||
editorTemplate = fs.readFileSync(path.join(templateDir,"index.mst"),"utf8");
|
||||
Mustache.parse(editorTemplate);
|
||||
},
|
||||
|
||||
|
||||
ensureSlash: function(req,res,next) {
|
||||
var parts = req.originalUrl.split("?");
|
||||
if (parts[0].slice(-1) != "/") {
|
||||
@@ -55,17 +55,17 @@ module.exports = {
|
||||
},
|
||||
icon: function(req,res) {
|
||||
if (iconCache[req.params.icon]) {
|
||||
res.sendfile(iconCache[req.params.icon]); // if not found, express prints this to the console and serves 404
|
||||
} else {
|
||||
res.sendFile(iconCache[req.params.icon]); // if not found, express prints this to the console and serves 404
|
||||
} else {
|
||||
for (var p=0;p<icon_paths.length;p++) {
|
||||
var iconPath = path.join(icon_paths[p],req.params.icon);
|
||||
if (fs.existsSync(iconPath)) {
|
||||
res.sendfile(iconPath);
|
||||
res.sendFile(iconPath);
|
||||
iconCache[req.params.icon] = iconPath;
|
||||
return;
|
||||
}
|
||||
}
|
||||
res.sendfile(defaultIcon);
|
||||
res.sendFile(defaultIcon);
|
||||
}
|
||||
},
|
||||
editor: function(req,res) {
|
||||
|
Reference in New Issue
Block a user