From 9b18fb39bae5a792af5501f8d4ac07855b12fa72 Mon Sep 17 00:00:00 2001 From: Moe Date: Sat, 11 Jul 2020 14:00:14 -0700 Subject: [PATCH] sqlQuery Conversion : webServerPaths.js --- libs/webServerPaths.js | 1120 ++++++++++++++++++++-------------------- 1 file changed, 550 insertions(+), 570 deletions(-) diff --git a/libs/webServerPaths.js b/libs/webServerPaths.js index 9646791b..45b8ad81 100644 --- a/libs/webServerPaths.js +++ b/libs/webServerPaths.js @@ -85,7 +85,18 @@ module.exports = function(s,config,lang,app,io){ if(s.group[req.params.ke]&&s.group[req.params.ke].users[req.params.auth]){ delete(s.api[req.params.auth]); delete(s.group[req.params.ke].users[req.params.auth]); - s.sqlQuery("UPDATE Users SET auth=? WHERE auth=? AND ke=? AND uid=?",['',req.params.auth,req.params.ke,req.params.id]) + s.knexQuery({ + action: "update", + table: "Users", + update: { + auth: '', + }, + where: [ + ['auth','=',req.params.auth], + ['ke','=',req.params.ke], + ['uid','=',req.params.id], + ] + }) res.end(s.prettyPrint({ok:true,msg:'You have been logged out, session key is now inactive.'})) }else{ res.end(s.prettyPrint({ok:false,msg:'This group key does not exist or this user is not logged in.'})) @@ -236,16 +247,23 @@ module.exports = function(s,config,lang,app,io){ ip: req.ip } } - if(board==='super'){ + if(board === 'super'){ s.userLog(logTo,logData) }else{ - s.sqlQuery('SELECT ke,uid,details FROM Users WHERE mail=?',[req.body.mail],function(err,r) { - if(r&&r[0]){ + s.knexQuery({ + action: "select", + columns: "ke,uid,details", + table: "Users", + where: [ + ['mail','=',req.body.mail], + ] + },(err,r) => { + if(r && r[0]){ r = r[0] - r.details=JSON.parse(r.details); - r.lang=s.getLanguageFile(r.details.lang) - logData.id=r.uid - logData.type=r.lang['Authentication Failed'] + r.details = JSON.parse(r.details) + r.lang = s.getLanguageFile(r.details.lang) + logData.id = r.uid + logData.type = r.lang['Authentication Failed'] logTo.ke = r.ke } s.userLog(logTo,logData) @@ -255,8 +273,16 @@ module.exports = function(s,config,lang,app,io){ checkRoute = function(r){ switch(req.body.function){ case'cam': - s.sqlQuery('SELECT * FROM Monitors WHERE ke=? AND type=?',[r.ke,"dashcam"],function(err,rr){ - req.resp.mons=rr; + s.knexQuery({ + action: "select", + columns: "*", + table: "Monitors", + where: [ + ['ke','=',r.ke], + ['type','=','dashcam'], + ] + },(err,rr) => { + req.resp.mons = rr renderPage(config.renderPaths.dashcam,{ // config: s.getConfigWithBranding(req.hostname), $user: req.resp, @@ -267,7 +293,15 @@ module.exports = function(s,config,lang,app,io){ }) break; case'streamer': - s.sqlQuery('SELECT * FROM Monitors WHERE ke=? AND type=?',[r.ke,"socket"],function(err,rr){ + s.knexQuery({ + action: "select", + columns: "*", + table: "Monitors", + where: [ + ['ke','=',r.ke], + ['type','=','socket'], + ] + },(err,rr) => { req.resp.mons=rr; renderPage(config.renderPaths.streamer,{ // config: s.getConfigWithBranding(req.hostname), @@ -280,8 +314,23 @@ module.exports = function(s,config,lang,app,io){ break; case'admin': if(!r.details.sub){ - s.sqlQuery('SELECT uid,mail,details FROM Users WHERE ke=? AND details LIKE \'%"sub"%\'',[r.ke],function(err,rr) { - s.sqlQuery('SELECT * FROM Monitors WHERE ke=?',[r.ke],function(err,rrr) { + s.knexQuery({ + action: "select", + columns: "uid,mail,details", + table: "Users", + where: [ + ['ke','=',r.ke], + ['details','LIKE','%"sub"%'], + ] + },(err,rr) => { + s.knexQuery({ + action: "select", + columns: "*", + table: "Monitors", + where: [ + ['ke','=',r.ke], + ] + },(err,rrr) => { renderPage(config.renderPaths.admin,{ config: s.getConfigWithBranding(req.hostname), $user: req.resp, @@ -333,11 +382,30 @@ module.exports = function(s,config,lang,app,io){ } if(req.body.mail&&req.body.pass){ req.default=function(){ - s.sqlQuery('SELECT * FROM Users WHERE mail=? AND pass=?',[req.body.mail,s.createHash(req.body.pass)],function(err,r) { + s.knexQuery({ + action: "select", + columns: "*", + table: "Users", + where: [ + ['mail','=',req.body.mail], + ['pass','=',s.createHash(req.body.pass)], + ], + limit: 1 + },(err,r) => { req.resp={ok:false}; if(!err&&r&&r[0]){ r=r[0];r.auth=s.md5(s.gid()); - s.sqlQuery("UPDATE Users SET auth=? WHERE ke=? AND uid=?",[r.auth,r.ke,r.uid]) + s.knexQuery({ + action: "update", + table: "Users", + update: { + auth: r.auth + }, + where: [ + ['ke','=',r.ke], + ['uid','=',r.uid], + ] + }) req.resp={ok:true,auth_token:r.auth,ke:r.ke,uid:r.uid,mail:r.mail,details:r.details}; r.details=JSON.parse(r.details); r.lang=s.getLanguageFile(r.details.lang) @@ -380,7 +448,15 @@ module.exports = function(s,config,lang,app,io){ } } if(r.details.sub){ - s.sqlQuery('SELECT details FROM Users WHERE ke=? AND details NOT LIKE ?',[r.ke,'%"sub"%'],function(err,rr) { + s.knexQuery({ + action: "select", + columns: "details", + table: "Users", + where: [ + ['ke','=',r.ke], + ['details','NOT LIKE','%"sub"%'], + ], + },function(err,rr) { if(rr && rr[0]){ rr=rr[0]; rr.details=JSON.parse(rr.details); @@ -400,7 +476,15 @@ module.exports = function(s,config,lang,app,io){ }) } if(LdapAuth&&req.body.function==='ldap'&&req.body.key!==''){ - s.sqlQuery('SELECT * FROM Users WHERE ke=? AND details NOT LIKE ?',[req.body.key,'%"sub"%'],function(err,r) { + s.knexQuery({ + action: "select", + columns: "*", + table: "Users", + where: [ + ['ke','=',req.body.key], + ['details','NOT LIKE','%"sub"%'], + ], + },(err,r) => { if(r&&r[0]){ r=r[0] r.details=JSON.parse(r.details) @@ -449,7 +533,7 @@ module.exports = function(s,config,lang,app,io){ if(!user.uid){ user.uid=s.gid() } - req.resp={ + req.resp = { ke:req.body.key, uid:user.uid, auth:s.createHash(s.gid()), @@ -462,12 +546,16 @@ module.exports = function(s,config,lang,app,io){ filter: {} }) } - user.post=[] - Object.keys(req.resp).forEach(function(v){ - user.post.push(req.resp[v]) - }) s.userLog({ke:req.body.key,mid:'$USER'},{type:r.lang['LDAP Success'],msg:{user:user}}) - s.sqlQuery('SELECT * FROM Users WHERE ke=? AND mail=?',[req.body.key,user.cn],function(err,rr){ + s.knexQuery({ + action: "select", + columns: "*", + table: "Users", + where: [ + ['ke','=',req.body.key], + ['mail','=',user.cn], + ], + },function(err,rr) { if(rr&&rr[0]){ //already registered rr=rr[0] @@ -475,12 +563,26 @@ module.exports = function(s,config,lang,app,io){ rr.details=JSON.parse(rr.details) req.resp.lang=s.getLanguageFile(rr.details.lang) s.userLog({ke:req.body.key,mid:'$USER'},{type:r.lang['LDAP User Authenticated'],msg:{user:user,shinobiUID:rr.uid}}) - s.sqlQuery("UPDATE Users SET auth=? WHERE ke=? AND uid=?",[req.resp.auth,req.resp.ke,rr.uid]) + s.knexQuery({ + action: "update", + table: "Users", + update: { + auth: req.resp.auth + }, + where: [ + ['ke','=',req.resp.ke], + ['uid','=',rr.uid], + ] + }) }else{ //new ldap login s.userLog({ke:req.body.key,mid:'$USER'},{type:r.lang['LDAP User is New'],msg:{info:r.lang['Creating New Account'],user:user}}) req.resp.lang=r.lang - s.sqlQuery('INSERT INTO Users (ke,uid,auth,mail,pass,details) VALUES (?,?,?,?,?,?)',user.post) + s.knexQuery({ + action: "insert", + table: "Users", + insert: req.resp, + }) } req.resp.details = JSON.stringify(req.resp.details) req.resp.auth_token = req.resp.auth @@ -516,7 +618,16 @@ module.exports = function(s,config,lang,app,io){ users: true, md5: true },function(data){ - s.sqlQuery('SELECT * FROM Logs WHERE ke=? ORDER BY `time` DESC LIMIT 30',['$'],function(err,r) { + s.knexQuery({ + action: "select", + columns: "*", + table: "Logs", + where: [ + ['ke','=','$'], + ], + orderBy: ['time','desc'], + limit: 30 + },(err,r) => { if(!r){ r=[] } @@ -548,7 +659,17 @@ module.exports = function(s,config,lang,app,io){ } if(!req.details.acceptedMachines[req.body.machineID]){ req.details.acceptedMachines[req.body.machineID]={} - s.sqlQuery("UPDATE Users SET details=? WHERE ke=? AND uid=?",[s.prettyPrint(req.details),req.body.ke,req.body.id]) + s.knexQuery({ + action: "update", + table: "Users", + update: { + details: s.prettyPrint(req.details) + }, + where: [ + ['ke','=',req.body.ke], + ['uid','=',req.body.id], + ] + }) } } req.body.function = s.factorAuth[req.body.ke][req.body.id].function @@ -588,115 +709,115 @@ module.exports = function(s,config,lang,app,io){ res.end(s.prettyPrint({ok:true})) }) }) - /** - * Page : Montage - stand alone squished view with gridstackjs - */ - app.get([ - config.webPaths.apiPrefix+':auth/grid/:ke', - config.webPaths.apiPrefix+':auth/grid/:ke/:group', - config.webPaths.apiPrefix+':auth/cycle/:ke', - config.webPaths.apiPrefix+':auth/cycle/:ke/:group' - ], function(req,res) { - s.auth(req.params,function(user){ - if(user.permissions.get_monitors==="0"){ - res.end(user.lang['Not Permitted']) - return - } - - req.params.protocol=req.protocol; - req.sql='SELECT * FROM Monitors WHERE mode!=? AND mode!=? AND ke=?';req.ar=['stop','idle',req.params.ke]; - if(!req.params.id){ - if(user.details.sub&&user.details.monitors&&user.details.allmonitors!=='1'){ - try{user.details.monitors=JSON.parse(user.details.monitors);}catch(er){} - req.or=[]; - user.details.monitors.forEach(function(v,n){ - req.or.push('mid=?');req.ar.push(v) - }) - req.sql+=' AND ('+req.or.join(' OR ')+')' - } - }else{ - if(!user.details.sub||user.details.allmonitors!=='0'||user.details.monitors.indexOf(req.params.id)>-1){ - req.sql+=' and mid=?';req.ar.push(req.params.id) - }else{ - res.end(user.lang['There are no monitors that you can view with this account.']); - return; - } - } - s.sqlQuery(req.sql,req.ar,function(err,r){ - if(req.params.group){ - var filteredByGroupCheck = {}; - var filteredByGroup = []; - r.forEach(function(v,n){ - var details = JSON.parse(r[n].details); - try{ - req.params.group.split('|').forEach(function(group){ - var groups = JSON.parse(details.groups); - if(groups.indexOf(group) > -1 && !filteredByGroupCheck[v.mid]){ - filteredByGroupCheck[v.mid] = true; - filteredByGroup.push(v) - } - }) - }catch(err){ - - } - }) - r = filteredByGroup; - } - r.forEach(function(v,n){ - if(s.group[v.ke]&&s.group[v.ke].activeMonitors[v.mid]&&s.group[v.ke].activeMonitors[v.mid].watch){ - r[n].currentlyWatching=Object.keys(s.group[v.ke].activeMonitors[v.mid].watch).length - } - r[n].subStream={} - var details = JSON.parse(r[n].details) - if(details.snap==='1'){ - r[n].subStream.jpeg = '/'+req.params.auth+'/jpeg/'+v.ke+'/'+v.mid+'/s.jpg' - } - if(details.stream_channels&&details.stream_channels!==''){ - try{ - details.stream_channels=JSON.parse(details.stream_channels) - r[n].channels=[] - details.stream_channels.forEach(function(b,m){ - var streamURL - switch(b.stream_type){ - case'mjpeg': - streamURL='/'+req.params.auth+'/mjpeg/'+v.ke+'/'+v.mid+'/'+m - break; - case'hls': - streamURL='/'+req.params.auth+'/hls/'+v.ke+'/'+v.mid+'/'+m+'/s.m3u8' - break; - case'h264': - streamURL='/'+req.params.auth+'/h264/'+v.ke+'/'+v.mid+'/'+m - break; - case'flv': - streamURL='/'+req.params.auth+'/flv/'+v.ke+'/'+v.mid+'/'+m+'/s.flv' - break; - case'mp4': - streamURL='/'+req.params.auth+'/mp4/'+v.ke+'/'+v.mid+'/'+m+'/s.mp4' - break; - } - r[n].channels.push(streamURL) - }) - }catch(err){ - s.userLog(req.params,{type:'Broken Monitor Object',msg:'Stream Channels Field is damaged. Skipping.'}) - } - } - }) - var page = config.renderPaths.grid - if(req.path.indexOf('/cycle/') > -1){ - page = config.renderPaths.cycle - } - s.renderPage(req,res,page,{ - data:Object.assign(req.params,req.query), - baseUrl:req.protocol+'://'+req.hostname, - config: s.getConfigWithBranding(req.hostname), - lang:user.lang, - $user:user, - monitors:r, - query:req.query - }); - }) - },res,req) - }); + // /** + // * Page : Montage - stand alone squished view with gridstackjs + // */ + // app.get([ + // config.webPaths.apiPrefix+':auth/grid/:ke', + // config.webPaths.apiPrefix+':auth/grid/:ke/:group', + // config.webPaths.apiPrefix+':auth/cycle/:ke', + // config.webPaths.apiPrefix+':auth/cycle/:ke/:group' + // ], function(req,res) { + // s.auth(req.params,function(user){ + // if(user.permissions.get_monitors==="0"){ + // res.end(user.lang['Not Permitted']) + // return + // } + // + // req.params.protocol=req.protocol; + // req.sql='SELECT * FROM Monitors WHERE mode!=? AND mode!=? AND ke=?';req.ar=['stop','idle',req.params.ke]; + // if(!req.params.id){ + // if(user.details.sub&&user.details.monitors&&user.details.allmonitors!=='1'){ + // try{user.details.monitors=JSON.parse(user.details.monitors);}catch(er){} + // req.or=[]; + // user.details.monitors.forEach(function(v,n){ + // req.or.push('mid=?');req.ar.push(v) + // }) + // req.sql+=' AND ('+req.or.join(' OR ')+')' + // } + // }else{ + // if(!user.details.sub||user.details.allmonitors!=='0'||user.details.monitors.indexOf(req.params.id)>-1){ + // req.sql+=' and mid=?';req.ar.push(req.params.id) + // }else{ + // res.end(user.lang['There are no monitors that you can view with this account.']); + // return; + // } + // } + // s.sqlQuery(req.sql,req.ar,function(err,r){ + // if(req.params.group){ + // var filteredByGroupCheck = {}; + // var filteredByGroup = []; + // r.forEach(function(v,n){ + // var details = JSON.parse(r[n].details); + // try{ + // req.params.group.split('|').forEach(function(group){ + // var groups = JSON.parse(details.groups); + // if(groups.indexOf(group) > -1 && !filteredByGroupCheck[v.mid]){ + // filteredByGroupCheck[v.mid] = true; + // filteredByGroup.push(v) + // } + // }) + // }catch(err){ + // + // } + // }) + // r = filteredByGroup; + // } + // r.forEach(function(v,n){ + // if(s.group[v.ke]&&s.group[v.ke].activeMonitors[v.mid]&&s.group[v.ke].activeMonitors[v.mid].watch){ + // r[n].currentlyWatching=Object.keys(s.group[v.ke].activeMonitors[v.mid].watch).length + // } + // r[n].subStream={} + // var details = JSON.parse(r[n].details) + // if(details.snap==='1'){ + // r[n].subStream.jpeg = '/'+req.params.auth+'/jpeg/'+v.ke+'/'+v.mid+'/s.jpg' + // } + // if(details.stream_channels&&details.stream_channels!==''){ + // try{ + // details.stream_channels=JSON.parse(details.stream_channels) + // r[n].channels=[] + // details.stream_channels.forEach(function(b,m){ + // var streamURL + // switch(b.stream_type){ + // case'mjpeg': + // streamURL='/'+req.params.auth+'/mjpeg/'+v.ke+'/'+v.mid+'/'+m + // break; + // case'hls': + // streamURL='/'+req.params.auth+'/hls/'+v.ke+'/'+v.mid+'/'+m+'/s.m3u8' + // break; + // case'h264': + // streamURL='/'+req.params.auth+'/h264/'+v.ke+'/'+v.mid+'/'+m + // break; + // case'flv': + // streamURL='/'+req.params.auth+'/flv/'+v.ke+'/'+v.mid+'/'+m+'/s.flv' + // break; + // case'mp4': + // streamURL='/'+req.params.auth+'/mp4/'+v.ke+'/'+v.mid+'/'+m+'/s.mp4' + // break; + // } + // r[n].channels.push(streamURL) + // }) + // }catch(err){ + // s.userLog(req.params,{type:'Broken Monitor Object',msg:'Stream Channels Field is damaged. Skipping.'}) + // } + // } + // }) + // var page = config.renderPaths.grid + // if(req.path.indexOf('/cycle/') > -1){ + // page = config.renderPaths.cycle + // } + // s.renderPage(req,res,page,{ + // data:Object.assign(req.params,req.query), + // baseUrl:req.protocol+'://'+req.hostname, + // config: s.getConfigWithBranding(req.hostname), + // lang:user.lang, + // $user:user, + // monitors:r, + // query:req.query + // }); + // }) + // },res,req) + // }); /** * API : Get TV Channels (Monitor Streams) json */ @@ -707,62 +828,49 @@ module.exports = function(s,config,lang,app,io){ req.params.password = req.query.password } var output = ['h264','hls','mp4'] - if(req.query.output&&req.query.output!==''){ + if( + req.query.output && + req.query.output !== '' + ){ output = req.query.output.split(',') output.forEach(function(type,n){ - if(type==='ts'){ - output[n]='h264' - if(output.indexOf('hls')===-1){ + if(type === 'ts'){ + output[n] = 'h264' + if(output.indexOf('hls') === -1){ output.push('hls') } } }) } - var isM3u8 = false; - if(req.query.type==='m3u8'||req.query.type==='m3u_plus'){ - //is m3u8 - isM3u8 = true; - }else{ - res.setHeader('Content-Type', 'application/json'); - } - req.fn=function(user){ + const isM3u8 = req.query.type === 'm3u8' || req.query.type === 'm3u_plus' + s.auth(req.params,function(user){ if(user.permissions.get_monitors==="0"){ res.end(s.prettyPrint([])) return } - if(!req.params.ke){ - req.params.ke = user.ke; - } - if(req.query.id&&!req.params.id){ - req.params.id = req.query.id; - } - req.sql='SELECT * FROM Monitors WHERE mode!=? AND ke=?';req.ar=['stop',req.params.ke]; - if(!req.params.id){ - if(user.details.sub&&user.details.monitors&&user.details.allmonitors!=='1'){ - try{user.details.monitors=JSON.parse(user.details.monitors);}catch(er){} - req.or=[]; - user.details.monitors.forEach(function(v,n){ - req.or.push('mid=?');req.ar.push(v) - }) - req.sql+=' AND ('+req.or.join(' OR ')+')' - } - }else{ - if(!user.details.sub||user.details.allmonitors!=='0'||user.details.monitors.indexOf(req.params.id)>-1){ - req.sql+=' and mid=?';req.ar.push(req.params.id) - }else{ - res.end('[]'); - return; - } - } - s.sqlQuery(req.sql,req.ar,function(err,r){ + const groupKey = user.ke + const monitorId = req.params.id + const monitorRestrictions = s.getMonitorRestrictions(user.details,monitorId) + s.knexQuery({ + action: "select", + columns: "*", + table: "Monitors", + where: [ + ['ke','=',groupKey], + ['mode','!=','stop'], + [ + monitorRestrictions + ] + ] + },(err,r) => { var tvChannelMonitors = []; r.forEach(function(v,n){ var buildStreamURL = function(channelRow,type,channelNumber){ var streamURL - if(req.query.streamtype && req.query.streamtype != type){ - return - } - if(channelNumber){channelNumber = '/'+channelNumber}else{channelNumber=''} + if(req.query.streamtype && req.query.streamtype != type){ + return + } + if(channelNumber){channelNumber = '/' + channelNumber}else{channelNumber = ''} switch(type){ case'mjpeg': streamURL='/'+req.params.auth+'/mjpeg/'+v.ke+'/'+v.mid+channelNumber @@ -819,7 +927,7 @@ module.exports = function(s,config,lang,app,io){ tvChannelMonitors.forEach(function(channelRow,n){ output.forEach(function(type){ if(channelRow.streamsSortedByType[type]){ - if(req.query.type==='m3u_plus'){ + if(req.query.type === 'm3u_plus'){ m3u8 +='#EXTINF-1 tvg-id="'+channelRow.mid+'" tvg-name="'+channelRow.channel+'" tvg-logo="'+req.protocol+'://'+req.headers.host+channelRow.snapshot+'" group-title="'+channelRow.groupTitle+'",'+channelRow.channel+'\n' }else{ m3u8 +='#EXTINF:-1,'+channelRow.channel+' ('+type.toUpperCase()+') \n' @@ -830,12 +938,11 @@ module.exports = function(s,config,lang,app,io){ }) res.end(m3u8) }else{ - if(tvChannelMonitors.length===1){tvChannelMonitors=tvChannelMonitors[0];} - res.end(s.prettyPrint(tvChannelMonitors)); + if(tvChannelMonitors.length === 1)tvChannelMonitors=tvChannelMonitors[0]; + s.closeJsonResponse(res,tvChannelMonitors) } }) - } - s.auth(req.params,req.fn,res,req); + },res,req); }); /** * API : Get Monitors @@ -843,30 +950,25 @@ module.exports = function(s,config,lang,app,io){ app.get([config.webPaths.apiPrefix+':auth/monitor/:ke',config.webPaths.apiPrefix+':auth/monitor/:ke/:id'], function (req,res){ req.ret={ok:false}; res.setHeader('Content-Type', 'application/json'); - req.fn=function(user){ - if(user.permissions.get_monitors==="0"){ - res.end(s.prettyPrint([])) - return - } - req.sql='SELECT * FROM Monitors WHERE ke=?';req.ar=[req.params.ke]; - if(!req.params.id){ - if(user.details.sub&&user.details.monitors&&user.details.allmonitors!=='1'){ - try{user.details.monitors=JSON.parse(user.details.monitors);}catch(er){} - req.or=[]; - user.details.monitors.forEach(function(v,n){ - req.or.push('mid=?');req.ar.push(v) - }) - req.sql+=' AND ('+req.or.join(' OR ')+')' - } - }else{ - if(!user.details.sub||user.details.allmonitors!=='0'||user.details.monitors.indexOf(req.params.id)>-1){ - req.sql+=' and mid=?';req.ar.push(req.params.id) - }else{ - res.end('[]'); - return; - } + s.auth(req.params,(user){ + if(user.permissions.get_monitors==="0"){ + res.end(s.prettyPrint([])) + return } - s.sqlQuery(req.sql,req.ar,function(err,r){ + const groupKey = user.ke + const monitorId = req.params.id + const monitorRestrictions = s.getMonitorRestrictions(user.details,monitorId) + s.knexQuery({ + action: "select", + columns: "*", + table: "Monitors", + where: [ + ['ke','=',groupKey], + [ + monitorRestrictions + ] + ] + },(err,r) => { r.forEach(function(v,n){ if(s.group[v.ke] && s.group[v.ke].activeMonitors[v.mid]){ r[n].currentlyWatching = Object.keys(s.group[v.ke].activeMonitors[v.mid].watch).length @@ -920,8 +1022,7 @@ module.exports = function(s,config,lang,app,io){ if(r.length===1){r=r[0];} res.end(s.prettyPrint(r)); }) - } - s.auth(req.params,req.fn,res,req); + },res,req); }); /** * API : Merge Recorded Videos into one file @@ -934,21 +1035,31 @@ module.exports = function(s,config,lang,app,io){ if(req.query.videos && req.query.videos !== ''){ s.auth(req.params,function(user){ var videosSelected = JSON.parse(req.query.videos) - var where = [] - var values = [] + const whereQuery = [] + var didOne = false videosSelected.forEach(function(video){ - where.push("(ke=? AND mid=? AND `time`=?)") - if(!video.ke)video.ke = req.params.ke - values.push(video.ke) - values.push(video.mid) var time = s.nameToTime(video.filename) if(req.query.isUTC === 'true'){ time = s.utcToLocal(time) } - time = new Date(time) - values.push(time) + if(didOne){ + whereQuery.push(['or','ke','=',req.params.ke]) + }else{ + didOne = false + whereQuery.push(['ke','=',req.params.ke]) + } + whereQuery.push( + ['mid','=',video.mid], + ['time','=',time], + ) + }) - s.sqlQuery('SELECT * FROM Videos WHERE '+where.join(' OR '),values,function(err,r){ + s.knexQuery({ + action: "select", + columns: "*", + table: "Videos", + where: whereQuery + },(err,r) => { var resp = {ok: false} if(r && r[0]){ s.mergeRecordedVideos(r,req.params.ke,function(fullPath,filename){ @@ -1014,6 +1125,7 @@ module.exports = function(s,config,lang,app,io){ (!userDetails.video_view || userDetails.video_view.indexOf(monitorId)===-1) ) },(response) => { + console.log(response) s.buildVideoLinks(response.videos,{ auth : req.params.auth, videoParam : videoParam, @@ -1105,35 +1217,38 @@ module.exports = function(s,config,lang,app,io){ app.get(config.webPaths.apiPrefix+':auth/smonitor/:ke', function (req,res){ req.ret={ok:false}; res.setHeader('Content-Type', 'application/json'); - req.fn=function(user){ + s.auth(req.params,(user) => { if(user.permissions.get_monitors==="0"){ res.end(s.prettyPrint([])) return } - req.sql='SELECT * FROM Monitors WHERE ke=?';req.ar=[req.params.ke]; - if(user.details.sub&&user.details.monitors&&user.details.allmonitors!=='1'){ - try{user.details.monitors=JSON.parse(user.details.monitors);}catch(er){} - req.or=[]; - user.details.monitors.forEach(function(v,n){ - req.or.push('mid=?');req.ar.push(v) + const groupKey = user.ke + const monitorId = req.params.id + const monitorRestrictions = s.getMonitorRestrictions(user.details,monitorId) + s.knexQuery({ + action: "select", + columns: "*", + table: "Monitors", + where: [ + ['ke','=',groupKey], + [ + monitorRestrictions + ] + ] + },(err,r) => { + const startedMonitors = [] + r.forEach(function(v){ + if( + s.group[groupKey] && + s.group[groupKey].activeMonitors[v.mid] && + s.group[groupKey].activeMonitors[v.mid].isStarted === true + ){ + startedMonitors.push(v) + } }) - req.sql+=' AND ('+req.or.join(' OR ')+')' - } - s.sqlQuery(req.sql,req.ar,function(err,r){ - if(r&&r[0]){ - req.ar=[]; - r.forEach(function(v){ - if(s.group[req.params.ke]&&s.group[req.params.ke].activeMonitors[v.mid]&&s.group[req.params.ke].activeMonitors[v.mid].isStarted === true){ - req.ar.push(v) - } - }) - }else{ - req.ar=[]; - } - res.end(s.prettyPrint(req.ar)); + s.closeJsonResponse(res,startedMonitors) }) - } - s.auth(req.params,req.fn,res,req); + },res,req); }); /** * API : Monitor Mode Controller @@ -1152,9 +1267,18 @@ module.exports = function(s,config,lang,app,io){ res.end(s.prettyPrint(req.ret)); return; } - s.sqlQuery('SELECT * FROM Monitors WHERE ke=? AND mid=?',[req.params.ke,req.params.id],function(err,r){ - if(r&&r[0]){ - r=r[0]; + s.knexQuery({ + action: "select", + columns: "*", + table: "Monitors", + where: [ + ['ke','=',req.params.ke], + ['mid','=',req.params.id], + ], + limit: 1 + },(err,r) => { + if(r && r[0]){ + r = r[0]; if(req.query.reset==='1'||(s.group[r.ke]&&s.group[r.ke].rawMonitorConfigurations[r.mid].mode!==req.params.f)||req.query.fps&&(!s.group[r.ke].activeMonitors[r.mid].currentState||!s.group[r.ke].activeMonitors[r.mid].currentState.trigger_on)){ if(req.query.reset!=='1'||!s.group[r.ke].activeMonitors[r.mid].trigger_timer){ if(!s.group[r.ke].activeMonitors[r.mid].currentState)s.group[r.ke].activeMonitors[r.mid].currentState={} @@ -1172,7 +1296,17 @@ module.exports = function(s,config,lang,app,io){ s.group[r.ke].activeMonitors[r.mid].currentState.detector_trigger_record_fps=r.fps } r.id=r.mid; - s.sqlQuery('UPDATE Monitors SET mode=? WHERE ke=? AND mid=?',[r.mode,r.ke,r.mid]); + s.knexQuery({ + action: "update", + table: "Monitors", + update: { + mode: r.mode + }, + where: [ + ['ke','=',r.ke], + ['mid','=',r.mid], + ] + }) s.group[r.ke].rawMonitorConfigurations[r.mid]=r; s.tx({f:'monitor_edit',mid:r.mid,ke:r.ke,mon:r},'GRP_'+r.ke); s.tx({f:'monitor_edit',mid:r.mid,ke:r.ke,mon:r},'STR_'+r.ke); @@ -1205,7 +1339,17 @@ module.exports = function(s,config,lang,app,io){ } s.group[r.ke].activeMonitors[r.mid].trigger_timer=setTimeout(function(){ delete(s.group[r.ke].activeMonitors[r.mid].trigger_timer) - s.sqlQuery('UPDATE Monitors SET mode=? WHERE ke=? AND mid=?',[s.group[r.ke].activeMonitors[r.mid].currentState.mode,r.ke,r.mid]); + s.knexQuery({ + action: "update", + table: "Monitors", + update: { + mode: s.group[r.ke].activeMonitors[r.mid].currentState.mode + }, + where: [ + ['ke','=',r.ke], + ['mid','=',r.mid], + ] + }) r.neglectTriggerTimer=1; r.mode=s.group[r.ke].activeMonitors[r.mid].currentState.mode; r.fps=s.group[r.ke].activeMonitors[r.mid].currentState.fps; @@ -1231,37 +1375,32 @@ module.exports = function(s,config,lang,app,io){ },res,req); }) /** - * API : Get fileBin files + * API : Get fileBin file rows */ app.get([config.webPaths.apiPrefix+':auth/fileBin/:ke',config.webPaths.apiPrefix+':auth/fileBin/:ke/:id'],function (req,res){ res.setHeader('Content-Type', 'application/json'); - req.fn=function(user){ - req.sql='SELECT * FROM Files WHERE ke=?';req.ar=[req.params.ke]; - if(user.details.sub&&user.details.monitors&&user.details.allmonitors!=='1'){ - try{user.details.monitors=JSON.parse(user.details.monitors);}catch(er){} - req.or=[]; - user.details.monitors.forEach(function(v,n){ - req.or.push('mid=?');req.ar.push(v) + s.auth(req.params,(user) => { + const groupKey = user.ke + const monitorId = req.params.id + const monitorRestrictions = s.getMonitorRestrictions(user.details,monitorId) + s.knexQuery({ + action: "select", + columns: "*", + table: "Files", + where: [ + ['ke','=',groupKey], + [ + monitorRestrictions + ] + ] + },(err,r) => { + r.forEach(function(v){ + v.details = JSON.parse(v.details) + v.href='/'+req.params.auth+'/fileBin/'+req.params.ke+'/'+req.params.id+'/'+v.details.year+'/'+v.details.month+'/'+v.details.day+'/'+v.name; }) - req.sql+=' AND ('+req.or.join(' OR ')+')' - }else{ - if(req.params.id&&(!user.details.sub||user.details.allmonitors!=='0'||user.details.monitors.indexOf(req.params.id)>-1)){ - req.sql+=' and mid=?';req.ar.push(req.params.id) - } - } - s.sqlQuery(req.sql,req.ar,function(err,r){ - if(!r){ - r=[] - }else{ - r.forEach(function(v){ - v.details=JSON.parse(v.details) - v.href='/'+req.params.auth+'/fileBin/'+req.params.ke+'/'+req.params.id+'/'+v.details.year+'/'+v.details.month+'/'+v.details.day+'/'+v.name; - }) - } - res.end(s.prettyPrint(r)); + s.closeJsonResponse(res,r) }) - } - s.auth(req.params,req.fn,res,req); + },res,req); }); /** * API : Get fileBin file @@ -1272,11 +1411,26 @@ module.exports = function(s,config,lang,app,io){ res.end(user.lang['File Not Found']) } if (!s.group[req.params.ke].fileBin[req.params.id+'/'+req.params.file]){ - s.sqlQuery('SELECT * FROM Files WHERE ke=? AND mid=? AND name=?',[req.params.ke,req.params.id,req.params.file],function(err,r){ - if(r&&r[0]){ + const groupKey = user.ke + const monitorId = req.params.id + const monitorRestrictions = s.getMonitorRestrictions(user.details,monitorId) + s.knexQuery({ + action: "select", + columns: "*", + table: "Files", + where: [ + ['ke','=',groupKey], + ['mid','=',req.params.id], + ['name','=',req.params.file], + [ + monitorRestrictions + ] + ] + },(err,r) => { + if(r && r[0]){ r = r[0] r.details = JSON.parse(r.details) - req.dir = s.dir.fileBin+req.params.ke+'/'+req.params.id+'/'+r.details.year+'/'+r.details.month+'/'+r.details.day+'/'+req.params.file; + req.dir = s.dir.fileBin + req.params.ke + '/' + req.params.id + '/' + r.details.year + '/' + r.details.month + '/' + r.details.day + '/' + req.params.file; fs.stat(req.dir,function(err,stats){ if(!err){ res.on('finish',function(){res.end()}) @@ -1294,218 +1448,6 @@ module.exports = function(s,config,lang,app,io){ } },res,req); }); - // /** - // * API : Zip Videos and Get Link from fileBin - // */ - // app.get(config.webPaths.apiPrefix+':auth/zipVideos/:ke', function (req,res){ - // var failed = function(resp){ - // res.setHeader('Content-Type', 'application/json'); - // res.end(s.prettyPrint(resp)) - // } - // if(req.query.videos && req.query.videos !== ''){ - // s.auth(req.params,function(user){ - // var videosSelected = JSON.parse(req.query.videos) - // var where = [] - // var values = [] - // videosSelected.forEach(function(video){ - // where.push("(ke=? AND mid=? AND `time`=?)") - // if(!video.ke)video.ke = req.params.ke - // values.push(video.ke) - // values.push(video.mid) - // var time = s.nameToTime(video.filename) - // if(req.query.isUTC === 'true'){ - // time = s.utcToLocal(time) - // } - // time = new Date(time) - // values.push(time) - // }) - // s.sqlQuery('SELECT * FROM Videos WHERE '+where.join(' OR '),values,function(err,r){ - // var resp = {ok: false} - // if(r && r[0]){ - // resp.ok = true - // var zipDownload = null - // var tempFiles = [] - // var fileId = s.gid() - // var fileBinDir = s.dir.fileBin+req.params.ke+'/' - // var tempScript = s.dir.streams+req.params.ke+'/'+fileId+'.sh' - // var zippedFilename = s.formattedTime()+'-'+fileId+'-Shinobi_Recordings.zip' - // var zippedFile = fileBinDir+zippedFilename - // var script = 'cd '+fileBinDir+' && zip -9 -r '+zippedFile - // res.on('close', () => { - // if(zipDownload && zipDownload.destroy){ - // zipDownload.destroy() - // } - // fs.unlink(zippedFile); - // }) - // fs.mkdir(fileBinDir,function(err){ - // s.handleFolderError(err) - // r.forEach(function(video){ - // var timeFormatted = s.formattedTime(video.time) - // video.filename = timeFormatted+'.'+video.ext - // var dir = s.getVideoDirectory(video)+video.filename - // var tempVideoFile = timeFormatted+' - '+video.mid+'.'+video.ext - // fs.writeFileSync(fileBinDir+tempVideoFile, fs.readFileSync(dir)) - // tempFiles.push(fileBinDir+tempVideoFile) - // script += ' "'+tempVideoFile+'"' - // }) - // fs.writeFileSync(tempScript,script,'utf8') - // var zipCreate = spawn('sh',(tempScript).split(' '),{detached: true}) - // zipCreate.stderr.on('data',function(data){ - // s.userLog({ke:req.params.ke,mid:'$USER'},{title:'Zip Create Error',msg:data.toString()}) - // }) - // zipCreate.on('exit',function(data){ - // fs.unlinkSync(tempScript) - // tempFiles.forEach(function(file){ - // fs.unlink(file,function(){}) - // }) - // res.setHeader('Content-Disposition', 'attachment; filename="'+zippedFilename+'"') - // var zipDownload = fs.createReadStream(zippedFile) - // zipDownload.pipe(res) - // zipDownload.on('error', function (error) { - // var errorString = error.toString() - // s.userLog({ - // ke: req.params.ke, - // mid: '$USER' - // },{ - // title: 'Zip Download Error', - // msg: errorString - // }) - // if(zipDownload && zipDownload.destroy){ - // zipDownload.destroy() - // } - // res.end(s.prettyPrint({ - // ok: false, - // msg: errorString - // })) - // }) - // zipDownload.on('close', function () { - // res.end() - // zipDownload.destroy() - // fs.unlinkSync(zippedFile) - // }) - // }) - // }) - // }else{ - // failed({ok:false,msg:'No Videos Found'}) - // } - // }) - // },res,req); - // }else{ - // failed({ok:false,msg:'"videos" query variable is missing from request.'}) - // } - // }) - // /** - // * API : Zip Cloud Videos and Get Link from fileBin - // */ - // app.get(config.webPaths.apiPrefix+':auth/zipCloudVideos/:ke', function (req,res){ - // var failed = function(resp){ - // res.setHeader('Content-Type', 'application/json'); - // res.end(s.prettyPrint(resp)) - // } - // if(req.query.videos && req.query.videos !== ''){ - // s.auth(req.params,function(user){ - // var videosSelected = JSON.parse(req.query.videos) - // var where = [] - // var values = [] - // videosSelected.forEach(function(video){ - // where.push("(ke=? AND mid=? AND `time`=?)") - // if(!video.ke)video.ke = req.params.ke - // values.push(video.ke) - // values.push(video.mid) - // var time = s.nameToTime(video.filename) - // if(req.query.isUTC === 'true'){ - // time = s.utcToLocal(time) - // } - // time = new Date(time) - // values.push(time) - // }) - // s.sqlQuery('SELECT * FROM `Cloud Videos` WHERE '+where.join(' OR '),values,function(err,r){ - // var resp = {ok: false} - // if(r && r[0]){ - // resp.ok = true - // var zipDownload = null - // var tempFiles = [] - // var fileId = s.gid() - // var fileBinDir = s.dir.fileBin+req.params.ke+'/' - // var tempScript = s.dir.streams+req.params.ke+'/'+fileId+'.sh' - // var zippedFilename = s.formattedTime()+'-'+fileId+'-Shinobi_Cloud_Backed_Recordings.zip' - // var zippedFile = fileBinDir+zippedFilename - // var script = 'cd '+fileBinDir+' && zip -9 -r '+zippedFile - // res.on('close', () => { - // if(zipDownload && zipDownload.destroy){ - // zipDownload.destroy() - // } - // fs.unlink(zippedFile); - // }) - // fs.mkdir(fileBinDir,function(err){ - // var cloudDownloadCount = 0 - // var getFile = function(video,completed){ - // if(!video)completed(); - // s.checkDetails(video) - // var filename = video.href.split('/') - // filename = filename[filename.length - 1] - // var timeFormatted = s.formattedTime(video.time) - // var tempVideoFile = video.details.type + '-' + video.mid + '-' + filename - // var tempFileWriteStream = fs.createWriteStream(fileBinDir+tempVideoFile) - // tempFileWriteStream.on('finish', function() { - // ++cloudDownloadCount - // getFile(r[cloudDownloadCount],completed) - // }) - // var cloudVideoDownload = request(video.href) - // cloudVideoDownload.on('response', function (res) { - // res.pipe(tempFileWriteStream) - // }) - // tempFiles.push(fileBinDir+tempVideoFile) - // script += ' "'+tempVideoFile+'"' - // } - // getFile(r[cloudDownloadCount],function(){ - // fs.writeFileSync(tempScript,script,'utf8') - // var zipCreate = spawn('sh',(tempScript).split(' '),{detached: true}) - // zipCreate.stderr.on('data',function(data){ - // s.userLog({ke:req.params.ke,mid:'$USER'},{title:'Zip Create Error',msg:data.toString()}) - // }) - // zipCreate.on('exit',function(data){ - // fs.unlinkSync(tempScript) - // tempFiles.forEach(function(file){ - // fs.unlink(file,function(){}) - // }) - // res.setHeader('Content-Disposition', 'attachment; filename="' + zippedFilename + '"') - // var zipDownload = fs.createReadStream(zippedFile) - // zipDownload.pipe(res) - // zipDownload.on('error', function (error) { - // var errorString = error.toString() - // s.userLog({ - // ke: req.params.ke, - // mid: '$USER' - // },{ - // title: 'Zip Download Error', - // msg: errorString - // }) - // if(zipDownload && zipDownload.destroy){ - // zipDownload.destroy() - // } - // res.end(s.prettyPrint({ - // ok: false, - // msg: errorString - // })) - // }) - // zipDownload.on('close', function () { - // res.end() - // zipDownload.destroy() - // fs.unlinkSync(zippedFile) - // }) - // }) - // }) - // }) - // }else{ - // failed({ok:false,msg:'No Videos Found'}) - // } - // }) - // },res,req); - // }else{ - // failed({ok:false,msg:'"videos" query variable is missing from request.'}) - // } - // }) /** * API : Get Cloud Video File (proxy) */ @@ -1520,7 +1462,19 @@ module.exports = function(s,config,lang,app,io){ time = s.utcToLocal(time) } time = new Date(time) - s.sqlQuery('SELECT * FROM `Cloud Videos` WHERE ke=? AND mid=? AND `time`=? LIMIT 1',[req.params.ke,req.params.id,time],function(err,r){ + const groupKey = user.ke + const monitorId = req.params.id + s.knexQuery({ + action: "select", + columns: "*", + table: "Cloud Videos", + where: [ + ['ke','=',groupKey], + ['mid','=',req.params.id], + ['time','=',time] + ], + limit: 1 + },(err,r) => { if(r&&r[0]){ r = r[0] if(JSON.parse(r.details).type === 'googd' && s.cloudDiskUseOnGetVideoDataExtensions['googd']){ @@ -1553,7 +1507,19 @@ module.exports = function(s,config,lang,app,io){ time = s.utcToLocal(time) } time = new Date(time) - s.sqlQuery('SELECT * FROM Videos WHERE ke=? AND mid=? AND `time`=? LIMIT 1',[req.params.ke,req.params.id,time],function(err,r){ + const groupKey = user.ke + const monitorId = req.params.id + s.knexQuery({ + action: "select", + columns: "*", + table: "Videos", + where: [ + ['ke','=',groupKey], + ['mid','=',req.params.id], + ['time','=',time] + ], + limit: 1 + },(err,r) => { if(r&&r[0]){ req.dir=s.getVideoDirectory(r[0])+req.params.file fs.stat(req.dir,function(err,stats){ @@ -1728,7 +1694,7 @@ module.exports = function(s,config,lang,app,io){ * API : Upload Video File * API : Add "streamIn" query string to Push to "Dashcam (Streamer v2)" FFMPEG Process */ - app.post(config.webPaths.apiPrefix+':auth/videos/:ke/:id',fileupload(), async (req,res) => { + app.post(config.webPaths.apiPrefix+':auth/videos/:ke/:id',fileupload(), (req,res) => { var response = {ok:false} res.setHeader('Content-Type', 'application/json'); s.auth(req.params,function(user){ @@ -1738,86 +1704,79 @@ module.exports = function(s,config,lang,app,io){ } var groupKey = req.params.ke var monitorId = req.params.id - var origURL = req.originalUrl.split('/') - var videoParam = origURL[origURL.indexOf(req.params.auth) + 1] - var videoSet = 'Videos' - req.sql='SELECT * FROM `Monitors` WHERE ke=? AND mid=?'; - req.ar=[groupKey,monitorId]; - s.sqlQuery(req.sql,req.ar,function(err,r){ - if(r && r[0]){ - var monitor = r[0] - // req.query.overwrite === '1' - if(s.group[groupKey] && s.group[groupKey].activeMonitors[monitorId]){ - try { - if(!req.files) { - res.send({ - status: false, - message: 'No file uploaded' - }); - } else { - let video = req.files.video; - if(req.query.streamIn === '1'){ - var tempLocation = s.getStreamsDirectory(monitor) + video.name; - video.mv(tempLocation,function(){ - var fileStream = fs.createReadStream(tempLocation) - fileStream.on('close',function(){ - - }) - fileStream.on('data',function(data){ - try{ - s.group[groupKey].activeMonitors[monitorId].spawn.stdin.write(data); - }catch(err){ - console.log(err) - } - }) - // s.group[groupKey].activeMonitors[monitorId].spawn.stdin.write(fs.readFileSync(tempLocation,'binary')); - res.end(s.prettyPrint({ - ok: true, - message: 'File is transcoding', - data: { - name: video.name, - mimetype: video.mimetype, - size: video.size - } - })) - }); - }else{ - var time = new Date(parseInt(video.name.split('.')[0])) - var filename = s.formattedTime(time) + '.' + monitor.ext - video.mv(s.getVideoDirectory(monitor) + filename,function(){ - s.insertCompletedVideo(monitor,{ - file: filename, - events: s.group[groupKey].activeMonitors[monitorId].detector_motion_count, - endTime: req.body.endTime.indexOf('-') > -1 ? s.nameToTime(req.body.endTime) : parseInt(req.body.endTime) || null, - },function(){ - response.ok = true - response.filename = filename - res.end(s.prettyPrint({ - ok: true, - message: 'File is uploaded', - data: { - name: video.name, - mimetype: video.mimetype, - size: video.size - } - })) - }) - }); - } - } - } catch (err) { - response.err = err - res.status(500).end(response) + // req.query.overwrite === '1' + if(s.group[groupKey] && s.group[groupKey].activeMonitors && s.group[groupKey].activeMonitors[monitorId]){ + var monitor = s.group[groupKey].rawMonitorConfigurations[monitorId] + try { + if(!req.files) { + res.send({ + status: false, + message: 'No file uploaded' + }); + } else { + let video = req.files.video; + console.log('come here 1') + if(req.query.streamIn === '1'){ + console.log('come here 2',video.name) + var tempLocation = s.getStreamsDirectory(monitor) + video.name; + console.log('come here 3',tempLocation) + video.mv(tempLocation,function(){ + console.log('come here 4') + // var fileStream = fs.createReadStream(tempLocation) + // fileStream.on('close',function(){ + // s.file('delete',tempLocation) + // }) + // fileStream.on('data',function(data){ + // try{ + // // s.group[groupKey].activeMonitors[monitorId].spawn.stdin.write(data); + // }catch(err){ + // console.log(err) + // } + // }) + s.group[groupKey].activeMonitors[monitorId].spawn.stdin.write(fs.readFileSync(tempLocation,'binary')); + s.file('delete',tempLocation) + res.end(s.prettyPrint({ + ok: true, + message: 'File is transcoding', + data: { + name: video.name, + mimetype: video.mimetype, + size: video.size + } + })) + }); + }else{ + var time = new Date(parseInt(video.name.split('.')[0])) + var filename = s.formattedTime(time) + '.' + monitor.ext + video.mv(s.getVideoDirectory(monitor) + filename,function(){ + s.insertCompletedVideo(monitor,{ + file: filename, + events: s.group[groupKey].activeMonitors[monitorId].detector_motion_count, + endTime: req.body.endTime.indexOf('-') > -1 ? s.nameToTime(req.body.endTime) : parseInt(req.body.endTime) || null, + },function(){ + response.ok = true + response.filename = filename + res.end(s.prettyPrint({ + ok: true, + message: 'File is uploaded', + data: { + name: video.name, + mimetype: video.mimetype, + size: video.size + } + })) + }) + }); } - }else{ - response.error = 'Non Existant Monitor' - res.end(s.prettyPrint(response)) } - }else{ - response.msg = user.lang['No such file'] - res.end(s.prettyPrint(response)) + } catch (err) { + response.err = err + res.status(500).end(response) } - }) + }else{ + response.error = 'Non Existant Monitor' + res.end(s.prettyPrint(response)) + } },res,req); }) /** @@ -1849,10 +1808,20 @@ module.exports = function(s,config,lang,app,io){ videoSet = 'Cloud Videos' break; } - req.sql='SELECT * FROM `'+videoSet+'` WHERE ke=? AND mid=? AND `time`=?'; - req.ar=[req.params.ke,req.params.id,time]; - s.sqlQuery(req.sql,req.ar,function(err,r){ - if(r&&r[0]){ + const groupKey = user.ke + const monitorId = req.params.id + s.knexQuery({ + action: "select", + columns: "*", + table: videoSet, + where: [ + ['ke','=',groupKey], + ['mid','=',req.params.id], + ['time','=',time] + ], + limit: 1 + },(err,r) => { + if(r && r[0]){ r=r[0];r.filename=s.formattedTime(r.time)+'.'+r.ext; switch(req.params.mode){ case'fix': @@ -1871,7 +1840,18 @@ module.exports = function(s,config,lang,app,io){ req.ret.msg='Not a valid value.'; }else{ req.ret.ok=true; - s.sqlQuery('UPDATE `'+videoSet+'` SET status=? WHERE ke=? AND mid=? AND `time`=?',[req.params.f,req.params.ke,req.params.id,time]) + s.knexQuery({ + action: "update", + table: videoSet, + update: { + status: req.params.f + }, + where: [ + ['ke','=',groupKey], + ['mid','=',req.params.id], + ['time','=',time] + ] + }) s.tx(r,'GRP_'+r.ke); } break;