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 "

Votre video est prête

Cliquez ici pour télécharger votre video

"; } 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 "

Nous sommes désolés!

Une erreur s'est produite pendant l'encodage de la vidéo. L'administrateur a été contacté et reviendra vers vous.

"; } 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 ( "

Une erreur a eu lieu !\n\nQuelque chose s'est mal passé pendant l'encodage de la video de " + email + " (" + id + ")

" + "

STDOUT

" + stdout + "

STDERR

" + stderr + "

" ); } 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" ', to: fields.email, subject: "Une erreur s'est produite", text: sorryText(), html: sorryHtml(), }) transporter.sendMail({ from: '"Easy-Editing" ', 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" ', 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}!`) });