You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
607 lines
16 KiB
607 lines
16 KiB
// pm2 restart kplayer
|
|
// /srv/samba/daten/node
|
|
|
|
var express = require('express');
|
|
var fs = require("fs");
|
|
var path = require("path");
|
|
|
|
const { exec, execSync} = require('child_process');
|
|
|
|
|
|
const bodyParser= require('body-parser')
|
|
const multer = require('multer');
|
|
|
|
var app = express();
|
|
app.use(bodyParser.urlencoded({extended: true}))
|
|
|
|
app.get('/', function(req, res) {
|
|
res.json({ message: 'WELCOME' });
|
|
});
|
|
|
|
function isVideoFolder(address) {
|
|
return getFiles(address).filter(dirent => dirent.name.endsWith(".mp4")).length > 0
|
|
}
|
|
|
|
function hasPics(address) {
|
|
return getFiles(address).filter(dirent => dirent.name.endsWith(".jpg")).length > 0
|
|
}
|
|
|
|
function getFiles(address) {
|
|
try {
|
|
return fs.readdirSync(address, {withFileTypes: true})
|
|
}
|
|
catch {
|
|
return []
|
|
}
|
|
// .filter(dirent => dirent.isDirectory())
|
|
// .map(dirent => dirent.name);
|
|
}
|
|
|
|
app.get('/listfiles/*', function (req, res) {
|
|
var address = decodeURIComponent(req.path.substr(10))
|
|
console.log("listdirs " + address);
|
|
|
|
if (!req.path.startsWith("/listfiles/srv/samba/ren/")) {
|
|
res.end("Access denied")
|
|
return
|
|
}
|
|
var result = [];
|
|
|
|
try {
|
|
var files = getFiles(address)
|
|
|
|
files.forEach(function(file){
|
|
var filename = path.resolve(address, file.name)
|
|
|
|
console.log(filename)
|
|
|
|
result.push(filename)
|
|
})
|
|
}
|
|
catch {
|
|
|
|
}
|
|
|
|
res.end(JSON.stringify(result))
|
|
})
|
|
|
|
app.get('/listdirs/*', function (req, res) {
|
|
var address = req.path.substr(9)
|
|
console.log("listdirs " + address);
|
|
|
|
if (!req.path.startsWith("/listdirs/srv/samba/ren/")) {
|
|
res.end("Access denied")
|
|
return
|
|
}
|
|
|
|
var files = getFiles(address)
|
|
|
|
var leaf = true
|
|
|
|
var result = [];
|
|
|
|
files.forEach(function(file){
|
|
var filename = file.name
|
|
var filetype = "folder"
|
|
var pics = false
|
|
|
|
if ((file.isDirectory() || file.isSymbolicLink()) && !filename.startsWith(".")) {
|
|
var folders = getFiles(address + "/" + filename)
|
|
|
|
if (folders.filter(dirent => dirent.name.endsWith(".mp4")).length > 0) {
|
|
filetype = "video"
|
|
}
|
|
else if (folders.filter(dirent => dirent.name.endsWith(".html")).length > 0) {
|
|
filetype = "web"
|
|
}
|
|
// else if (folders.filter(dirent => dirent.name.endsWith(".jpg")).length > 0) {
|
|
else {
|
|
folders.forEach(function (f) {
|
|
if (f.isDirectory()) {
|
|
|
|
if (hasPics(address + "/" + filename + "/" + f.name)) {
|
|
filetype = "pictures"
|
|
}
|
|
}
|
|
})
|
|
}
|
|
|
|
console.log(filename)
|
|
|
|
result.push([filename, filetype])
|
|
}
|
|
})
|
|
|
|
res.end(JSON.stringify(result))
|
|
})
|
|
|
|
app.get('/listpicdirs/*', function (req, res) {
|
|
var address = req.path.substr(12)
|
|
console.log("listdirs " + address);
|
|
|
|
if (!req.path.startsWith("/listpicdirs/srv/samba/ren/")) {
|
|
res.end("Access denied")
|
|
return
|
|
}
|
|
|
|
var files = getFiles(address)
|
|
|
|
var result = [];
|
|
|
|
files.forEach(function(file){
|
|
var filename = file.name
|
|
var filetype = "folder"
|
|
var pics = false
|
|
|
|
if ((file.isDirectory() || file.isSymbolicLink()) && !filename.startsWith(".")) {
|
|
var folders = getFiles(address + "/" + filename)
|
|
var hasFav = true
|
|
|
|
folders.forEach(function (f) {
|
|
if (hasFav && f.name.toLowerCase().endsWith(".jpg")) {
|
|
var p = address + "/" + filename
|
|
p = p.replace("/srv/samba/ren", "/srv/samba/ren/favpic")
|
|
var fav = getFiles(p)
|
|
fav.forEach(function (g) {
|
|
result.push(address + "/" + filename + "/" + g.name)
|
|
console.log("f--" + g.name)
|
|
hasFav = false
|
|
})
|
|
|
|
if (hasFav) {
|
|
console.log("--" + f.name)
|
|
|
|
var n = address + "/" + filename + "/" + f.name
|
|
var r = n.replace("/srv/samba/ren", "/srv/samba/ren/thumbs")
|
|
|
|
if (fs.existsSync(r)) {
|
|
n = r
|
|
}
|
|
result.push(n)
|
|
hasFav = false
|
|
}
|
|
}
|
|
})
|
|
|
|
console.log(filename)
|
|
}
|
|
})
|
|
|
|
res.end(JSON.stringify(result))
|
|
})
|
|
|
|
app.get('/listvideos/*', function (req, res) {
|
|
var address = decodeURIComponent(req.path.substr(11))
|
|
console.log("listdirs " + address);
|
|
|
|
if (!req.path.startsWith("/listvideos/srv/samba/ren/")) {
|
|
res.end("Access denied")
|
|
return
|
|
}
|
|
var result = [];
|
|
|
|
try {
|
|
var files = getFiles(address)
|
|
|
|
files.forEach(function(file){
|
|
var filename = path.resolve(address, file.name)
|
|
|
|
console.log(filename)
|
|
|
|
if (filename.endsWith(".mp4"))
|
|
result.push(filename)
|
|
if (filename.endsWith(".m4v"))
|
|
result.push(filename)
|
|
})
|
|
}
|
|
catch {
|
|
|
|
}
|
|
|
|
res.end(JSON.stringify(result))
|
|
})
|
|
|
|
/*
|
|
@RequestMapping (method = RequestMethod.GET, value = "/listpicdirs/**")
|
|
@ResponseBody List<String> listpicdirs(HttpServletRequest request, HttpServletResponse response) {
|
|
String address = (String) request.getAttribute(
|
|
HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
|
|
|
|
address = address["/service/listpicdirs".length()..-1]
|
|
String filter = null
|
|
|
|
if (address.indexOf("*") > 0) {
|
|
def param = address.split(Pattern.quote("*"))
|
|
address = param[0]
|
|
filter = param[1].toLowerCase()
|
|
|
|
println "filter !" + filter + "!"
|
|
}
|
|
|
|
println "listpicdirs " + address;
|
|
|
|
def b = []
|
|
|
|
new File(address).eachDirRecurse() { file ->
|
|
if (filter && !file.name.toLowerCase().contains(filter)) {
|
|
// ignore
|
|
}
|
|
else {
|
|
def f = file.list()
|
|
|
|
for (String fi : f) {
|
|
if (fi.toLowerCase().endsWith(".jpg")) {
|
|
boolean hasFav = false
|
|
def p = file.absolutePath
|
|
if (p.indexOf("/favpic/") < 0) {
|
|
p = p.replace("/srv/samba/ren", "/srv/samba/ren/favpic")
|
|
|
|
def l = new File(p).list()
|
|
|
|
for (i in l) {
|
|
b << file.absolutePath + "/" + i
|
|
hasFav = true
|
|
}
|
|
|
|
}
|
|
|
|
if (!hasFav) {
|
|
b << file.absolutePath + "/" + fi
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return b
|
|
}
|
|
|
|
@RequestMapping (method = RequestMethod.GET, value = "/listvideos/**")
|
|
@ResponseBody List<String> listvideos(HttpServletRequest request, HttpServletResponse response) {
|
|
String address = (String) request.getAttribute(
|
|
HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
|
|
|
|
address = address["/service/listvideos".length()..-1]
|
|
println "listvideos " + address;
|
|
String filter = null
|
|
|
|
if (address.indexOf("*") > 0) {
|
|
def param = address.split(Pattern.quote("*"))
|
|
address = param[0]
|
|
filter = param[1].toLowerCase()
|
|
|
|
println "filter !" + filter + "!"
|
|
}
|
|
|
|
|
|
def b = []
|
|
|
|
new File(address).eachFileRecurse() { file ->
|
|
if (filter && !file.name.toLowerCase().contains(filter)) {
|
|
// ignore
|
|
}
|
|
else {
|
|
if (!file.name.startsWith(".")) {
|
|
if (file.name.toLowerCase().endsWith("mp4")) b << file.absolutePath
|
|
|
|
if (file.name.toLowerCase().endsWith("m4v")) b << file.absolutePath
|
|
}
|
|
}
|
|
}
|
|
|
|
return b
|
|
}
|
|
|
|
* */
|
|
|
|
|
|
var storage = multer.diskStorage({
|
|
destination: function (req, file, cb) {
|
|
cb(null, 'uploads')
|
|
},
|
|
filename: function (req, file, cb) {
|
|
cb(null, file.fieldname + '-' + Date.now())
|
|
}
|
|
})
|
|
|
|
var upload = multer({ storage: storage })
|
|
|
|
app.get('/alive', function (req, res) {
|
|
let date = new Date()
|
|
var d = date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds() + "\n"
|
|
console.log(d)
|
|
var p = '/mnt/archive/ren/kink_archiv/alive.txt'
|
|
fs.writeFileSync(p, d, { mode: 0o755 });
|
|
// fs.unlinkSync(p);
|
|
p = '/mnt/backup/ren/alive.txt'
|
|
fs.writeFileSync(p, d, { mode: 0o755 });
|
|
// fs.unlinkSync(p);
|
|
p = '/mnt/work/ren/exotic/alive.txt'
|
|
fs.writeFileSync(p, d, { mode: 0o755 });
|
|
// fs.unlinkSync(p);
|
|
res.send("ok")
|
|
})
|
|
|
|
app.get('/ffmpeg', function (req, res) {
|
|
var p = req.query.url
|
|
var n = "/srv/samba/ren/webdl" + req.query.name + ".mp4"
|
|
|
|
var cmd = 'ffmpeg -i "'+p+'" -codec copy "'+n+'"'
|
|
console.log(cmd)
|
|
exec(cmd, (err, stdout, stderr) => {
|
|
if (err) {
|
|
console.log(err)
|
|
// node couldn't execute the command
|
|
return;
|
|
}
|
|
|
|
// the *entire* stdout and stderr (buffered)
|
|
console.log(`stdout: ${stdout}`);
|
|
console.log(`stderr: ${stderr}`);
|
|
});
|
|
res.send(p)
|
|
})
|
|
|
|
app.get('/wgetcount', function (req, res) {
|
|
var cmd = 'ps -fA | grep wget | wc -l'
|
|
console.log(cmd)
|
|
|
|
const execSync = require('child_process').execSync;
|
|
var code = execSync(cmd);
|
|
|
|
res.end(code)
|
|
})
|
|
|
|
app.get('/killffmpeg', function (req, res) {
|
|
var cmd = 'kill `pidof ffmpeg`'
|
|
console.log(cmd)
|
|
|
|
const execSync = require('child_process').execSync;
|
|
exec(cmd, (err, stdout, stderr) => {
|
|
// the *entire* stdout and stderr (buffered)
|
|
console.log(`stdout: ${stdout}`);
|
|
console.log(`stderr: ${stderr}`);
|
|
|
|
if (err) {
|
|
console.log(err)
|
|
// node couldn't execute the command
|
|
return;
|
|
}
|
|
|
|
});
|
|
res.end(cmd)
|
|
})
|
|
|
|
app.get('/webdl1', function (req, res) {
|
|
var p = req.query.url
|
|
var n = "/srv/samba/ren/webdl/" + req.query.name
|
|
|
|
const lastSegment = n.split("/").pop();
|
|
|
|
console.log(lastSegment);
|
|
|
|
if (fs.existsSync(n)) {
|
|
res.send("exists")
|
|
return
|
|
}
|
|
|
|
if (fs.existsSync("/srv/samba/ren/work/facial2/"+lastSegment)) {
|
|
res.send("exists")
|
|
return
|
|
}
|
|
if (fs.existsSync("/srv/samba/ren/knk_archiv3/facial/"+lastSegment)) {
|
|
res.send("exists")
|
|
return
|
|
}
|
|
if (fs.existsSync("/srv/samba/ren/knk_archiv4/face/"+lastSegment)) {
|
|
res.send("exists")
|
|
return
|
|
}
|
|
if (fs.existsSync("/srv/samba/ren/knk_archiv4/sub/"+lastSegment)) {
|
|
res.send("exists")
|
|
return
|
|
}
|
|
if (fs.existsSync("/srv/samba/ren/knk_archiv4/sub2/"+lastSegment)) {
|
|
res.send("exists")
|
|
return
|
|
}
|
|
|
|
var cmd = 'wget -b -O "'+n+'" '
|
|
|
|
if (req.query.cookies) {
|
|
cmd = cmd + '--header="Cookie: ' + req.query.cookies + '" '
|
|
}
|
|
cmd = cmd + '"'+p+'"'
|
|
|
|
console.log(cmd)
|
|
exec(cmd, (err, stdout, stderr) => {
|
|
if (err) {
|
|
console.log(err)
|
|
// node couldn't execute the command
|
|
return;
|
|
}
|
|
|
|
// the *entire* stdout and stderr (buffered)
|
|
console.log(`stdout: ${stdout}`);
|
|
console.log(`stderr: ${stderr}`);
|
|
});
|
|
res.send(p)
|
|
})
|
|
|
|
app.get('/deleteThumb/*', function (req, res) {
|
|
if (req.path.startsWith("/deleteThumb/srv/samba/ren/thumb/")) {
|
|
var p = req.path.substr(12)
|
|
fs.unlinkSync(p)
|
|
console.log("removed " + p)
|
|
}
|
|
res.send("ok")
|
|
})
|
|
|
|
app.get('/black/*', function (req, res) {
|
|
if (req.path.startsWith("/black/srv/samba/ren/")) {
|
|
var p = req.path.substr(6)
|
|
|
|
fs.appendFileSync('/srv/samba/ren/black.txt', 'rm '+p+'\ntouch '+p+'.black\n');
|
|
}
|
|
res.send("ok")
|
|
})
|
|
|
|
app.get('/cut', function (req, res) {
|
|
var p = req.query.line
|
|
fs.appendFileSync('/srv/samba/ren/cut.txt', p+'\n');
|
|
|
|
res.send("ok")
|
|
})
|
|
|
|
app.get('/truncate', function (req, res) {
|
|
var p = req.query.line
|
|
var s = req.query.start
|
|
var n = p.replace(".mp4", ".orig.mp4")
|
|
|
|
var cmd = 'mv "'+p+'" "' + n + '"; ffmpeg -i "'+n+'" -ss ' + s + ' -codec copy -movflags faststart "'+p+'"'
|
|
console.log(cmd)
|
|
exec(cmd, (err, stdout, stderr) => {
|
|
if (err) {
|
|
console.log(err)
|
|
// node couldn't execute the command
|
|
return;
|
|
}
|
|
|
|
// the *entire* stdout and stderr (buffered)
|
|
console.log(`stdout: ${stdout}`);
|
|
console.log(`stderr: ${stderr}`);
|
|
});
|
|
res.send("ok")
|
|
})
|
|
|
|
//createDirectories(pathname) {}
|
|
|
|
app.post('/upload', upload.any() , (req, res, next) => {
|
|
// const file = req.file
|
|
|
|
var files = req.files;
|
|
var newPath = req.body.name
|
|
console.log(newPath)
|
|
if(files){
|
|
files.forEach(function(file){
|
|
//Move file to the deployment folder.
|
|
const __dirname = path.resolve();
|
|
var pathname = newPath.substring(0, newPath.lastIndexOf('/'))
|
|
console.log(pathname);
|
|
fs.mkdir(path.resolve(__dirname, pathname), { recursive: true }, e => {
|
|
if (e) {
|
|
console.error(e);
|
|
} else {
|
|
console.log(pathname);
|
|
}
|
|
});
|
|
|
|
// createDirectories(newPath)
|
|
fs.renameSync(file.path, newPath);
|
|
console.log(file.path);
|
|
});
|
|
}
|
|
res.send("ok")
|
|
})
|
|
|
|
var running = []
|
|
|
|
function countWget() {
|
|
var cmd = 'ps -fA | grep wget | wc -l'
|
|
console.log(cmd)
|
|
|
|
const execSync = require('child_process').execSync;
|
|
var code = execSync(cmd);
|
|
|
|
return parseInt("" + code) - 2
|
|
}
|
|
|
|
var downloadUrl = async function(job) {
|
|
console.log("download " + job.url)
|
|
await new Promise(resolve => setTimeout(resolve, 5000));
|
|
console.log("downloaded " + job.url)
|
|
}
|
|
|
|
function downloadWget(job) {
|
|
running.push(job)
|
|
|
|
var joburl = job.url
|
|
|
|
var cmd = 'wget -b -O "'+job.folder+'" '
|
|
cmd = cmd + '--header="Cookie: ' + job.cookie + '" '
|
|
cmd = cmd + '"'+joburl+'"'
|
|
|
|
console.log(cmd)
|
|
exec(cmd, (err, stdout, stderr) => {
|
|
running = running.filter(function(el) { return el.url != joburl; });
|
|
if (err) {
|
|
console.log(err)
|
|
// node couldn't execute the command
|
|
return;
|
|
}
|
|
|
|
// the *entire* stdout and stderr (buffered)
|
|
console.log(`stdout: ${stdout}`);
|
|
console.log(`stderr: ${stderr}`);
|
|
});
|
|
}
|
|
|
|
var q = [];
|
|
|
|
app.get('/webdl', function (req, res) {
|
|
var p = req.query.url
|
|
var n = "/srv/samba/ren/webdl/" + req.query.name
|
|
var c = req.query.cookies
|
|
|
|
if (fs.existsSync(n)) {
|
|
res.send("exists")
|
|
return
|
|
}
|
|
|
|
if (q.filter((i) => i.folder === n).length > 0) {
|
|
res.send("exists")
|
|
return
|
|
}
|
|
|
|
q.push({url: p, folder: n, cookie: c});
|
|
console.log("all urls pushed");
|
|
|
|
res.end("ok")
|
|
})
|
|
|
|
app.get('/queuelen', function (req, res) {
|
|
for (var job of running) {
|
|
res.write(job.url+"\n")
|
|
}
|
|
res.write("---\n")
|
|
for (var job of q) {
|
|
res.write(job.url+"\n")
|
|
}
|
|
res.end("Len " + q.length)
|
|
})
|
|
|
|
function mainloop() {
|
|
var cnt = countWget()
|
|
|
|
if (cnt < 2 && q.length > 0) {
|
|
var job = q.shift()
|
|
downloadWget(job)
|
|
}
|
|
|
|
setTimeout(function () {
|
|
// Do Something Here
|
|
// Then recall the parent function to
|
|
// create a recursive loop.
|
|
mainloop();
|
|
}, 1000);
|
|
}
|
|
|
|
mainloop()
|
|
|
|
var server = app.listen(8081, function () {
|
|
var host = server.address().address
|
|
var port = server.address().port
|
|
console.log("Server listening at http://%s:%s", host, port)
|
|
})
|