mirror of
https://gitlab.com/Shinobi-Systems/ShinobiCE.git
synced 2025-03-09 15:40:15 +00:00
fix circular json bug and add some async methods
This commit is contained in:
parent
4b7a58d409
commit
b8bb4d1a69
2 changed files with 214 additions and 214 deletions
|
@ -1419,218 +1419,218 @@ module.exports = function(s,config,lang,app,io){
|
||||||
}
|
}
|
||||||
},res,req);
|
},res,req);
|
||||||
});
|
});
|
||||||
/**
|
// /**
|
||||||
* API : Zip Videos and Get Link from fileBin
|
// * API : Zip Videos and Get Link from fileBin
|
||||||
*/
|
// */
|
||||||
app.get(config.webPaths.apiPrefix+':auth/zipVideos/:ke', function (req,res){
|
// app.get(config.webPaths.apiPrefix+':auth/zipVideos/:ke', function (req,res){
|
||||||
var failed = function(resp){
|
// var failed = function(resp){
|
||||||
res.setHeader('Content-Type', 'application/json');
|
// res.setHeader('Content-Type', 'application/json');
|
||||||
res.end(s.prettyPrint(resp))
|
// res.end(s.prettyPrint(resp))
|
||||||
}
|
// }
|
||||||
if(req.query.videos && req.query.videos !== ''){
|
// if(req.query.videos && req.query.videos !== ''){
|
||||||
s.auth(req.params,function(user){
|
// s.auth(req.params,function(user){
|
||||||
var videosSelected = JSON.parse(req.query.videos)
|
// var videosSelected = JSON.parse(req.query.videos)
|
||||||
var where = []
|
// var where = []
|
||||||
var values = []
|
// var values = []
|
||||||
videosSelected.forEach(function(video){
|
// videosSelected.forEach(function(video){
|
||||||
where.push("(ke=? AND mid=? AND `time`=?)")
|
// where.push("(ke=? AND mid=? AND `time`=?)")
|
||||||
if(!video.ke)video.ke = req.params.ke
|
// if(!video.ke)video.ke = req.params.ke
|
||||||
values.push(video.ke)
|
// values.push(video.ke)
|
||||||
values.push(video.mid)
|
// values.push(video.mid)
|
||||||
var time = s.nameToTime(video.filename)
|
// var time = s.nameToTime(video.filename)
|
||||||
if(req.query.isUTC === 'true'){
|
// if(req.query.isUTC === 'true'){
|
||||||
time = s.utcToLocal(time)
|
// time = s.utcToLocal(time)
|
||||||
}
|
// }
|
||||||
time = new Date(time)
|
// time = new Date(time)
|
||||||
values.push(time)
|
// values.push(time)
|
||||||
})
|
// })
|
||||||
s.sqlQuery('SELECT * FROM Videos WHERE '+where.join(' OR '),values,function(err,r){
|
// s.sqlQuery('SELECT * FROM Videos WHERE '+where.join(' OR '),values,function(err,r){
|
||||||
var resp = {ok: false}
|
// var resp = {ok: false}
|
||||||
if(r && r[0]){
|
// if(r && r[0]){
|
||||||
resp.ok = true
|
// resp.ok = true
|
||||||
var zipDownload = null
|
// var zipDownload = null
|
||||||
var tempFiles = []
|
// var tempFiles = []
|
||||||
var fileId = s.gid()
|
// var fileId = s.gid()
|
||||||
var fileBinDir = s.dir.fileBin+req.params.ke+'/'
|
// var fileBinDir = s.dir.fileBin+req.params.ke+'/'
|
||||||
var tempScript = s.dir.streams+req.params.ke+'/'+fileId+'.sh'
|
// var tempScript = s.dir.streams+req.params.ke+'/'+fileId+'.sh'
|
||||||
var zippedFilename = s.formattedTime()+'-'+fileId+'-Shinobi_Recordings.zip'
|
// var zippedFilename = s.formattedTime()+'-'+fileId+'-Shinobi_Recordings.zip'
|
||||||
var zippedFile = fileBinDir+zippedFilename
|
// var zippedFile = fileBinDir+zippedFilename
|
||||||
var script = 'cd '+fileBinDir+' && zip -9 -r '+zippedFile
|
// var script = 'cd '+fileBinDir+' && zip -9 -r '+zippedFile
|
||||||
res.on('close', () => {
|
// res.on('close', () => {
|
||||||
if(zipDownload && zipDownload.destroy){
|
// if(zipDownload && zipDownload.destroy){
|
||||||
zipDownload.destroy()
|
// zipDownload.destroy()
|
||||||
}
|
// }
|
||||||
fs.unlink(zippedFile);
|
// fs.unlink(zippedFile);
|
||||||
})
|
// })
|
||||||
fs.mkdir(fileBinDir,function(err){
|
// fs.mkdir(fileBinDir,function(err){
|
||||||
s.handleFolderError(err)
|
// s.handleFolderError(err)
|
||||||
r.forEach(function(video){
|
// r.forEach(function(video){
|
||||||
var timeFormatted = s.formattedTime(video.time)
|
// var timeFormatted = s.formattedTime(video.time)
|
||||||
video.filename = timeFormatted+'.'+video.ext
|
// video.filename = timeFormatted+'.'+video.ext
|
||||||
var dir = s.getVideoDirectory(video)+video.filename
|
// var dir = s.getVideoDirectory(video)+video.filename
|
||||||
var tempVideoFile = timeFormatted+' - '+video.mid+'.'+video.ext
|
// var tempVideoFile = timeFormatted+' - '+video.mid+'.'+video.ext
|
||||||
fs.writeFileSync(fileBinDir+tempVideoFile, fs.readFileSync(dir))
|
// fs.writeFileSync(fileBinDir+tempVideoFile, fs.readFileSync(dir))
|
||||||
tempFiles.push(fileBinDir+tempVideoFile)
|
// tempFiles.push(fileBinDir+tempVideoFile)
|
||||||
script += ' "'+tempVideoFile+'"'
|
// script += ' "'+tempVideoFile+'"'
|
||||||
})
|
// })
|
||||||
fs.writeFileSync(tempScript,script,'utf8')
|
// fs.writeFileSync(tempScript,script,'utf8')
|
||||||
var zipCreate = spawn('sh',(tempScript).split(' '),{detached: true})
|
// var zipCreate = spawn('sh',(tempScript).split(' '),{detached: true})
|
||||||
zipCreate.stderr.on('data',function(data){
|
// zipCreate.stderr.on('data',function(data){
|
||||||
s.userLog({ke:req.params.ke,mid:'$USER'},{title:'Zip Create Error',msg:data.toString()})
|
// s.userLog({ke:req.params.ke,mid:'$USER'},{title:'Zip Create Error',msg:data.toString()})
|
||||||
})
|
// })
|
||||||
zipCreate.on('exit',function(data){
|
// zipCreate.on('exit',function(data){
|
||||||
fs.unlinkSync(tempScript)
|
// fs.unlinkSync(tempScript)
|
||||||
tempFiles.forEach(function(file){
|
// tempFiles.forEach(function(file){
|
||||||
fs.unlink(file,function(){})
|
// fs.unlink(file,function(){})
|
||||||
})
|
// })
|
||||||
res.setHeader('Content-Disposition', 'attachment; filename="'+zippedFilename+'"')
|
// res.setHeader('Content-Disposition', 'attachment; filename="'+zippedFilename+'"')
|
||||||
var zipDownload = fs.createReadStream(zippedFile)
|
// var zipDownload = fs.createReadStream(zippedFile)
|
||||||
zipDownload.pipe(res)
|
// zipDownload.pipe(res)
|
||||||
zipDownload.on('error', function (error) {
|
// zipDownload.on('error', function (error) {
|
||||||
var errorString = error.toString()
|
// var errorString = error.toString()
|
||||||
s.userLog({
|
// s.userLog({
|
||||||
ke: req.params.ke,
|
// ke: req.params.ke,
|
||||||
mid: '$USER'
|
// mid: '$USER'
|
||||||
},{
|
// },{
|
||||||
title: 'Zip Download Error',
|
// title: 'Zip Download Error',
|
||||||
msg: errorString
|
// msg: errorString
|
||||||
})
|
// })
|
||||||
if(zipDownload && zipDownload.destroy){
|
// if(zipDownload && zipDownload.destroy){
|
||||||
zipDownload.destroy()
|
// zipDownload.destroy()
|
||||||
}
|
// }
|
||||||
res.end(s.prettyPrint({
|
// res.end(s.prettyPrint({
|
||||||
ok: false,
|
// ok: false,
|
||||||
msg: errorString
|
// msg: errorString
|
||||||
}))
|
// }))
|
||||||
})
|
// })
|
||||||
zipDownload.on('close', function () {
|
// zipDownload.on('close', function () {
|
||||||
res.end()
|
// res.end()
|
||||||
zipDownload.destroy()
|
// zipDownload.destroy()
|
||||||
fs.unlinkSync(zippedFile)
|
// fs.unlinkSync(zippedFile)
|
||||||
})
|
// })
|
||||||
})
|
// })
|
||||||
})
|
// })
|
||||||
}else{
|
// }else{
|
||||||
failed({ok:false,msg:'No Videos Found'})
|
// failed({ok:false,msg:'No Videos Found'})
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
},res,req);
|
// },res,req);
|
||||||
}else{
|
// }else{
|
||||||
failed({ok:false,msg:'"videos" query variable is missing from request.'})
|
// failed({ok:false,msg:'"videos" query variable is missing from request.'})
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
/**
|
// /**
|
||||||
* API : Zip Cloud Videos and Get Link from fileBin
|
// * API : Zip Cloud Videos and Get Link from fileBin
|
||||||
*/
|
// */
|
||||||
app.get(config.webPaths.apiPrefix+':auth/zipCloudVideos/:ke', function (req,res){
|
// app.get(config.webPaths.apiPrefix+':auth/zipCloudVideos/:ke', function (req,res){
|
||||||
var failed = function(resp){
|
// var failed = function(resp){
|
||||||
res.setHeader('Content-Type', 'application/json');
|
// res.setHeader('Content-Type', 'application/json');
|
||||||
res.end(s.prettyPrint(resp))
|
// res.end(s.prettyPrint(resp))
|
||||||
}
|
// }
|
||||||
if(req.query.videos && req.query.videos !== ''){
|
// if(req.query.videos && req.query.videos !== ''){
|
||||||
s.auth(req.params,function(user){
|
// s.auth(req.params,function(user){
|
||||||
var videosSelected = JSON.parse(req.query.videos)
|
// var videosSelected = JSON.parse(req.query.videos)
|
||||||
var where = []
|
// var where = []
|
||||||
var values = []
|
// var values = []
|
||||||
videosSelected.forEach(function(video){
|
// videosSelected.forEach(function(video){
|
||||||
where.push("(ke=? AND mid=? AND `time`=?)")
|
// where.push("(ke=? AND mid=? AND `time`=?)")
|
||||||
if(!video.ke)video.ke = req.params.ke
|
// if(!video.ke)video.ke = req.params.ke
|
||||||
values.push(video.ke)
|
// values.push(video.ke)
|
||||||
values.push(video.mid)
|
// values.push(video.mid)
|
||||||
var time = s.nameToTime(video.filename)
|
// var time = s.nameToTime(video.filename)
|
||||||
if(req.query.isUTC === 'true'){
|
// if(req.query.isUTC === 'true'){
|
||||||
time = s.utcToLocal(time)
|
// time = s.utcToLocal(time)
|
||||||
}
|
// }
|
||||||
time = new Date(time)
|
// time = new Date(time)
|
||||||
values.push(time)
|
// values.push(time)
|
||||||
})
|
// })
|
||||||
s.sqlQuery('SELECT * FROM `Cloud Videos` WHERE '+where.join(' OR '),values,function(err,r){
|
// s.sqlQuery('SELECT * FROM `Cloud Videos` WHERE '+where.join(' OR '),values,function(err,r){
|
||||||
var resp = {ok: false}
|
// var resp = {ok: false}
|
||||||
if(r && r[0]){
|
// if(r && r[0]){
|
||||||
resp.ok = true
|
// resp.ok = true
|
||||||
var zipDownload = null
|
// var zipDownload = null
|
||||||
var tempFiles = []
|
// var tempFiles = []
|
||||||
var fileId = s.gid()
|
// var fileId = s.gid()
|
||||||
var fileBinDir = s.dir.fileBin+req.params.ke+'/'
|
// var fileBinDir = s.dir.fileBin+req.params.ke+'/'
|
||||||
var tempScript = s.dir.streams+req.params.ke+'/'+fileId+'.sh'
|
// var tempScript = s.dir.streams+req.params.ke+'/'+fileId+'.sh'
|
||||||
var zippedFilename = s.formattedTime()+'-'+fileId+'-Shinobi_Cloud_Backed_Recordings.zip'
|
// var zippedFilename = s.formattedTime()+'-'+fileId+'-Shinobi_Cloud_Backed_Recordings.zip'
|
||||||
var zippedFile = fileBinDir+zippedFilename
|
// var zippedFile = fileBinDir+zippedFilename
|
||||||
var script = 'cd '+fileBinDir+' && zip -9 -r '+zippedFile
|
// var script = 'cd '+fileBinDir+' && zip -9 -r '+zippedFile
|
||||||
res.on('close', () => {
|
// res.on('close', () => {
|
||||||
if(zipDownload && zipDownload.destroy){
|
// if(zipDownload && zipDownload.destroy){
|
||||||
zipDownload.destroy()
|
// zipDownload.destroy()
|
||||||
}
|
// }
|
||||||
fs.unlink(zippedFile);
|
// fs.unlink(zippedFile);
|
||||||
})
|
// })
|
||||||
fs.mkdir(fileBinDir,function(err){
|
// fs.mkdir(fileBinDir,function(err){
|
||||||
var cloudDownloadCount = 0
|
// var cloudDownloadCount = 0
|
||||||
var getFile = function(video,completed){
|
// var getFile = function(video,completed){
|
||||||
if(!video)completed();
|
// if(!video)completed();
|
||||||
s.checkDetails(video)
|
// s.checkDetails(video)
|
||||||
var filename = video.href.split('/')
|
// var filename = video.href.split('/')
|
||||||
filename = filename[filename.length - 1]
|
// filename = filename[filename.length - 1]
|
||||||
var timeFormatted = s.formattedTime(video.time)
|
// var timeFormatted = s.formattedTime(video.time)
|
||||||
var tempVideoFile = video.details.type + '-' + video.mid + '-' + filename
|
// var tempVideoFile = video.details.type + '-' + video.mid + '-' + filename
|
||||||
var tempFileWriteStream = fs.createWriteStream(fileBinDir+tempVideoFile)
|
// var tempFileWriteStream = fs.createWriteStream(fileBinDir+tempVideoFile)
|
||||||
tempFileWriteStream.on('finish', function() {
|
// tempFileWriteStream.on('finish', function() {
|
||||||
++cloudDownloadCount
|
// ++cloudDownloadCount
|
||||||
getFile(r[cloudDownloadCount],completed)
|
// getFile(r[cloudDownloadCount],completed)
|
||||||
})
|
// })
|
||||||
var cloudVideoDownload = request(video.href)
|
// var cloudVideoDownload = request(video.href)
|
||||||
cloudVideoDownload.on('response', function (res) {
|
// cloudVideoDownload.on('response', function (res) {
|
||||||
res.pipe(tempFileWriteStream)
|
// res.pipe(tempFileWriteStream)
|
||||||
})
|
// })
|
||||||
tempFiles.push(fileBinDir+tempVideoFile)
|
// tempFiles.push(fileBinDir+tempVideoFile)
|
||||||
script += ' "'+tempVideoFile+'"'
|
// script += ' "'+tempVideoFile+'"'
|
||||||
}
|
// }
|
||||||
getFile(r[cloudDownloadCount],function(){
|
// getFile(r[cloudDownloadCount],function(){
|
||||||
fs.writeFileSync(tempScript,script,'utf8')
|
// fs.writeFileSync(tempScript,script,'utf8')
|
||||||
var zipCreate = spawn('sh',(tempScript).split(' '),{detached: true})
|
// var zipCreate = spawn('sh',(tempScript).split(' '),{detached: true})
|
||||||
zipCreate.stderr.on('data',function(data){
|
// zipCreate.stderr.on('data',function(data){
|
||||||
s.userLog({ke:req.params.ke,mid:'$USER'},{title:'Zip Create Error',msg:data.toString()})
|
// s.userLog({ke:req.params.ke,mid:'$USER'},{title:'Zip Create Error',msg:data.toString()})
|
||||||
})
|
// })
|
||||||
zipCreate.on('exit',function(data){
|
// zipCreate.on('exit',function(data){
|
||||||
fs.unlinkSync(tempScript)
|
// fs.unlinkSync(tempScript)
|
||||||
tempFiles.forEach(function(file){
|
// tempFiles.forEach(function(file){
|
||||||
fs.unlink(file,function(){})
|
// fs.unlink(file,function(){})
|
||||||
})
|
// })
|
||||||
res.setHeader('Content-Disposition', 'attachment; filename="' + zippedFilename + '"')
|
// res.setHeader('Content-Disposition', 'attachment; filename="' + zippedFilename + '"')
|
||||||
var zipDownload = fs.createReadStream(zippedFile)
|
// var zipDownload = fs.createReadStream(zippedFile)
|
||||||
zipDownload.pipe(res)
|
// zipDownload.pipe(res)
|
||||||
zipDownload.on('error', function (error) {
|
// zipDownload.on('error', function (error) {
|
||||||
var errorString = error.toString()
|
// var errorString = error.toString()
|
||||||
s.userLog({
|
// s.userLog({
|
||||||
ke: req.params.ke,
|
// ke: req.params.ke,
|
||||||
mid: '$USER'
|
// mid: '$USER'
|
||||||
},{
|
// },{
|
||||||
title: 'Zip Download Error',
|
// title: 'Zip Download Error',
|
||||||
msg: errorString
|
// msg: errorString
|
||||||
})
|
// })
|
||||||
if(zipDownload && zipDownload.destroy){
|
// if(zipDownload && zipDownload.destroy){
|
||||||
zipDownload.destroy()
|
// zipDownload.destroy()
|
||||||
}
|
// }
|
||||||
res.end(s.prettyPrint({
|
// res.end(s.prettyPrint({
|
||||||
ok: false,
|
// ok: false,
|
||||||
msg: errorString
|
// msg: errorString
|
||||||
}))
|
// }))
|
||||||
})
|
// })
|
||||||
zipDownload.on('close', function () {
|
// zipDownload.on('close', function () {
|
||||||
res.end()
|
// res.end()
|
||||||
zipDownload.destroy()
|
// zipDownload.destroy()
|
||||||
fs.unlinkSync(zippedFile)
|
// fs.unlinkSync(zippedFile)
|
||||||
})
|
// })
|
||||||
})
|
// })
|
||||||
})
|
// })
|
||||||
})
|
// })
|
||||||
}else{
|
// }else{
|
||||||
failed({ok:false,msg:'No Videos Found'})
|
// failed({ok:false,msg:'No Videos Found'})
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
},res,req);
|
// },res,req);
|
||||||
}else{
|
// }else{
|
||||||
failed({ok:false,msg:'"videos" query variable is missing from request.'})
|
// failed({ok:false,msg:'"videos" query variable is missing from request.'})
|
||||||
}
|
// }
|
||||||
})
|
// })
|
||||||
/**
|
/**
|
||||||
* API : Get Cloud Video File (proxy)
|
* API : Get Cloud Video File (proxy)
|
||||||
*/
|
*/
|
||||||
|
@ -1988,7 +1988,7 @@ module.exports = function(s,config,lang,app,io){
|
||||||
}else{
|
}else{
|
||||||
action = Camera[req.params.action]
|
action = Camera[req.params.action]
|
||||||
}
|
}
|
||||||
console.log(s.parseJSON(req.query.options))
|
// console.log(s.parseJSON(req.query.options))
|
||||||
if(!action || typeof action !== 'function'){
|
if(!action || typeof action !== 'function'){
|
||||||
errorMessage(req.params.action+' is not an available ONVIF function. See https://github.com/futomi/node-onvif for functions.')
|
errorMessage(req.params.action+' is not an available ONVIF function. See https://github.com/futomi/node-onvif for functions.')
|
||||||
}else{
|
}else{
|
||||||
|
|
|
@ -24,7 +24,7 @@ module.exports = function(s,config,lang,app){
|
||||||
if(s.group[req.params.ke]&&s.group[req.params.ke].activeMonitors[req.params.id]){
|
if(s.group[req.params.ke]&&s.group[req.params.ke].activeMonitors[req.params.id]){
|
||||||
if(s.group[req.params.ke].activeMonitors[req.params.id].isStarted === true){
|
if(s.group[req.params.ke].activeMonitors[req.params.id].isStarted === true){
|
||||||
req.params.uid=user.uid;
|
req.params.uid=user.uid;
|
||||||
s.renderPage(req,res,config.renderPaths.embed,{data:req.params,baseUrl:req.protocol+'://'+req.hostname,config: s.getConfigWithBranding(req.hostname),lang:user.lang,mon:CircularJSON.parse(CircularJSON.stringify(s.group[req.params.ke].rawMonitorConfigurations[req.params.id])),originalURL:s.getOriginalUrl(req)});
|
s.renderPage(req,res,config.renderPaths.embed,{data:req.params,baseUrl:req.protocol+'://'+req.hostname,config: s.getConfigWithBranding(req.hostname),lang:user.lang,mon:Object.assign(s.group[req.params.ke].rawMonitorConfigurations[req.params.id],{}),originalURL:s.getOriginalUrl(req)});
|
||||||
res.end()
|
res.end()
|
||||||
}else{
|
}else{
|
||||||
res.end(user.lang['Cannot watch a monitor that isn\'t running.'])
|
res.end(user.lang['Cannot watch a monitor that isn\'t running.'])
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue