Add Automatic SFTP Uploader
- SFTP Uploader is basic uploader. This method is not capable of managing space like other cloud back up methods. + Minor cleanupmerge-requests/63/head
parent
1078960db2
commit
6a3daccb2f
|
|
@ -208,6 +208,9 @@
|
|||
"WebDAV": "WebDAV",
|
||||
"Backblaze B2": "Backblaze B2",
|
||||
"Backblaze Error": "Backblaze Error",
|
||||
"SFTP (SSH File Transfer)": "SFTP (SSH File Transfer)",
|
||||
"SFTP Error": "SFTP Error",
|
||||
"SFTP": "SFTP",
|
||||
"Could not create Bucket.": "Could not create Bucket.",
|
||||
"Amazon S3": "Amazon S3",
|
||||
"Wasabi Hot Cloud Storage": "Wasabi Hot Cloud Storage",
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ var fs = require('fs');
|
|||
var exec = require('child_process').exec;
|
||||
var spawn = require('child_process').spawn;
|
||||
var webdav = require("webdav-fs");
|
||||
var ssh2SftpClient = require('node-ssh')
|
||||
module.exports = function(s,config,lang){
|
||||
// WebDAV
|
||||
var beforeAccountSaveForWebDav = function(d){
|
||||
|
|
@ -561,120 +562,81 @@ module.exports = function(s,config,lang){
|
|||
}
|
||||
}
|
||||
//SFTP
|
||||
// var beforeAccountSaveForSftp = function(d){
|
||||
// //d = save event
|
||||
// d.form.details.use_sftp = d.d.use_sftp
|
||||
// }
|
||||
// var cloudDiskUseStartupForSftp = function(group,userDetails){
|
||||
// group.cloudDiskUse['sftp'].name = 'SFTP'
|
||||
// group.cloudDiskUse['sftp'].sizeLimitCheck = (userDetails.use_aws_s3_size_limit === '1')
|
||||
// if(!userDetails.aws_s3_size_limit || userDetails.aws_s3_size_limit === ''){
|
||||
// group.cloudDiskUse['sftp'].sizeLimit = 10000
|
||||
// }else{
|
||||
// group.cloudDiskUse['sftp'].sizeLimit = parseFloat(userDetails.aws_s3_size_limit)
|
||||
// }
|
||||
// }
|
||||
// var loadSftpForUser = function(e){
|
||||
// // e = user
|
||||
// var ar = JSON.parse(e.details);
|
||||
// //SFTP
|
||||
// if(!s.group[e.ke].sftp &&
|
||||
// !s.group[e.ke].sftp &&
|
||||
// ar.sftp !== '0' &&
|
||||
// ar.sftp_accessKeyId !== ''&&
|
||||
// ar.sftp_secretAccessKey &&
|
||||
// ar.sftp_secretAccessKey !== ''&&
|
||||
// ar.sftp_region &&
|
||||
// ar.sftp_region !== ''&&
|
||||
// ar.sftp_bucket !== ''
|
||||
// ){
|
||||
// if(!ar.sftp_dir || ar.sftp_dir === '/'){
|
||||
// ar.sftp_dir = ''
|
||||
// }
|
||||
// if(ar.sftp_dir !== ''){
|
||||
// ar.sftp_dir = s.checkCorrectPathEnding(ar.sftp_dir)
|
||||
// }
|
||||
// s.group[e.ke].sftp = new s.group[e.ke].sftp.S3();
|
||||
// s.group[e.ke].sftp = new require('ssh2-sftp-client')();
|
||||
// var connectionDetails = {
|
||||
// host: ar.sftp_host,
|
||||
// port: ar.sftp_port
|
||||
// }
|
||||
// if(!ar.sftp_port)ar.sftp_port = 22
|
||||
// if(ar.sftp_username)connectionDetails.username = ar.sftp_username
|
||||
// if(ar.sftp_password)connectionDetails.password = ar.sftp_password
|
||||
// if(ar.sftp_privateKey)connectionDetails.privateKey = ar.sftp_privateKey
|
||||
// sftp.connect(connectionDetails).then(() => {
|
||||
// return sftp.list('/pathname');
|
||||
// }).then((data) => {
|
||||
// console.log(data, 'the data info');
|
||||
// }).catch((err) => {
|
||||
// console.log(err, 'catch error');
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
// var unloadSftpForUser = function(user){
|
||||
// s.group[user.ke].sftp = null
|
||||
// }
|
||||
// var deleteVideoFromSftp = function(e,video,callback){
|
||||
// // e = user
|
||||
// try{
|
||||
// var videoDetails = JSON.parse(video.details)
|
||||
// }catch(err){
|
||||
// var videoDetails = video.details
|
||||
// }
|
||||
// s.group[e.ke].sftp.deleteObject({
|
||||
// Bucket: s.group[e.ke].init.sftp_bucket,
|
||||
// Key: videoDetails.location,
|
||||
// }, function(err, data) {
|
||||
// if (err) console.log(err);
|
||||
// callback()
|
||||
// });
|
||||
// }
|
||||
// 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 fileStream = fs.createReadStream(k.dir+k.filename);
|
||||
// fileStream.on('error', function (err) {
|
||||
// console.error(err)
|
||||
// })
|
||||
// var saveLocation = s.group[e.ke].init.sftp_dir+e.ke+'/'+e.mid+'/'+k.filename
|
||||
// s.group[e.ke].sftp.upload({
|
||||
// Bucket: s.group[e.ke].init.sftp_bucket,
|
||||
// Key: saveLocation,
|
||||
// Body:fileStream,
|
||||
// ACL:'public-read'
|
||||
// },function(err,data){
|
||||
// if(err){
|
||||
// s.userLog(e,{type:lang['SFTP Upload Error'],msg:err})
|
||||
// }
|
||||
// if(s.group[e.ke].init.sftp_log === '1' && data && data.Location){
|
||||
// var save = [
|
||||
// e.mid,
|
||||
// e.ke,
|
||||
// k.startTime,
|
||||
// 1,
|
||||
// s.s({
|
||||
// type : 'sftp',
|
||||
// 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 : 'sftp'
|
||||
// })
|
||||
// s.purgeCloudDiskForGroup(e,'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 ar = JSON.parse(e.details);
|
||||
//SFTP
|
||||
if(!s.group[e.ke].sftp &&
|
||||
!s.group[e.ke].sftp &&
|
||||
ar.sftp !== '0' &&
|
||||
ar.sftp_host &&
|
||||
ar.sftp_host !== ''&&
|
||||
ar.sftp_port &&
|
||||
ar.sftp_port !== ''
|
||||
){
|
||||
if(!ar.sftp_dir || ar.sftp_dir === '/'){
|
||||
ar.sftp_dir = ''
|
||||
}
|
||||
if(ar.sftp_dir !== ''){
|
||||
ar.sftp_dir = s.checkCorrectPathEnding(ar.sftp_dir)
|
||||
}
|
||||
var sftp = new ssh2SftpClient()
|
||||
var connectionDetails = {
|
||||
host: ar.sftp_host,
|
||||
port: ar.sftp_port
|
||||
}
|
||||
if(!ar.sftp_port)connectionDetails.port = 22
|
||||
if(ar.sftp_username)connectionDetails.username = ar.sftp_username
|
||||
if(ar.sftp_password)connectionDetails.password = ar.sftp_password
|
||||
if(ar.sftp_privateKey)connectionDetails.privateKey = ar.sftp_privateKey
|
||||
sftp.connect(connectionDetails).catch(function(err){console.log(err)})
|
||||
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(function(err){console.log(err)})
|
||||
}
|
||||
}
|
||||
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'){
|
||||
console.log(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].mon_conf).forEach(function(monitorId){
|
||||
createSftpDirectory(s.group[user.ke].mon_conf[monitorId])
|
||||
})
|
||||
}
|
||||
}
|
||||
//add the extenders
|
||||
//webdav
|
||||
s.loadGroupAppExtender(loadWebDavForUser)
|
||||
|
|
@ -712,13 +674,11 @@ module.exports = function(s,config,lang){
|
|||
s.beforeAccountSave(beforeAccountSaveForWasabiHotCloudStorage)
|
||||
s.onAccountSave(cloudDiskUseStartupForWasabiHotCloudStorage)
|
||||
s.cloudDisksLoader('whcs')
|
||||
//SFTP
|
||||
// s.loadGroupAppExtender(loadSftpForUser)
|
||||
// s.unloadGroupAppExtender(unloadSftpForUser)
|
||||
// s.insertCompletedVideoExtender(uploadVideoToSftp)
|
||||
// s.deleteVideoFromCloudExtensions['sftp'] = deleteVideoFromSftp
|
||||
// s.cloudDiskUseStartupExtensions['sftp'] = cloudDiskUseStartupForSftp
|
||||
// s.beforeAccountSave(beforeAccountSaveForSftp)
|
||||
// s.onAccountSave(cloudDiskUseStartupForSftp)
|
||||
// s.cloudDisksLoader('sftp')
|
||||
//SFTP (Simple Uploader)
|
||||
s.loadGroupAppExtender(loadSftpForUser)
|
||||
s.unloadGroupAppExtender(unloadSftpForUser)
|
||||
s.insertCompletedVideoExtender(uploadVideoToSftp)
|
||||
s.beforeAccountSave(beforeAccountSaveForSftp)
|
||||
s.onAccountSave(onAccountSaveForSftp)
|
||||
s.onMonitorSave(onMonitorSaveForSftp)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -72,6 +72,11 @@ module.exports = function(s,config){
|
|||
s.onMonitorStopExtensions.push(callback)
|
||||
}
|
||||
//
|
||||
s.onMonitorSaveExtensions = []
|
||||
s.onMonitorSave = function(callback){
|
||||
s.onMonitorSaveExtensions.push(callback)
|
||||
}
|
||||
//
|
||||
s.onMonitorUnexpectedExitExtensions = []
|
||||
s.onMonitorUnexpectedExit = function(callback){
|
||||
s.onMonitorUnexpectedExitExtensions.push(callback)
|
||||
|
|
|
|||
|
|
@ -1462,6 +1462,9 @@ module.exports = function(s,config,lang){
|
|||
}
|
||||
s.tx(txData,'GRP_'+form.ke)
|
||||
callback(!endData.ok,endData)
|
||||
s.onMonitorSaveExtensions.forEach(function(extender){
|
||||
extender(Object.assign(s.group[e.ke].mon_conf[e.id],{}),e,endData)
|
||||
})
|
||||
})
|
||||
}
|
||||
s.camera = function(x,e,cn){
|
||||
|
|
|
|||
|
|
@ -295,7 +295,7 @@ module.exports = function(s,config){
|
|||
var userDetails = JSON.parse(d.form.details)
|
||||
s.group[d.ke].sizeLimit = parseFloat(newSize)
|
||||
s.onAccountSaveExtensions.forEach(function(extender){
|
||||
extender(s.group[d.ke],userDetails)
|
||||
extender(s.group[d.ke],userDetails,user)
|
||||
})
|
||||
s.unloadGroupAppExtensions.forEach(function(extender){
|
||||
extender(user)
|
||||
|
|
|
|||
|
|
@ -119,6 +119,22 @@
|
|||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_l_input h_l_limited">
|
||||
<label><div><span><%-lang['Can use Wasabi Hot Cloud Storage']%></span></div>
|
||||
<div><select class="form-control" detail="use_whcs">
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
<option value="0"><%-lang.No%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_l_input h_l_limited">
|
||||
<label><div><span><%-lang['Can use SFTP']%></span></div>
|
||||
<div><select class="form-control" detail="use_sftp">
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
<option value="0"><%-lang.No%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_l_input h_l_limited">
|
||||
<label><div><span><%-lang['Can use WebDAV']%></span></div>
|
||||
<div><select class="form-control" detail="use_webdav">
|
||||
|
|
@ -146,24 +162,24 @@
|
|||
<div class="form-group h_l_input h_l_limited">
|
||||
<label><div><span><%-lang['Use Global Amazon S3 Video Storage']%></span></div>
|
||||
<div><select class="form-control" detail="aws_use_global">
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_l_input h_l_limited">
|
||||
<label><div><span><%-lang['Use Global Backblaze B2 Video Storage']%></span></div>
|
||||
<div><select class="form-control" detail="b2_use_global">
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_l_input h_l_limited">
|
||||
<label><div><span><%-lang['Use Global WebDAV Video Storage']%></span></div>
|
||||
<div><select class="form-control" detail="webdav_use_global">
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -174,265 +174,313 @@
|
|||
<% if(details.use_webdav!=='0'){ %>
|
||||
<div class="form-group-group forestgreen">
|
||||
<h4><%-lang.WebDAV%></h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.URL%></span></div>
|
||||
<div><input class="form-control" detail="webdav_url"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.Username%></span></div>
|
||||
<div><input class="form-control" detail="webdav_user"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.Password%></span></div>
|
||||
<div><input class="form-control" type="password" detail="webdav_pass"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Autosave%></span></div>
|
||||
<div><select class="form-control" detail="webdav_save">
|
||||
<div><select class="form-control" detail="webdav_save" selector="autosave_webdav">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Links to Database']%></span></div>
|
||||
<div><select class="form-control" detail="webdav_log" selector="h_webdavsld">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="h_webdavsld_input h_webdavsld_1">
|
||||
<div class="autosave_webdav_input autosave_webdav_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Use Max Storage Amount']%></span></div>
|
||||
<div><select class="form-control" detail="use_webdav_size_limit" selector="h_webdavzl">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<label><div><span><%-lang.URL%></span></div>
|
||||
<div><input class="form-control" detail="webdav_url"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.Username%></span></div>
|
||||
<div><input class="form-control" detail="webdav_user"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.Password%></span></div>
|
||||
<div><input class="form-control" type="password" detail="webdav_pass"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Links to Database']%></span></div>
|
||||
<div><select class="form-control" detail="webdav_log" selector="h_webdavsld">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_webdavzl_input h_webdavzl_1">
|
||||
<label><div><span><%-lang['Max Storage Amount']%></span></div>
|
||||
<div><input class="form-control" placeholder="10000" detail="webdav_size_limit"></div>
|
||||
<div class="h_webdavsld_input h_webdavsld_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Use Max Storage Amount']%></span></div>
|
||||
<div><select class="form-control" detail="use_webdav_size_limit" selector="h_webdavzl">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_webdavzl_input h_webdavzl_1">
|
||||
<label><div><span><%-lang['Max Storage Amount']%></span></div>
|
||||
<div><input class="form-control" placeholder="10000" detail="webdav_size_limit"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Directory']%></span></div>
|
||||
<div><input class="form-control" placeholder="/" detail="webdav_dir"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Directory']%></span></div>
|
||||
<div><input class="form-control" placeholder="/" detail="webdav_dir"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<% if(details.use_aws_s3!=='0'){ %>
|
||||
<div class="form-group-group forestgreen">
|
||||
<h4><%-lang['Amazon S3']%></h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Bucket%></span></div>
|
||||
<div><input class="form-control" detail="aws_s3_bucket" placeholder="Example : slippery-seal"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.aws_accessKeyId%></span></div>
|
||||
<div><input class="form-control" detail="aws_accessKeyId"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.aws_secretAccessKey%></span></div>
|
||||
<div><input class="form-control" type="password" detail="aws_secretAccessKey"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Region%></span></div>
|
||||
<div><select class="form-control" detail="aws_region">
|
||||
<option value="us-west-1" selected>US West (N. California)</option>
|
||||
<option value="us-west-2">US West (Oregon)</option>
|
||||
<option value="us-east-2">US East (Ohio)</option>
|
||||
<option value="us-east-1">US East (N. Virginia)</option>
|
||||
<option value="ap-south-1">Asia Pacific (Mumbai)</option>
|
||||
<option value="ap-northeast-2">Asia Pacific (Seoul)</option>
|
||||
<option value="ap-northeast-3">Asia Pacific (Osaka-Local)**</option>
|
||||
<option value="ap-southeast-1">Asia Pacific (Singapore)</option>
|
||||
<option value="ap-southeast-2">Asia Pacific (Sydney)</option>
|
||||
<option value="ap-northeast-1">Asia Pacific (Tokyo)</option>
|
||||
<option value="ca-central-1">Canada (Central)</option>
|
||||
<option value="cn-north-1">China (Beijing)</option>
|
||||
<option value="cn-northwest-1">China (Ningxia)</option>
|
||||
<option value="eu-central-1">EU (Frankfurt)</option>
|
||||
<option value="eu-west-1">EU (Ireland)</option>
|
||||
<option value="eu-west-2">EU (London)</option>
|
||||
<option value="eu-west-3">EU (Paris)</option>
|
||||
<option value="sa-east-1">South America (São Paulo)</option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Autosave%></span></div>
|
||||
<div><select class="form-control" detail="aws_s3_save">
|
||||
<div><select class="form-control" detail="aws_s3_save" selector="autosave_aws_s3">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Links to Database']%></span></div>
|
||||
<div><select class="form-control" detail="aws_s3_log" selector="h_s3sld">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="h_s3sld_input h_s3sld_1">
|
||||
<div class="autosave_aws_s3_input autosave_aws_s3_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Use Max Storage Amount']%></span></div>
|
||||
<div><select class="form-control" detail="use_aws_s3_size_limit" selector="h_s3zl">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<label><div><span><%-lang.Bucket%></span></div>
|
||||
<div><input class="form-control" detail="aws_s3_bucket" placeholder="Example : slippery-seal"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.aws_accessKeyId%></span></div>
|
||||
<div><input class="form-control" detail="aws_accessKeyId"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.aws_secretAccessKey%></span></div>
|
||||
<div><input class="form-control" type="password" detail="aws_secretAccessKey"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Region%></span></div>
|
||||
<div><select class="form-control" detail="aws_region">
|
||||
<option value="us-west-1" selected>US West (N. California)</option>
|
||||
<option value="us-west-2">US West (Oregon)</option>
|
||||
<option value="us-east-2">US East (Ohio)</option>
|
||||
<option value="us-east-1">US East (N. Virginia)</option>
|
||||
<option value="ap-south-1">Asia Pacific (Mumbai)</option>
|
||||
<option value="ap-northeast-2">Asia Pacific (Seoul)</option>
|
||||
<option value="ap-northeast-3">Asia Pacific (Osaka-Local)**</option>
|
||||
<option value="ap-southeast-1">Asia Pacific (Singapore)</option>
|
||||
<option value="ap-southeast-2">Asia Pacific (Sydney)</option>
|
||||
<option value="ap-northeast-1">Asia Pacific (Tokyo)</option>
|
||||
<option value="ca-central-1">Canada (Central)</option>
|
||||
<option value="cn-north-1">China (Beijing)</option>
|
||||
<option value="cn-northwest-1">China (Ningxia)</option>
|
||||
<option value="eu-central-1">EU (Frankfurt)</option>
|
||||
<option value="eu-west-1">EU (Ireland)</option>
|
||||
<option value="eu-west-2">EU (London)</option>
|
||||
<option value="eu-west-3">EU (Paris)</option>
|
||||
<option value="sa-east-1">South America (São Paulo)</option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Links to Database']%></span></div>
|
||||
<div><select class="form-control" detail="aws_s3_log" selector="h_s3sld">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_s3zl_input h_s3zl_1">
|
||||
<label><div><span><%-lang['Max Storage Amount']%></span></div>
|
||||
<div><input class="form-control" placeholder="10000" detail="aws_s3_size_limit"></div>
|
||||
<div class="h_s3sld_input h_s3sld_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Use Max Storage Amount']%></span></div>
|
||||
<div><select class="form-control" detail="use_aws_s3_size_limit" selector="h_s3zl">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_s3zl_input h_s3zl_1">
|
||||
<label><div><span><%-lang['Max Storage Amount']%></span></div>
|
||||
<div><input class="form-control" placeholder="10000" detail="aws_s3_size_limit"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Directory']%></span></div>
|
||||
<div><input class="form-control" placeholder="" detail="aws_s3_dir"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Directory']%></span></div>
|
||||
<div><input class="form-control" placeholder="" detail="aws_s3_dir"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<% if(details.use_bb_b2!=='0'){ %>
|
||||
<div class="form-group-group forestgreen">
|
||||
<h4><%-lang['Backblaze B2']%></h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Bucket%></span></div>
|
||||
<div><input class="form-control" detail="bb_b2_bucket" placeholder="Example : slippery-seal"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.accountId%></span></div>
|
||||
<div><input class="form-control" detail="bb_b2_accountId"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.applicationKey%></span></div>
|
||||
<div><input class="form-control" type="password" detail="bb_b2_applicationKey"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Autosave%></span></div>
|
||||
<div><select class="form-control" detail="bb_b2_save">
|
||||
<div><select class="form-control" detail="bb_b2_save" selector="autosave_bb_b2">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Links to Database']%></span></div>
|
||||
<div><select class="form-control" detail="bb_b2_log" selector="h_b2sld">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="h_b2sld_input h_b2sld_1">
|
||||
<div class="autosave_bb_b2_input autosave_bb_b2_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Use Max Storage Amount']%></span></div>
|
||||
<div><select class="form-control" detail="use_bb_b2_size_limit" selector="h_b2zl">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<label><div><span><%-lang.Bucket%></span></div>
|
||||
<div><input class="form-control" detail="bb_b2_bucket" placeholder="Example : slippery-seal"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.accountId%></span></div>
|
||||
<div><input class="form-control" detail="bb_b2_accountId"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.applicationKey%></span></div>
|
||||
<div><input class="form-control" type="password" detail="bb_b2_applicationKey"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Links to Database']%></span></div>
|
||||
<div><select class="form-control" detail="bb_b2_log" selector="h_b2sld">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_b2zl_input h_b2zl_1">
|
||||
<label><div><span><%-lang['Max Storage Amount']%></span></div>
|
||||
<div><input class="form-control" placeholder="10000" detail="bb_b2_size_limit"></div>
|
||||
<div class="h_b2sld_input h_b2sld_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Use Max Storage Amount']%></span></div>
|
||||
<div><select class="form-control" detail="use_bb_b2_size_limit" selector="h_b2zl">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_b2zl_input h_b2zl_1">
|
||||
<label><div><span><%-lang['Max Storage Amount']%></span></div>
|
||||
<div><input class="form-control" placeholder="10000" detail="bb_b2_size_limit"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Directory']%></span></div>
|
||||
<div><input class="form-control" placeholder="" detail="bb_b2_dir"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Directory']%></span></div>
|
||||
<div><input class="form-control" placeholder="" detail="bb_b2_dir"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<% if(details.use_whcs!=='0'){ %>
|
||||
<div class="form-group-group forestgreen">
|
||||
<h4><%-lang['Wasabi Hot Cloud Storage']%></h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Bucket%></span></div>
|
||||
<div><input class="form-control" detail="whcs_bucket" placeholder="Example : slippery-seal"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.aws_accessKeyId%></span></div>
|
||||
<div><input class="form-control" detail="whcs_accessKeyId"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.aws_secretAccessKey%></span></div>
|
||||
<div><input class="form-control" type="password" detail="whcs_secretAccessKey"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Region%></span></div>
|
||||
<div><select class="form-control" detail="whcs_region">
|
||||
<option value="us-west-1" selected>US West</option>
|
||||
<option value="us-east-1">US East</option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Autosave%></span></div>
|
||||
<div><select class="form-control" detail="whcs_save">
|
||||
<div><select class="form-control" detail="whcs_save" selector="autosave_whcs">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Links to Database']%></span></div>
|
||||
<div><select class="form-control" detail="whcs_log" selector="h_whcssld">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="h_whcssld_input h_whcssld_1">
|
||||
<div class="autosave_whcs_input autosave_whcs_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Use Max Storage Amount']%></span></div>
|
||||
<div><select class="form-control" detail="use_whcs_size_limit" selector="h_whcszl">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
<label><div><span><%-lang.Bucket%></span></div>
|
||||
<div><input class="form-control" detail="whcs_bucket" placeholder="Example : slippery-seal"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.aws_accessKeyId%></span></div>
|
||||
<div><input class="form-control" detail="whcs_accessKeyId"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group col-md-12">
|
||||
<label><div><span><%-lang.aws_secretAccessKey%></span></div>
|
||||
<div><input class="form-control" type="password" detail="whcs_secretAccessKey"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Region%></span></div>
|
||||
<div><select class="form-control" detail="whcs_region">
|
||||
<option value="us-west-1" selected>US West</option>
|
||||
<option value="us-east-1">US East</option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Links to Database']%></span></div>
|
||||
<div><select class="form-control" detail="whcs_log" selector="h_whcssld">
|
||||
<option value="0"><%-lang.No%></option>
|
||||
<option value="1" selected><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_whcszl_input h_whcszl_1">
|
||||
<label><div><span><%-lang['Max Storage Amount']%></span></div>
|
||||
<div><input class="form-control" placeholder="10000" detail="whcs_size_limit"></div>
|
||||
<div class="h_whcssld_input h_whcssld_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Use Max Storage Amount']%></span></div>
|
||||
<div><select class="form-control" detail="use_whcs_size_limit" selector="h_whcszl">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group h_whcszl_input h_whcszl_1">
|
||||
<label><div><span><%-lang['Max Storage Amount']%></span></div>
|
||||
<div><input class="form-control" placeholder="10000" detail="whcs_size_limit"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Directory']%></span></div>
|
||||
<div><input class="form-control" placeholder="" detail="whcs_dir"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<% if(details.use_sftp!=='0'){ %>
|
||||
<div class="form-group-group forestgreen">
|
||||
<h4><%-lang['SFTP (SSH File Transfer)']%></h4>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Directory']%></span></div>
|
||||
<div><input class="form-control" placeholder="" detail="whcs_dir"></div>
|
||||
<label><div><span><%-lang.Autosave%></span></div>
|
||||
<div><select class="form-control" detail="sftp_save" selector="autosave_sftp">
|
||||
<option value="0" selected><%-lang.No%></option>
|
||||
<option value="1"><%-lang.Yes%></option>
|
||||
</select></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="autosave_sftp_input autosave_sftp_1">
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Host%></span></div>
|
||||
<div><input class="form-control" detail="sftp_host"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Port%></span></div>
|
||||
<div><input class="form-control" type="text" detail="sftp_port"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Username%></span></div>
|
||||
<div><input class="form-control" type="text" detail="sftp_username"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang.Password%></span></div>
|
||||
<div><input class="form-control" type="password" detail="sftp_password"></div>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label><div><span><%-lang['Save Directory']%></span></div>
|
||||
<div><input class="form-control" placeholder="" detail="sftp_dir"></div>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<% } %>
|
||||
<% if(details.use_discordbot!=='0'){ %>
|
||||
|
|
|
|||
Loading…
Reference in New Issue