151 lines
4.9 KiB
JavaScript
151 lines
4.9 KiB
JavaScript
const fs = require('fs');
|
|
const uuid = require('uuid').v4;
|
|
const { exec } = require('child_process');
|
|
const express = require('express');
|
|
const bodyParser = require('body-parser');
|
|
const formidable = require('formidable');
|
|
const nodemailer = require("nodemailer");
|
|
|
|
const app = express();
|
|
const port = 3000;
|
|
|
|
const transporter = nodemailer.createTransport(JSON.parse(fs.readFileSync(__dirname + '/auth.json', 'utf-8')));
|
|
|
|
try {
|
|
fs.mkdirSync(__dirname + '/data');
|
|
} catch (e) {
|
|
|
|
}
|
|
|
|
const root = "https://easy-editing.tforgione.fr/";
|
|
|
|
function responseText(id) {
|
|
return "Votre video est prête!\n\nVous pouvez télécharger votre video à l'adresse " + root + 'video/' + id;
|
|
}
|
|
|
|
function responseHtml(id) {
|
|
return "<h1>Votre video est prête</h1><p><a href=\"" + root + "video/" + id + "\">Cliquez ici pour télécharger votre video</a></p>";
|
|
}
|
|
|
|
function sorryText() {
|
|
return "Nous sommes désolés!\n\nUne erreur s'est produite pendant l'encodage de la vidéo. L'administrateur a été contacté et reviendra vers vous.";
|
|
}
|
|
|
|
function sorryHtml() {
|
|
return "<h3>Nous sommes désolés!</h3><p>Une erreur s'est produite pendant l'encodage de la vidéo. L'administrateur a été contacté et reviendra vers vous.</p>";
|
|
}
|
|
|
|
function failureText(id, email, stdout, stderr) {
|
|
return (
|
|
"Une erreur a eu lieu !\n\nQuelque chose s'est mal passé pendant l'encodage de la video de " + email + " (" + id + ")\n\n" +
|
|
"STDOUT\n" + stdout + "\n\nSTDERR\n" + stderr
|
|
);
|
|
}
|
|
|
|
function failureHtml(id, email, stdout, stderr) {
|
|
return (
|
|
"<p>Une erreur a eu lieu !\n\nQuelque chose s'est mal passé pendant l'encodage de la video de " + email + " (" + id + ")</p><p>" +
|
|
"<h3>STDOUT</h3><pre><code>" + stdout + "</code></pre><h3>STDERR</h3><pre><code>" + stderr + "</code></pre></p>"
|
|
);
|
|
}
|
|
|
|
app.use(bodyParser.urlencoded({ extended: false }));
|
|
|
|
app.use((req, res, next) => {
|
|
console.log("Received request");
|
|
next();
|
|
});
|
|
|
|
|
|
app.get('/', (req, res) => {
|
|
res.sendFile(__dirname + '/html/index.html');
|
|
});
|
|
|
|
app.get('/video/:id', (req, res) => {
|
|
fs.stat(__dirname + '/data/' + req.params.id + '/final.mp4', (err, stats) => {
|
|
if (err) {
|
|
res.send("Nope");
|
|
} else {
|
|
res.download(__dirname + '/data/' + req.params.id + '/final.mp4');
|
|
}
|
|
});
|
|
});
|
|
|
|
app.post('/easy-edit', async (req, res, next) => {
|
|
const form = formidable({ multiples: true });
|
|
|
|
form.parse(req, async (err, fields, files) => {
|
|
if (err) {
|
|
console.log(err);
|
|
next(err);
|
|
return;
|
|
}
|
|
|
|
let id = uuid();
|
|
fs.mkdir(__dirname + '/data/' + id, () => {
|
|
exec('unzip ' + files.archive.path + ' -d ' + __dirname + '/data/' + id, (err, stdout, stderr) => {
|
|
|
|
if (err) {
|
|
next(err);
|
|
return;
|
|
}
|
|
|
|
exec(__dirname + '/test-merge', {cwd: __dirname + '/data/' + id}, (err, stdout, stderr) => {
|
|
|
|
if (err) {
|
|
|
|
res.status(400).send(stdout);
|
|
|
|
} else {
|
|
|
|
res.send("");
|
|
|
|
exec(__dirname + '/merge', {cwd: __dirname + '/data/' + id}, (err, stdout, stderr) => {
|
|
|
|
if (err) {
|
|
|
|
transporter.sendMail({
|
|
from: '"Easy-Editing" <postmaster@tforgione.fr>',
|
|
to: fields.email,
|
|
subject: "Une erreur s'est produite",
|
|
text: sorryText(),
|
|
html: sorryHtml(),
|
|
})
|
|
|
|
transporter.sendMail({
|
|
from: '"Easy-Editing" <postmaster@tforgione.fr>',
|
|
to: fields.email,
|
|
subject: "Une erreur s'est produite",
|
|
text: failureText(id, fields.email, stdout, stderr),
|
|
html: failureHtml(id, fields.email, stdout, stderr),
|
|
})
|
|
|
|
} else {
|
|
|
|
transporter.sendMail({
|
|
from: '"Easy-Editing" <postmaster@tforgione.fr>',
|
|
to: fields.email,
|
|
subject: "Votre video est prête",
|
|
text: responseText(id),
|
|
html: responseHtml(id),
|
|
})
|
|
}
|
|
});
|
|
}
|
|
});
|
|
});
|
|
});
|
|
});
|
|
});
|
|
|
|
app.use('/static', express.static('static'));
|
|
|
|
app.use((req, res) => {
|
|
res.send('oops');
|
|
});
|
|
|
|
app.listen(port, '0.0.0.0', () => {
|
|
console.log(`Example app listening on port ${port}!`)
|
|
});
|
|
|