Shinobi/libs/uploaders/sftp.js

179 lines
6.6 KiB
JavaScript

var fs = require('fs');
var ssh2SftpClient = require('node-ssh')
module.exports = function(s,config,lang){
//SFTP
var sftpErr = function(err){
// console.log(err)
s.userLog({mid:'$USER',ke:e.ke},{type:lang['SFTP Error'],msg:err.data || err})
}
var beforeAccountSaveForSftp = function(d){
//d = save event
d.form.details.use_sftp = d.d.use_sftp
}
var loadSftpForUser = function(e){
// e = user
var userDetails = JSON.parse(e.details);
//SFTP
if(!s.group[e.ke].sftp &&
!s.group[e.ke].sftp &&
userDetails.sftp !== '0' &&
userDetails.sftp_host &&
userDetails.sftp_host !== ''&&
userDetails.sftp_port &&
userDetails.sftp_port !== ''
){
if(!userDetails.sftp_dir || userDetails.sftp_dir === '/'){
userDetails.sftp_dir = ''
}
if(userDetails.sftp_dir !== ''){
userDetails.sftp_dir = s.checkCorrectPathEnding(userDetails.sftp_dir)
}
var sftp = new ssh2SftpClient()
var connectionDetails = {
host: userDetails.sftp_host,
port: userDetails.sftp_port
}
if(!userDetails.sftp_port)connectionDetails.port = 22
if(userDetails.sftp_username && userDetails.sftp_username !== '')connectionDetails.username = userDetails.sftp_username
if(userDetails.sftp_password && userDetails.sftp_password !== '')connectionDetails.password = userDetails.sftp_password
if(userDetails.sftp_privateKey && userDetails.sftp_privateKey !== '')connectionDetails.privateKey = userDetails.sftp_privateKey
sftp.connect(connectionDetails).catch(sftpErr)
s.group[e.ke].sftp = sftp
}
}
var unloadSftpForUser = function(user){
if(s.group[user.ke].sftp && s.group[user.ke].sftp.end)s.group[user.ke].sftp.end().then(function(){
s.group[user.ke].sftp = null
})
}
var uploadVideoToSftp = function(e,k){
//e = video object
//k = temporary values
if(!k)k={};
//cloud saver - SFTP
if(s.group[e.ke].sftp && s.group[e.ke].init.use_sftp !== '0' && s.group[e.ke].init.sftp_save === '1'){
var localPath = k.dir + k.filename
var saveLocation = s.group[e.ke].init.sftp_dir + e.ke + '/' + e.mid + '/' + k.filename
s.group[e.ke].sftp.putFile(localPath, saveLocation).catch(sftpErr)
}
}
var createSftpDirectory = function(monitorConfig){
var monitorSaveDirectory = s.group[monitorConfig.ke].init.sftp_dir + monitorConfig.ke + '/' + monitorConfig.mid
s.group[monitorConfig.ke].sftp.mkdir(monitorSaveDirectory, true).catch(function(err){
if(err.code !== 'ERR_ASSERTION'){
sftpErr(err)
}
})
}
var onMonitorSaveForSftp = function(monitorConfig){
if(s.group[monitorConfig.ke].sftp && s.group[monitorConfig.ke].init.use_sftp !== '0' && s.group[monitorConfig.ke].init.sftp_save === '1'){
createSftpDirectory(monitorConfig)
}
}
var onAccountSaveForSftp = function(group,userDetails,user){
if(s.group[user.ke] && s.group[user.ke].sftp && s.group[user.ke].init.use_sftp !== '0' && s.group[user.ke].init.sftp_save === '1'){
Object.keys(s.group[user.ke].rawMonitorConfigurations).forEach(function(monitorId){
createSftpDirectory(s.group[user.ke].rawMonitorConfigurations[monitorId])
})
}
}
//SFTP (Simple Uploader)
s.addSimpleUploader({
name: 'sftp',
loadGroupAppExtender: loadSftpForUser,
unloadGroupAppExtender: unloadSftpForUser,
insertCompletedVideoExtender: uploadVideoToSftp,
beforeAccountSave: beforeAccountSaveForSftp,
onAccountSave: onAccountSaveForSftp,
onMonitorSave: onMonitorSaveForSftp,
})
return {
"evaluation": "details.use_sftp !== '0'",
"name": lang['SFTP (SSH File Transfer)'],
"color": "forestgreen",
"info": [
{
"name": "detail=sftp_save",
"selector":"autosave_sftp",
"field": lang.Autosave,
"description": "",
"default": lang.No,
"example": "",
"fieldType": "select",
"possible": [
{
"name": lang.No,
"value": "0"
},
{
"name": lang.Yes,
"value": "1"
}
]
},
{
"hidden": true,
"field": lang.Host,
"name": "detail=sftp_host",
"form-group-class": "autosave_sftp_input autosave_sftp_1",
"description": "",
"default": "",
"example": "",
"possible": ""
},
{
"hidden": true,
"field": lang.Port,
"name": "detail=sftp_port",
"form-group-class": "autosave_sftp_input autosave_sftp_1",
"description": "",
"default": "",
"example": "",
"possible": ""
},
{
"hidden": true,
"field": lang.Username,
"name": "detail=sftp_username",
"form-group-class": "autosave_sftp_input autosave_sftp_1",
"description": "",
"default": "",
"example": "",
"possible": ""
},
{
"hidden": true,
"field": lang.Password,
"fieldType": "password",
"name": "detail=sftp_password",
"form-group-class": "autosave_sftp_input autosave_sftp_1",
"description": "",
"default": "",
"example": "",
"possible": ""
},
{
"hidden": true,
"field": lang.privateKey,
"fieldType": "textarea",
"name": "detail=sftp_privateKey",
"form-group-class": "autosave_sftp_input autosave_sftp_1",
"description": "",
"default": "",
"example": "",
"possible": ""
},
{
"hidden": true,
"name": "detail=sftp_dir",
"field": lang['Save Directory'],
"form-group-class":"autosave_sftp_input autosave_sftp_1",
"description": "",
"default": "/",
"example": "",
"possible": ""
},
]
}
}