From a5b04de5de0185f917414973745b601db783f79b Mon Sep 17 00:00:00 2001 From: Moe Date: Sun, 24 May 2020 07:41:10 -0700 Subject: [PATCH] refactor /videos/ row request API --- libs/sql.js | 7 +- libs/webServerPaths.js | 142 +++++++++++------------------------------ 2 files changed, 41 insertions(+), 108 deletions(-) diff --git a/libs/sql.js b/libs/sql.js index b1abde48..ffc6ff1d 100644 --- a/libs/sql.js +++ b/libs/sql.js @@ -188,11 +188,8 @@ module.exports = function(s,config){ const endIsStartTo = options.endIsStartTo const userDetails = user.details const rowName = options.rowName || 'rows' - var hasRestrictions = userDetails.sub && userDetails.allmonitors !== '1' - if( - user.permissions.watch_videos === "0" || - hasRestrictions && (!userDetails.video_view || userDetails.video_view.indexOf(monitorId)===-1) - ){ + const preliminaryValidationFailed = options.preliminaryValidationFailed || false + if(preliminaryValidationFailed){ callback([]); return } diff --git a/libs/webServerPaths.js b/libs/webServerPaths.js index 78204551..69e64e84 100644 --- a/libs/webServerPaths.js +++ b/libs/webServerPaths.js @@ -983,14 +983,10 @@ module.exports = function(s,config,lang,app,io){ ], function (req,res){ res.setHeader('Content-Type', 'application/json'); s.auth(req.params,function(user){ - var hasRestrictions = user.details.sub && user.details.allmonitors !== '1' - if( - user.permissions.watch_videos==="0" || - hasRestrictions && (!user.details.video_view || user.details.video_view.indexOf(req.params.id)===-1) - ){ - res.end(s.prettyPrint([])) - return - } + const userDetails = user.details + const monitorId = req.params.id + const groupKey = req.params.ke + const hasRestrictions = userDetails.sub && userDetails.allmonitors !== '1' var origURL = req.originalUrl.split('/') var videoParam = origURL[origURL.indexOf(req.params.auth) + 1] var videoSet = 'Videos' @@ -999,101 +995,32 @@ module.exports = function(s,config,lang,app,io){ videoSet = 'Cloud Videos' break; } - req.sql='SELECT * FROM `'+videoSet+'` WHERE ke=?';req.ar=[req.params.ke]; - req.count_sql='SELECT COUNT(*) FROM `'+videoSet+'` WHERE ke=?';req.count_ar=[req.params.ke]; - if(req.query.archived=='1'){ - req.sql+=' AND details LIKE \'%"archived":"1"\'' - req.count_sql+=' AND details LIKE \'%"archived":"1"\'' - } - 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 ')+')' - req.count_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) - req.count_sql+=' and mid=?';req.count_ar.push(req.params.id) - }else{ - res.end('[]'); - return; - } - } - if(req.query.start||req.query.end){ - if(req.query.start && req.query.start !== ''){ - req.query.start = s.stringToSqlTime(req.query.start) - } - if(req.query.end && req.query.end !== ''){ - req.query.end = s.stringToSqlTime(req.query.end) - } - if(!req.query.startOperator||req.query.startOperator==''){ - req.query.startOperator='>=' - } - if(!req.query.endOperator||req.query.endOperator==''){ - req.query.endOperator='<=' - } - var endIsStartTo - var theEndParameter = '`end`' - if(req.query.endIsStartTo){ - endIsStartTo = true - theEndParameter = '`time`' - } - switch(true){ - case(req.query.start&&req.query.start!==''&&req.query.end&&req.query.end!==''): - req.sql+=' AND `time` '+req.query.startOperator+' ? AND '+theEndParameter+' '+req.query.endOperator+' ?'; - req.count_sql+=' AND `time` '+req.query.startOperator+' ? AND '+theEndParameter+' '+req.query.endOperator+' ?'; - req.ar.push(req.query.start) - req.ar.push(req.query.end) - req.count_ar.push(req.query.start) - req.count_ar.push(req.query.end) - break; - case(req.query.start&&req.query.start!==''): - req.sql+=' AND `time` '+req.query.startOperator+' ?'; - req.count_sql+=' AND `time` '+req.query.startOperator+' ?'; - req.ar.push(req.query.start) - req.count_ar.push(req.query.start) - break; - case(req.query.end&&req.query.end!==''): - req.sql+=' AND '+theEndParameter+' '+req.query.endOperator+' ?'; - req.count_sql+=' AND '+theEndParameter+' '+req.query.endOperator+' ?'; - req.ar.push(req.query.end) - req.count_ar.push(req.query.end) - break; - } - } - req.sql+=' ORDER BY `time` DESC'; - if(!req.query.limit||req.query.limit==''){ - req.query.limit='100' - } - if(req.query.limit!=='0'){ - req.sql+=' LIMIT '+req.query.limit - } - s.sqlQuery(req.sql,req.ar,function(err,r){ - if(!r){ - res.end(s.prettyPrint({total:0,limit:req.query.limit,skip:0,videos:[]})); - return - } - s.sqlQuery(req.count_sql,req.count_ar,function(err,count){ - s.buildVideoLinks(r,{ - auth : req.params.auth, - videoParam : videoParam, - hideRemote : config.hideCloudSaveUrls, - videoParam : videoParam - }) - if(req.query.limit.indexOf(',')>-1){ - req.skip=parseInt(req.query.limit.split(',')[0]) - req.query.limit=parseInt(req.query.limit.split(',')[1]) - }else{ - req.skip=0 - req.query.limit=parseInt(req.query.limit) - } - res.end(s.prettyPrint({isUTC:config.useUTC,total:count[0]['COUNT(*)'],limit:req.query.limit,skip:req.skip,videos:r,endIsStartTo:endIsStartTo})); + s.sqlQueryBetweenTimesWithPermissions({ + table: videoSet, + user: user, + groupKey: req.params.ke, + monitorId: req.params.id, + startTime: req.query.start, + endTime: req.query.end, + startTimeOperator: req.query.startOperator, + endTimeOperator: req.query.endOperator, + limit: req.query.limit, + archived: req.query.archived, + endIsStartTo: !!req.query.endIsStartTo, + parseRowDetails: true, + rowName: 'videos', + preliminaryValidationFailed: ( + user.permissions.watch_videos === "0" || + hasRestrictions && + (!userDetails.video_view || userDetails.video_view.indexOf(monitorId)===-1) + ) + },(response) => { + s.buildVideoLinks(response.videos,{ + auth : req.params.auth, + videoParam : videoParam, + hideRemote : config.hideCloudSaveUrls, }) + res.end(s.prettyPrint(response)) }) },res,req); }); @@ -1819,6 +1746,10 @@ module.exports = function(s,config,lang,app,io){ ], function (req,res){ res.setHeader('Content-Type', 'application/json') s.auth(req.params,function(user){ + const userDetails = user.details + const monitorId = req.params.id + const groupKey = req.params.ke + var hasRestrictions = userDetails.sub && userDetails.allmonitors !== '1' s.sqlQueryBetweenTimesWithPermissions({ table: 'Events Counts', user: user, @@ -1832,7 +1763,12 @@ module.exports = function(s,config,lang,app,io){ archived: req.query.archived, endIsStartTo: !!req.query.endIsStartTo, parseRowDetails: true, - rowName: 'counts' + rowName: 'counts', + preliminaryValidationFailed: ( + user.permissions.watch_videos === "0" || + hasRestrictions && + (!userDetails.video_view || userDetails.video_view.indexOf(monitorId)===-1) + ) },(response) => { res.end(s.prettyPrint(response)) })