easy-editing/index.js

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}!`)
});