Handle scoped node modules in the api

This commit is contained in:
Nick O'Leary 2016-05-17 21:56:03 +01:00
parent d7715b05ee
commit 9e26aeea1d
4 changed files with 18 additions and 16 deletions

View File

@ -126,12 +126,12 @@ function init(_server,_runtime) {
adminApp.get("/nodes",needsPermission("nodes.read"),nodes.getAll,errorHandler);
adminApp.post("/nodes",needsPermission("nodes.write"),nodes.post,errorHandler);
adminApp.get("/nodes/:mod",needsPermission("nodes.read"),nodes.getModule,errorHandler);
adminApp.put("/nodes/:mod",needsPermission("nodes.write"),nodes.putModule,errorHandler);
adminApp.delete("/nodes/:mod",needsPermission("nodes.write"),nodes.delete,errorHandler);
adminApp.get(/\/nodes\/((@[^\/]+\/)?[^\/]+)$/,needsPermission("nodes.read"),nodes.getModule,errorHandler);
adminApp.put(/\/nodes\/((@[^\/]+\/)?[^\/]+)$/,needsPermission("nodes.write"),nodes.putModule,errorHandler);
adminApp.delete(/\/nodes\/((@[^\/]+\/)?[^\/]+)$/,needsPermission("nodes.write"),nodes.delete,errorHandler);
adminApp.get("/nodes/:mod/:set",needsPermission("nodes.read"),nodes.getSet,errorHandler);
adminApp.put("/nodes/:mod/:set",needsPermission("nodes.write"),nodes.putSet,errorHandler);
adminApp.get(/\/nodes\/((@[^\/]+\/)?[^\/]+)\/([^\/]+)$/,needsPermission("nodes.read"),nodes.getSet,errorHandler);
adminApp.put(/\/nodes\/((@[^\/]+\/)?[^\/]+)\/([^\/]+)$/,needsPermission("nodes.write"),nodes.putSet,errorHandler);
adminApp.get('/credentials/:type/:id', needsPermission("credentials.read"),credentials.get,errorHandler);

View File

@ -87,7 +87,7 @@ module.exports = {
res.status(400).json({error:"settings_unavailable", message:"Settings unavailable"});
return;
}
var mod = req.params.mod;
var mod = req.params[0];
try {
var promise = null;
var module = redNodes.getModuleInfo(mod);
@ -114,7 +114,7 @@ module.exports = {
},
getSet: function(req,res) {
var id = req.params.mod + "/" + req.params.set;
var id = req.params[0] + "/" + req.params[2];
var result = null;
if (req.get("accept") === "application/json") {
result = redNodes.getNodeInfo(id);
@ -140,7 +140,7 @@ module.exports = {
},
getModule: function(req,res) {
var module = req.params.mod;
var module = req.params[0];
var result = redNodes.getModuleInfo(module);
if (result) {
log.audit({event: "nodes.module.get",module:module},req);
@ -163,7 +163,7 @@ module.exports = {
res.status(400).json({error:"invalid_request", message:"Invalid request"});
return;
}
var id = req.params.mod + "/" + req.params.set;
var id = req.params[0] + "/" + req.params[2];
try {
var node = redNodes.getNodeInfo(id);
var info;
@ -195,7 +195,7 @@ module.exports = {
res.status(400).json({error:"invalid_request", message:"Invalid request"});
return;
}
var mod = req.params.mod;
var mod = req.params[0];
try {
var module = redNodes.getModuleInfo(mod);
if (!module) {

View File

@ -67,11 +67,13 @@ function filterNodeInfo(n) {
function getModule(id) {
return id.split("/")[0];
var parts = id.split("/");
return parts.slice(0,parts.length-1).join("/");
}
function getNode(id) {
return id.split("/")[1];
var parts = id.split("/");
return parts[parts.length-1];
}
function saveNodeList() {

View File

@ -44,10 +44,10 @@ describe("nodes api", function() {
app.use(bodyParser.json());
app.get("/nodes",nodes.getAll);
app.post("/nodes",nodes.post);
app.get("/nodes/:mod",nodes.getModule);
app.get("/nodes/:mod/:set",nodes.getSet);
app.put("/nodes/:mod",nodes.putModule);
app.put("/nodes/:mod/:set",nodes.putSet);
app.get(/\/nodes\/((@[^\/]+\/)?[^\/]+)$/,nodes.getModule);
app.get(/\/nodes\/((@[^\/]+\/)?[^\/]+)\/([^\/]+)$/,nodes.getSet);
app.put(/\/nodes\/((@[^\/]+\/)?[^\/]+)$/,nodes.putModule);
app.put(/\/nodes\/((@[^\/]+\/)?[^\/]+)\/([^\/]+)$/,nodes.putSet);
app.delete("/nodes/:id",nodes.delete);
sinon.stub(comms,"publish");
sinon.stub(locales,"determineLangFromHeaders", function() {