From 9f1bbca9b1ca3762a0ff80837f6b82add9ef2e2c Mon Sep 17 00:00:00 2001 From: Moe Date: Mon, 8 Aug 2022 10:15:58 -0700 Subject: [PATCH] Update WebDAV uploader + timelapse frame uploads + proxy video data through Shinobi server on video GET for security and consistency --- libs/uploaders/webdav.js | 60 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/libs/uploaders/webdav.js b/libs/uploaders/webdav.js index d407ebde..2f541a7b 100644 --- a/libs/uploaders/webdav.js +++ b/libs/uploaders/webdav.js @@ -94,7 +94,7 @@ module.exports = function(s,config,lang){ }), size: k.filesize, end: k.endTime, - href: webdavRemoteUrl + href: '' } }) s.setCloudDiskUsedForGroup(e.ke,{ @@ -157,6 +157,61 @@ module.exports = function(s,config,lang){ } } } + function onInsertTimelapseFrame(monitorObject,queryInfo,filePath){ + var e = monitorObject + if(s.group[e.ke].aws_s3 && s.group[e.ke].init.use_aws_s3 !== '0' && s.group[e.ke].init.aws_s3_save === '1'){ + const saveLocation = s.group[e.ke].init.webdav_dir+e.ke+'/'+e.mid+'_timelapse/' + queryInfo.filename + fs.createReadStream(filePath).pipe(wfs.createWriteStream(saveLocation)) + if(s.group[e.ke].init.aws_s3_log === '1'){ + s.knexQuery({ + action: "insert", + table: "Cloud Timelapse Frames", + insert: { + mid: queryInfo.mid, + ke: queryInfo.ke, + time: queryInfo.time, + filename: queryInfo.filename, + details: s.s({ + type : 'webdav', + location : saveLocation + }), + size: queryInfo.size, + href: '' + } + }) + s.setCloudDiskUsedForGroup(e.ke,{ + amount : s.kilobyteToMegabyte(queryInfo.size), + storageType : 'webdav' + },'timelapseFrames') + s.purgeCloudDiskForGroup(e,'webdav','timelapseFrames') + } + } + } + function onDeleteTimelapseFrameFromCloud(e,frame,callback){ + // e = user + try{ + var frameDetails = JSON.parse(frame.details) + }catch(err){ + var frameDetails = frame.details + } + if(frameDetails.type !== 'webdav'){ + return + } + if(!frameDetails.location){ + frameDetails.location = frame.href.split(locationUrl)[1] + } + s.group[e.ke].webdav.unlink(frameDetails.location, function(err) { + if (err) console.log(frameDetails.location,err) + callback() + }) + } + async function onGetVideoData(video){ + const wfs = s.group[video.ke].webdav + const videoDetails = s.parseJSON(video.details) + const saveLocation = videoDetails.location + const fileStream = wfs.createReadStream(saveLocation); + return fileStream + } //webdav s.addCloudUploader({ name: 'webdav', @@ -167,6 +222,9 @@ module.exports = function(s,config,lang){ cloudDiskUseStartupExtensions: cloudDiskUseStartupForWebDav, beforeAccountSave: beforeAccountSaveForWebDav, onAccountSave: cloudDiskUseStartupForWebDav, + onInsertTimelapseFrame, + onDeleteTimelapseFrameFromCloud, + onGetVideoData }) return { "evaluation": "details.use_webdav !== '0'",