2020-03-15 23:40:38 +01:00
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' ) ) ) ;
2020-03-15 23:45:50 +01:00
try {
fs . mkdirSync ( _ _dirname + '/data' ) ;
} catch ( e ) {
}
2020-03-15 23:40:38 +01:00
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 (
2020-03-16 00:00:29 +01:00
"Une erreur a eu lieu !\n\nQuelque chose s'est mal passé pendant l'encodage de la video de " + email + " (" + id + ")\n\n" +
2020-03-15 23:40:38 +01:00
"STDOUT\n" + stdout + "\n\nSTDERR\n" + stderr
) ;
}
function failureHtml ( id , email , stdout , stderr ) {
return (
2020-03-16 00:00:29 +01:00
"<p>Une erreur a eu lieu !\n\nQuelque chose s'est mal passé pendant l'encodage de la video de " + email + " (" + id + ")</p><p>" +
2020-03-15 23:40:38 +01:00
"<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 ) {
2020-03-16 00:00:29 +01:00
res . status ( 400 ) . send ( stdout ) ;
2020-03-15 23:40:38 +01:00
} 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 ,
2020-03-16 00:00:29 +01:00
subject : "Une erreur s'est produite" ,
2020-03-15 23:40:38 +01:00
text : sorryText ( ) ,
html : sorryHtml ( ) ,
} )
transporter . sendMail ( {
from : '"Easy-Editing" <postmaster@tforgione.fr>' ,
to : fields . email ,
2020-03-16 00:00:29 +01:00
subject : "Une erreur s'est produite" ,
text : failureText ( id , fields . email , stdout , stderr ) ,
html : failureHtml ( id , fields . email , stdout , stderr ) ,
2020-03-15 23:40:38 +01:00
} )
} 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 } ! ` )
} ) ;