diff --git a/server/EVENTS.md b/server/EVENTS.md index f6759dcf..a453c152 100644 --- a/server/EVENTS.md +++ b/server/EVENTS.md @@ -12,7 +12,7 @@ // Asks server where in the song it should be 'pos', { channel: channel_name, - pass: cBase64(hannel_pass) + pass: Base64(hannel_pass) } // Tells the server the client wants the list diff --git a/server/handlers/functions.js b/server/handlers/functions.js index e4d70935..95295047 100644 --- a/server/handlers/functions.js +++ b/server/handlers/functions.js @@ -163,7 +163,7 @@ function hash_pass(adminpass, hex) { function setSessionAdminPass(id, adminpass, list, callback) { try { - if(id == "empty") { + if(id == "empty" || id == undefined) { callback(); return; } @@ -179,7 +179,7 @@ function setSessionAdminPass(id, adminpass, list, callback) { function setSessionChatPass(id, name, pass, callback) { try { - if(id == "empty") { + if(id == "empty" || id == undefined) { callback(); return; } @@ -196,7 +196,7 @@ function setSessionChatPass(id, name, pass, callback) { function getSessionChatPass(id, callback) { try { - if(id == "empty") { + if(id == "empty" || id == undefined) { callback("", "", false); return; } @@ -222,7 +222,7 @@ function getSessionChatPass(id, callback) { function setSessionUserPass(id, userpass, list, callback) { try { - if(id == "empty") { + if(id == "empty" || id == undefined) { callback(); return; } @@ -238,7 +238,7 @@ function setSessionUserPass(id, userpass, list, callback) { function getSessionAdminUser(id, list, callback) { try { - if(id == "empty") { + if(id == "empty" || id == undefined) { callback("", "", false); return; } @@ -257,7 +257,7 @@ function getSessionAdminUser(id, list, callback) { } function removeSessionChatPass(id, callback) { - if(id == "empty") { + if(id == "empty" || id == undefined) { callback(); return; } @@ -269,7 +269,7 @@ function removeSessionChatPass(id, callback) { function removeSessionAdminPass(id, channel, callback) { - if(id == "empty") { + if(id == "empty" || id == undefined) { callback(); return; } diff --git a/server/routing/client/api.js b/server/routing/client/api.js index 81020c70..60ea23ce 100644 --- a/server/routing/client/api.js +++ b/server/routing/client/api.js @@ -74,6 +74,12 @@ var error = { success: false, results: [], }, + wrong_token: { + status: 403, + error: "You're using a faulty token. Try getting a new token, or send the request without the token.", + success: false, + results: [], + }, tooMany: { status: 429, error: "You're doing too many requests, check header-field Retry-After for the wait-time left.", @@ -186,47 +192,48 @@ router.route('/api/list/:channel_name/:video_id').delete(function(req, res) { checkTimeout(guid, res, authorized, "DELETE", function() { if(token != "" && !authorized) { updateTimeout(guid, res, authorized, "DELETE", function(err, docs) { - res.status(403).send(JSON.stringify(error.not_authenticated)); + res.status(403).send(JSON.stringify(error.wrong_token)); return; }); - } - validateLogin(adminpass, userpass, channel_name, "delete", res, function(exists) { - if(!exists) { - res.status(404).send(JSON.stringify(error.not_found.list)); - return; - } - db.collection(channel_name).find({id:video_id, now_playing: false}, function(err, docs){ - if(docs.length == 0) { - res.status(404).send(JSON.stringify(error.not_found.local)); + } else { + validateLogin(adminpass, userpass, channel_name, "delete", res, function(exists) { + if(!exists) { + res.status(404).send(JSON.stringify(error.not_found.list)); return; } - var dont_increment = false; - if(docs[0]){ - if(docs[0].type == "suggested"){ - dont_increment = true; + db.collection(channel_name).find({id:video_id, now_playing: false}, function(err, docs){ + if(docs.length == 0) { + res.status(404).send(JSON.stringify(error.not_found.local)); + return; } - db.collection(channel_name).remove({id:video_id}, function(err, docs){ - if(authorized) { - incrementToken(token); + var dont_increment = false; + if(docs[0]){ + if(docs[0].type == "suggested"){ + dont_increment = true; } - io.to(channel_name).emit("channel", {type:"deleted", value: video_id}); - if(!dont_increment) { - db.collection("frontpage_lists").update({_id: channel_name, count: {$gt: 0}}, {$inc: {count: -1}, $set:{accessed: Functions.get_time()}}, {upsert: true}, function(err, docs){ + db.collection(channel_name).remove({id:video_id}, function(err, docs){ + if(authorized) { + incrementToken(token); + } + io.to(channel_name).emit("channel", {type:"deleted", value: video_id}); + if(!dont_increment) { + db.collection("frontpage_lists").update({_id: channel_name, count: {$gt: 0}}, {$inc: {count: -1}, $set:{accessed: Functions.get_time()}}, {upsert: true}, function(err, docs){ + updateTimeout(guid, res, authorized, "DELETE", function(err, docs) { + res.status(200).send(JSON.stringify(error.no_error)); + return; + }); + }); + } else { updateTimeout(guid, res, authorized, "DELETE", function(err, docs) { res.status(200).send(JSON.stringify(error.no_error)); return; }); - }); - } else { - updateTimeout(guid, res, authorized, "DELETE", function(err, docs) { - res.status(200).send(JSON.stringify(error.no_error)); - return; - }); - } - }); - } + } + }); + } + }); }); - }); + } }); }); }); @@ -336,65 +343,66 @@ router.route('/api/conf/:channel_name').put(function(req, res) { checkTimeout(guid, res, authorized, "CONFIG", function() { if(token != "" && !authorized) { updateTimeout(guid, res, authorized, "CONFIG", function(err, docs) { - res.status(403).send(JSON.stringify(error.not_authenticated)); + res.status(403).send(JSON.stringify(error.wrong_token)); return; }); - } - validateLogin(adminpass, userpass, channel_name, "config", res, function(exists, conf) { - if(!exists && conf.length == 0) { - res.status(404).send(JSON.stringify(error.not_found.list)); - return; - } + } else { + validateLogin(adminpass, userpass, channel_name, "config", res, function(exists, conf) { + if(!exists && conf.length == 0) { + res.status(404).send(JSON.stringify(error.not_found.list)); + return; + } - if((!userpass_changed && frontpage) || (userpass_changed && userpass == "")) { - userpass = ""; - } else if(userpass_changed && userpass != "") { - frontpage = false; - } - var description = ""; + if((!userpass_changed && frontpage) || (userpass_changed && userpass == "")) { + userpass = ""; + } else if(userpass_changed && userpass != "") { + frontpage = false; + } + var description = ""; - var obj = { - addsongs:addsongs, - allvideos:allvideos, - frontpage:frontpage, - skip:skipping, - vote:voting, - removeplay:removeplay, - shuffle:shuffling, - longsongs:longsongs, - adminpass:adminpass, - desc: description, - }; - if(userpass_changed) { - obj["userpass"] = userpass; - } else if (frontpage) { - obj["userpass"] = ""; - } - db.collection(channel_name + "_settings").update({views:{$exists:true}}, { - $set:obj - }, function(err, docs){ + var obj = { + addsongs:addsongs, + allvideos:allvideos, + frontpage:frontpage, + skip:skipping, + vote:voting, + removeplay:removeplay, + shuffle:shuffling, + longsongs:longsongs, + adminpass:adminpass, + desc: description, + }; + if(userpass_changed) { + obj["userpass"] = userpass; + } else if (frontpage) { + obj["userpass"] = ""; + } + db.collection(channel_name + "_settings").update({views:{$exists:true}}, { + $set:obj + }, function(err, docs){ - if(obj.adminpass !== "") obj.adminpass = true; - if(obj.hasOwnProperty("userpass") && obj.userpass != "") obj.userpass = true; - else obj.userpass = false; - io.to(channel_name).emit("conf", [obj]); + if(obj.adminpass !== "") obj.adminpass = true; + if(obj.hasOwnProperty("userpass") && obj.userpass != "") obj.userpass = true; + else obj.userpass = false; + io.to(channel_name).emit("conf", [obj]); - db.collection("frontpage_lists").update({_id: channel_name}, {$set:{ - frontpage:frontpage, accessed: Functions.get_time()} - }, - {upsert:true}, function(err, docs){ - if(authorized) { - incrementToken(token); - } - updateTimeout(guid, res, authorized, "CONFIG", function(err, docs) { - var to_return = error.no_error; - to_return.results = [obj]; - res.status(200).send(JSON.stringify(to_return)); - return; + db.collection("frontpage_lists").update({_id: channel_name}, {$set:{ + frontpage:frontpage, accessed: Functions.get_time()} + }, + {upsert:true}, function(err, docs){ + if(authorized) { + incrementToken(token); + } + updateTimeout(guid, res, authorized, "CONFIG", function(err, docs) { + var to_return = error.no_error; + to_return.results = [obj]; + res.status(200).send(JSON.stringify(to_return)); + return; + }); }); }); }); - }); + } }); }); }); @@ -458,42 +466,43 @@ router.route('/api/list/:channel_name/:video_id').put(function(req,res) { checkTimeout(guid, res, authorized, "PUT", function() { if(token != "" && !authorized) { updateTimeout(guid, res, authorized, "PUT", function(err, docs) { - res.status(403).send(JSON.stringify(error.not_authenticated)); + res.status(403).send(JSON.stringify(error.wrong_token)); return; }); - } - validateLogin(adminpass, userpass, channel_name, "vote", res, function(exists) { - if(!exists) { - res.status(404).send(JSON.stringify(error.not_found.list)); - return; - } - db.collection(channel_name).find({id: video_id, now_playing: false, type:"video"}, function(err, song) { - if(song.length == 0) { - res.status(404).send(JSON.stringify(error.not_found.local)); + } else { + validateLogin(adminpass, userpass, channel_name, "vote", res, function(exists) { + if(!exists) { + res.status(404).send(JSON.stringify(error.not_found.list)); return; - } else if(song[0].guids.indexOf(guid) > -1) { - res.status(409).send(JSON.stringify(error.conflicting)); - return; - } else { - song[0].votes += 1; - song[0].guids.push(guid); - db.collection(channel_name).update({id: video_id}, {$inc:{votes:1}, $set:{added:Functions.get_time(), type: "video"}, $push :{guids: guid}}, function(err, success) { - if(authorized) { - incrementToken(token); - } - io.to(channel_name).emit("channel", {type: "vote", value: video_id, time: Functions.get_time()}); - List.getNextSong(channel_name, function() { - updateTimeout(guid, res, authorized, "PUT", function(err, docs) { - var to_return = error.no_error; - to_return.results = song; - res.status(200).send(JSON.stringify(to_return)); - return; + } + db.collection(channel_name).find({id: video_id, now_playing: false, type:"video"}, function(err, song) { + if(song.length == 0) { + res.status(404).send(JSON.stringify(error.not_found.local)); + return; + } else if(song[0].guids.indexOf(guid) > -1) { + res.status(409).send(JSON.stringify(error.conflicting)); + return; + } else { + song[0].votes += 1; + song[0].guids.push(guid); + db.collection(channel_name).update({id: video_id}, {$inc:{votes:1}, $set:{added:Functions.get_time(), type: "video"}, $push :{guids: guid}}, function(err, success) { + if(authorized) { + incrementToken(token); + } + io.to(channel_name).emit("channel", {type: "vote", value: video_id, time: Functions.get_time()}); + List.getNextSong(channel_name, function() { + updateTimeout(guid, res, authorized, "PUT", function(err, docs) { + var to_return = error.no_error; + to_return.results = song; + res.status(200).send(JSON.stringify(to_return)); + return; + }); }); }); - }); - } - }) - }); + } + }) + }); + } }); }); }); @@ -504,7 +513,6 @@ router.route('/api/list/:channel_name/__np__').post(function(req, res) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); res.header({"Content-Type": "application/json"}); - try { if(!req.body.hasOwnProperty('userpass')) { throw "Wrong format"; @@ -548,33 +556,36 @@ router.route('/api/list/:channel_name/__np__').post(function(req, res) { checkTimeout(guid, res, authorized, "POST", function() { if(token != "" && !authorized) { updateTimeout(guid, res, authorized, "POST", function(err, docs) { - res.status(403).send(JSON.stringify(error.not_authenticated)); + res.status(403).send(JSON.stringify(error.wrong_token)); return; }); - } - db.collection(channel_name).find({now_playing: true}, toShowChannel, function(err, list) { - if(list.length > 0) { - db.collection(channel_name + "_settings").find({ id: "config" }, function(err, conf) { - if(authorized) { - incrementToken(token); - } - if(conf.length == 0) { - res.status(404).send(JSON.stringify(error.not_found.list)); - return; - } else if(conf[0].userpass != userpass && conf[0].userpass != "" && conf[0].userpass != undefined) { - res.status(403).send(JSON.stringify(error.not_authenticated)); - return; - } - updateTimeout(guid, res, authorized, "POST", function(err, docs) { - var to_return = error.no_error; - to_return.results = list; - res.status(200).send(JSON.stringify(to_return)); + } else { + db.collection(channel_name).find({now_playing: true}, toShowChannel, function(err, list) { + if(list.length > 0) { + db.collection(channel_name + "_settings").find({ id: "config" }, function(err, conf) { + if(authorized) { + incrementToken(token); + } + if(conf.length == 0) { + res.status(404).send(JSON.stringify(error.not_found.list)); + return; + } else if(conf[0].userpass != userpass && conf[0].userpass != "" && conf[0].userpass != undefined) { + res.status(403).send(JSON.stringify(error.not_authenticated)); + return; + } + updateTimeout(guid, res, authorized, "POST", function(err, docs) { + var to_return = error.no_error; + to_return.results = list; + res.status(200).send(JSON.stringify(to_return)); + return; + }); }); - }); - } else { - res.status(404).send(JSON.stringify(error.not_found.list)); - } - }); + } else { + res.status(404).send(JSON.stringify(error.not_found.list)); + return; + } + }); + } }); }); }); @@ -668,85 +679,86 @@ router.route('/api/list/:channel_name/:video_id').post(function(req,res) { checkTimeout(guid, res, authorized, "POST", function() { if(token != "" && !authorized) { updateTimeout(guid, res, authorized, "POST", function(err, docs) { - res.status(403).send(JSON.stringify(error.not_authenticated)); + res.status(403).send(JSON.stringify(error.wrong_token)); return; }); - } - var type = fetch_only ? "fetch_song" : "add"; - validateLogin(adminpass, userpass, channel_name, type, res, function(exists, conf, authenticated) { - db.collection(channel_name).find({id: video_id}, function(err, result) { - if(result.length == 0 || result[0].type == "suggested") { - var song_type = authenticated ? "video" : "suggested"; - if(fetch_only && result.length == 0) { - res.status(404).send(JSON.stringify(error.not_found.local)); + } else { + var type = fetch_only ? "fetch_song" : "add"; + validateLogin(adminpass, userpass, channel_name, type, res, function(exists, conf, authenticated) { + db.collection(channel_name).find({id: video_id}, function(err, result) { + if(result.length == 0 || result[0].type == "suggested") { + var song_type = authenticated ? "video" : "suggested"; + if(fetch_only && result.length == 0) { + res.status(404).send(JSON.stringify(error.not_found.local)); + return; + } + db.collection(channel_name).find({now_playing: true}, function(err, now_playing) { + var set_np = false; + if(now_playing.length == 0 && authenticated) { + set_np = true; + } + var new_song = {"added": Functions.get_time(),"guids":[guid],"id":video_id,"now_playing":set_np,"title":title,"votes":1, "duration":duration, "start": parseInt(start_time), "end": parseInt(end_time), "type": song_type}; + Search.get_correct_info(new_song, channel_name, false, function(element, found) { + if(!found) { + res.status(404).send(JSON.stringify(error.not_found.youtube)); + return; + } + new_song = element; + db.collection("frontpage_lists").find({"_id": channel_name}, function(err, count) { + var create_frontpage_lists = false; + if(count.length == 0) { + create_frontpage_lists = true; + } + if(!exists) { + var configs = {"addsongs":false, "adminpass":"", "allvideos":true, "frontpage":true, "longsongs":false, "removeplay": false, "shuffle": true, "skip": false, "skips": [], "startTime":Functions.get_time(), "views": [], "vote": false, "desc": ""}; + db.collection(channel_name + "_settings").insert(configs, function(err, docs){ + io.to(channel_name).emit("conf", configs); + }); + } + db.collection(channel_name).update({"id": new_song.id}, new_song, {upsert: true}, function(err, success) { + if(authorized) { + incrementToken(token); + } + if(create_frontpage_lists) { + db.collection("frontpage_lists").update({"_id": channel_name, "count" : (authenticated ? 1 : 0), "frontpage": true, "accessed": Functions.get_time(), "viewers": 1}, {upsert: true}, function(err, docs) { + if(authenticated) { + io.to(channel_name).emit("channel", {type: "added", value: new_song}); + } else { + io.to(channel_name).emit("suggested", new_song); + } + postEnd(channel_name, configs, new_song, guid, res, authenticated, authorized); + }); + } else if(set_np) { + Frontpage.update_frontpage(channel_name, video_id, title, function() { + io.to(channel_name).emit("np", {np: [new_song], conf: [conf]}); + postEnd(channel_name, configs, new_song, guid, res, authenticated, authorized); + }); + } else { + db.collection("frontpage_lists").update({"_id": channel_name}, {$inc: {count: (authenticated ? 1 : 0)}}, function(err, docs) { + if(authenticated) { + io.to(channel_name).emit("channel", {type: "added", value: new_song}); + } else { + io.to(channel_name).emit("suggested", new_song); + } + postEnd(channel_name, configs, new_song, guid, res, authenticated, authorized); + }); + } + }); + }) + }); + }); + } else if(fetch_only) { + var to_return = error.no_error; + to_return.results = result; + res.status(200).send(JSON.stringify(to_return)); + return; + } else { + res.status(409).send(JSON.stringify(error.conflicting)); return; } - db.collection(channel_name).find({now_playing: true}, function(err, now_playing) { - var set_np = false; - if(now_playing.length == 0 && authenticated) { - set_np = true; - } - var new_song = {"added": Functions.get_time(),"guids":[guid],"id":video_id,"now_playing":set_np,"title":title,"votes":1, "duration":duration, "start": parseInt(start_time), "end": parseInt(end_time), "type": song_type}; - Search.get_correct_info(new_song, channel_name, false, function(element, found) { - if(!found) { - res.status(404).send(JSON.stringify(error.not_found.youtube)); - return; - } - new_song = element; - db.collection("frontpage_lists").find({"_id": channel_name}, function(err, count) { - var create_frontpage_lists = false; - if(count.length == 0) { - create_frontpage_lists = true; - } - if(!exists) { - var configs = {"addsongs":false, "adminpass":"", "allvideos":true, "frontpage":true, "longsongs":false, "removeplay": false, "shuffle": true, "skip": false, "skips": [], "startTime":Functions.get_time(), "views": [], "vote": false, "desc": ""}; - db.collection(channel_name + "_settings").insert(configs, function(err, docs){ - io.to(channel_name).emit("conf", configs); - }); - } - db.collection(channel_name).update({"id": new_song.id}, new_song, {upsert: true}, function(err, success) { - if(authorized) { - incrementToken(token); - } - if(create_frontpage_lists) { - db.collection("frontpage_lists").update({"_id": channel_name, "count" : (authenticated ? 1 : 0), "frontpage": true, "accessed": Functions.get_time(), "viewers": 1}, {upsert: true}, function(err, docs) { - if(authenticated) { - io.to(channel_name).emit("channel", {type: "added", value: new_song}); - } else { - io.to(channel_name).emit("suggested", new_song); - } - postEnd(channel_name, configs, new_song, guid, res, authenticated, authorized); - }); - } else if(set_np) { - Frontpage.update_frontpage(channel_name, video_id, title, function() { - io.to(channel_name).emit("np", {np: [new_song], conf: [conf]}); - postEnd(channel_name, configs, new_song, guid, res, authenticated, authorized); - }); - } else { - db.collection("frontpage_lists").update({"_id": channel_name}, {$inc: {count: (authenticated ? 1 : 0)}}, function(err, docs) { - if(authenticated) { - io.to(channel_name).emit("channel", {type: "added", value: new_song}); - } else { - io.to(channel_name).emit("suggested", new_song); - } - postEnd(channel_name, configs, new_song, guid, res, authenticated, authorized); - }); - } - }); - }) - }); - }); - } else if(fetch_only) { - var to_return = error.no_error; - to_return.results = result; - res.status(200).send(JSON.stringify(to_return)); - return; - } else { - res.status(409).send(JSON.stringify(error.conflicting)); - return; - } + }); }); - }); + } }); }); }); @@ -892,39 +904,40 @@ router.route('/api/conf/:channel_name').post(function(req, res) { checkTimeout(guid, res, authorized, "POST", function() { if(token != "" && !authorized) { updateTimeout(guid, res, authorized, "DELETE", function(err, docs) { - res.status(403).send(JSON.stringify(error.not_authenticated)); + res.status(403).send(JSON.stringify(error.wrong_token)); return; }); + } else { + db.collection(channel_name + "_settings").find({ id: "config" }, toShowConfig, function(err, docs) { + if(docs.length > 0 && docs[0].userpass == userpass) { + var conf = docs[0]; + if(conf.adminpass != "") { + conf.adminpass = true; + } else { + conf.adminpass = false; + } + if(conf.userpass != "") { + conf.userpass = true; + } else { + conf.userpass = false; + } + if(authorized) { + incrementToken(token); + } + updateTimeout(guid, res, authorized, "POST", function(err, docs) { + var to_return = error.no_error; + to_return.results = conf; + res.status(200).send(JSON.stringify(to_return)); + }); + } else if(docs.length > 0 && docs[0].userpass != userpass) { + res.status(403).send(JSON.stringify(error.not_authenticated)); + return; + } else { + res.status(404).send(JSON.stringify(error.not_found.list)); + return; + } + }); } - db.collection(channel_name + "_settings").find({ id: "config" }, toShowConfig, function(err, docs) { - if(docs.length > 0 && docs[0].userpass == userpass) { - var conf = docs[0]; - if(conf.adminpass != "") { - conf.adminpass = true; - } else { - conf.adminpass = false; - } - if(conf.userpass != "") { - conf.userpass = true; - } else { - conf.userpass = false; - } - if(authorized) { - incrementToken(token); - } - updateTimeout(guid, res, authorized, "POST", function(err, docs) { - var to_return = error.no_error; - to_return.results = conf; - res.status(200).send(JSON.stringify(to_return)); - }); - } else if(docs.length > 0 && docs[0].userpass != userpass) { - res.status(403).send(JSON.stringify(error.not_authenticated)); - return; - } else { - res.status(404).send(JSON.stringify(error.not_found.list)); - return; - } - }); }); }); }); @@ -1010,35 +1023,36 @@ router.route('/api/list/:channel_name').post(function(req, res) { checkTimeout(guid, res, authorized, "POST", function() { if(token != "" && !authorized) { updateTimeout(guid, res, authorized, "POST", function(err, docs) { - res.status(403).send(JSON.stringify(error.not_authenticated)); + res.status(403).send(JSON.stringify(error.wrong_token)); return; }); - } - db.collection(channel_name).find({views: {$exists: false}}, toShowChannel, function(err, list) { - if(list.length > 0) { - db.collection(channel_name + "_settings").find({ id: "config" }, function(err, conf) { - if(conf.length == 0) { - res.status(404).send(JSON.stringify(error.not_found.list)); - return; - } else if(conf[0].userpass != userpass && conf[0].userpass != "" && conf[0].userpass != undefined) { - res.status(403).send(JSON.stringify(error.not_authenticated)); - return; - } - if(authorized) { - incrementToken(token); - } - updateTimeout(guid, res, authorized, "POST", function(err, docs) { - var to_return = error.no_error; - to_return.results = list; - res.status(200).send(JSON.stringify(to_return)); - return; + } else { + db.collection(channel_name).find({views: {$exists: false}}, toShowChannel, function(err, list) { + if(list.length > 0) { + db.collection(channel_name + "_settings").find({ id: "config" }, function(err, conf) { + if(conf.length == 0) { + res.status(404).send(JSON.stringify(error.not_found.list)); + return; + } else if(conf[0].userpass != userpass && conf[0].userpass != "" && conf[0].userpass != undefined) { + res.status(403).send(JSON.stringify(error.not_authenticated)); + return; + } + if(authorized) { + incrementToken(token); + } + updateTimeout(guid, res, authorized, "POST", function(err, docs) { + var to_return = error.no_error; + to_return.results = list; + res.status(200).send(JSON.stringify(to_return)); + return; + }); }); - }); - } else { - res.status(404).send(JSON.stringify(error.not_found.list)); - return; - } - }); + } else { + res.status(404).send(JSON.stringify(error.not_found.list)); + return; + } + }); + } }); }); });