From 8f804a5310c266f64c754a022b2ceb488f0a597a Mon Sep 17 00:00:00 2001 From: Moe Date: Thu, 7 Mar 2019 21:28:37 -0800 Subject: [PATCH] Son Goku+ --- libs/plugins.js | 6 +- libs/uploaders.js | 13 ++- libs/uploaders/amazonS3.ejs | 84 +++++++++++++++++++ libs/uploaders/backblazeB2.ejs | 60 +++++++++++++ libs/uploaders/s3based.ejs | 81 ++++++++++++++++++ libs/uploaders/s3based.js | 149 +++++++++++++++++++++++++++++++++ libs/uploaders/sftp.ejs | 45 ++++++++++ libs/uploaders/webdav.ejs | 60 +++++++++++++ 8 files changed, 495 insertions(+), 3 deletions(-) create mode 100644 libs/uploaders/amazonS3.ejs create mode 100644 libs/uploaders/backblazeB2.ejs create mode 100644 libs/uploaders/s3based.ejs create mode 100644 libs/uploaders/s3based.js create mode 100644 libs/uploaders/sftp.ejs create mode 100644 libs/uploaders/webdav.ejs diff --git a/libs/plugins.js b/libs/plugins.js index e7f1edf..5611fe7 100644 --- a/libs/plugins.js +++ b/libs/plugins.js @@ -43,7 +43,11 @@ module.exports = function(s,config,lang){ pluginArray.push(name) } }) - if(pluginArray.length > 0)s.isAtleatOneDetectorPluginConnected = true + if(pluginArray.length > 0){ + s.isAtleatOneDetectorPluginConnected = true + }else{ + s.isAtleatOneDetectorPluginConnected = false + } s.detectorPluginArray = pluginArray } s.sendToAllDetectors = function(data){ diff --git a/libs/uploaders.js b/libs/uploaders.js index 7b67957..053f50f 100644 --- a/libs/uploaders.js +++ b/libs/uploaders.js @@ -1,11 +1,20 @@ module.exports = function(s,config,lang){ + config.uploaderEjsBlocks = [] var loadLib = function(lib){ - return require('./uploaders/' + lib + '.js') + var uploadersFolder = __dirname + '/uploaders/' + var libraryPath = uploadersFolder + lib + '.js' + if(lib !== 'loader'){ + var libraryEjsFile = uploadersFolder + lib + '.ejs' + config.uploaderEjsBlocks.push(libraryEjsFile) + } + return require(libraryPath) } loadLib('loader')(s,config,lang) + //cloud storage + loadLib('s3based')(s,config,lang) loadLib('backblazeB2')(s,config,lang) loadLib('amazonS3')(s,config,lang) loadLib('webdav')(s,config,lang) - loadLib('wasabi')(s,config,lang) + //simple storage loadLib('sftp')(s,config,lang) } diff --git a/libs/uploaders/amazonS3.ejs b/libs/uploaders/amazonS3.ejs new file mode 100644 index 0000000..8dbe995 --- /dev/null +++ b/libs/uploaders/amazonS3.ejs @@ -0,0 +1,84 @@ +<% if(details.use_aws_s3!=='0'){ %> +
+

<%-lang['Amazon S3']%>

+
+ +
+
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+
+<% } %> diff --git a/libs/uploaders/backblazeB2.ejs b/libs/uploaders/backblazeB2.ejs new file mode 100644 index 0000000..c3db16a --- /dev/null +++ b/libs/uploaders/backblazeB2.ejs @@ -0,0 +1,60 @@ +<% if(details.use_bb_b2!=='0'){ %> +
+

<%-lang['Backblaze B2']%>

+
+ +
+
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+
+<% } %> diff --git a/libs/uploaders/s3based.ejs b/libs/uploaders/s3based.ejs new file mode 100644 index 0000000..195095e --- /dev/null +++ b/libs/uploaders/s3based.ejs @@ -0,0 +1,81 @@ +<% if(details.use_whcs!=='0'){ %> +
+

<%-lang['S3-Based Network Storage']%>

+
+ +
+
+
+ +
+ +
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+
+<% } %> diff --git a/libs/uploaders/s3based.js b/libs/uploaders/s3based.js new file mode 100644 index 0000000..67634e2 --- /dev/null +++ b/libs/uploaders/s3based.js @@ -0,0 +1,149 @@ +var fs = require('fs'); +module.exports = function(s,config,lang){ + //Wasabi Hot Cloud Storage + var beforeAccountSaveForWasabiHotCloudStorage = function(d){ + //d = save event + d.form.details.whcs_use_global=d.d.whcs_use_global + d.form.details.use_whcs=d.d.use_whcs + } + var cloudDiskUseStartupForWasabiHotCloudStorage = function(group,userDetails){ + group.cloudDiskUse['whcs'].name = 'Wasabi Hot Cloud Storage' + group.cloudDiskUse['whcs'].sizeLimitCheck = (userDetails.use_whcs_size_limit === '1') + if(!userDetails.whcs_size_limit || userDetails.whcs_size_limit === ''){ + group.cloudDiskUse['whcs'].sizeLimit = 10000 + }else{ + group.cloudDiskUse['whcs'].sizeLimit = parseFloat(userDetails.whcs_size_limit) + } + } + var loadWasabiHotCloudStorageForUser = function(e){ + // e = user + var userDetails = JSON.parse(e.details) + if(userDetails.whcs_use_global === '1' && config.cloudUploaders && config.cloudUploaders.WasabiHotCloudStorage){ + // { + // whcs_accessKeyId: "", + // whcs_secretAccessKey: "", + // whcs_region: "", + // whcs_bucket: "", + // whcs_dir: "", + // } + userDetails = Object.assign(userDetails,config.cloudUploaders.WasabiHotCloudStorage) + } + //Wasabi Hot Cloud Storage + if(!s.group[e.ke].whcs && + userDetails.whcs !== '0' && + userDetails.whcs_accessKeyId !== ''&& + userDetails.whcs_secretAccessKey && + userDetails.whcs_secretAccessKey !== ''&& + userDetails.whcs_region && + userDetails.whcs_region !== ''&& + userDetails.whcs_bucket !== '' + ){ + if(!userDetails.whcs_dir || userDetails.whcs_dir === '/'){ + userDetails.whcs_dir = '' + } + if(userDetails.whcs_dir !== ''){ + userDetails.whcs_dir = s.checkCorrectPathEnding(userDetails.whcs_dir) + } + if(userDetails.use_whcs_endpoint_select && userDetails.use_whcs_endpoint_select !== ''){ + userDetails.whcs_endpoint = userDetails.use_whcs_endpoint_select + } + if(!userDetails.whcs_endpoint || userDetails.whcs_endpoint === ''){ + userDetails.whcs_endpoint = 's3.wasabisys.com' + } + var endpointSplit = userDetails.whcs_endpoint.split('.') + if(endpointSplit.length > 2){ + endpointSplit.shift() + } + var locationUrl = endpointSplit.join('.') + var AWS = new require("aws-sdk") + s.group[e.ke].whcs = AWS + var wasabiEndpoint = new AWS.Endpoint(userDetails.whcs_endpoint) + s.group[e.ke].whcs.config = new s.group[e.ke].whcs.Config({ + endpoint: wasabiEndpoint, + accessKeyId: userDetails.whcs_accessKeyId, + secretAccessKey: userDetails.whcs_secretAccessKey, + region: userDetails.whcs_region + }) + s.group[e.ke].whcs = new s.group[e.ke].whcs.S3(); + } + } + var unloadWasabiHotCloudStorageForUser = function(user){ + s.group[user.ke].whcs = null + } + var deleteVideoFromWasabiHotCloudStorage = function(e,video,callback){ + // e = user + try{ + var videoDetails = JSON.parse(video.details) + }catch(err){ + var videoDetails = video.details + } + if(!videoDetails.location){ + videoDetails.location = video.href.split(locationUrl)[1] + } + s.group[e.ke].whcs.deleteObject({ + Bucket: s.group[e.ke].init.whcs_bucket, + Key: videoDetails.location, + }, function(err, data) { + if (err) console.log(err); + callback() + }); + } + var uploadVideoToWasabiHotCloudStorage = function(e,k){ + //e = video object + //k = temporary values + if(!k)k={}; + //cloud saver - Wasabi Hot Cloud Storage + if(s.group[e.ke].whcs && s.group[e.ke].init.use_whcs !== '0' && s.group[e.ke].init.whcs_save === '1'){ + var ext = k.filename.split('.') + ext = ext[ext.length - 1] + var fileStream = fs.createReadStream(k.dir+k.filename); + fileStream.on('error', function (err) { + console.error(err) + }) + var saveLocation = s.group[e.ke].init.whcs_dir+e.ke+'/'+e.mid+'/'+k.filename + s.group[e.ke].whcs.upload({ + Bucket: s.group[e.ke].init.whcs_bucket, + Key: saveLocation, + Body:fileStream, + ACL:'public-read', + ContentType:'video/'+ext + },function(err,data){ + if(err){ + s.userLog(e,{type:lang['Wasabi Hot Cloud Storage Upload Error'],msg:err}) + } + if(s.group[e.ke].init.whcs_log === '1' && data && data.Location){ + var save = [ + e.mid, + e.ke, + k.startTime, + 1, + s.s({ + type : 'whcs', + location : saveLocation + }), + k.filesize, + k.endTime, + data.Location + ] + s.sqlQuery('INSERT INTO `Cloud Videos` (mid,ke,time,status,details,size,end,href) VALUES (?,?,?,?,?,?,?,?)',save) + s.setCloudDiskUsedForGroup(e,{ + amount : k.filesizeMB, + storageType : 'whcs' + }) + s.purgeCloudDiskForGroup(e,'whcs') + } + }) + } + } + //wasabi + s.addCloudUploader({ + name: 'whcs', + loadGroupAppExtender: loadWasabiHotCloudStorageForUser, + unloadGroupAppExtender: unloadWasabiHotCloudStorageForUser, + insertCompletedVideoExtender: uploadVideoToWasabiHotCloudStorage, + deleteVideoFromCloudExtensions: deleteVideoFromWasabiHotCloudStorage, + cloudDiskUseStartupExtensions: cloudDiskUseStartupForWasabiHotCloudStorage, + beforeAccountSave: beforeAccountSaveForWasabiHotCloudStorage, + onAccountSave: cloudDiskUseStartupForWasabiHotCloudStorage, + }) +} diff --git a/libs/uploaders/sftp.ejs b/libs/uploaders/sftp.ejs new file mode 100644 index 0000000..a33df18 --- /dev/null +++ b/libs/uploaders/sftp.ejs @@ -0,0 +1,45 @@ +<% if(details.use_sftp!=='0'){ %> +
+

<%-lang['SFTP (SSH File Transfer)']%>

+
+ +
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+<% } %> diff --git a/libs/uploaders/webdav.ejs b/libs/uploaders/webdav.ejs new file mode 100644 index 0000000..d5a6637 --- /dev/null +++ b/libs/uploaders/webdav.ejs @@ -0,0 +1,60 @@ +<% if(details.use_webdav!=='0'){ %> +
+

<%-lang.WebDAV%>

+
+ +
+
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+
+ +
+
+ +
+
+
+ +
+
+
+<% } %>