var parameters = require('./helpers/parameters'); var exec = require('child_process').exec, child; var path = require('path'); var http = require('http'); var url = require('url'); var fs = require('fs'); var querystring = require('querystring'); var express = require('express'); var host = '0.0.0.0'; var port = 5000; var app = express(); var ID_FROM_BD = 1; var SERVER_IP = '150.165.204.30'; app.use(express.static(path.join(__dirname, '/videos'))); app.use(express.bodyParser({ keepExtensions: true, uploadDir: path.join(__dirname, '/uploads') })); app.get('/', function(req, res){ res.send(200, { 'status': 'server is running!' } ); }); app.post('/api', function(req, res){ /* Verifica se o paramêtro [servico] possui algum valor */ if (req.body.servico !== '') { /* Verifica qual é o Tipo de Serviço fornecido */ switch(req.body.servico) { /* Case para o Tipo de Serviço: Texto */ case 'texto': /* Verifica se os paramêtros [transparencia, texto] possuem algum valor */ if ((req.query.transparencia !== '') && (req.query.texto !== '')) { /* Verifica se o paramêtro [transparencia] possui os únicos valores possíveis [opaco, transparente] */ if (parameters.checkTransparency(req.query.transparencia)) { /* Cria a linha de comando */ var command_line = 'echo ' + req.query.texto + ' >> ' + __dirname + '/text_files/' + ID_FROM_BD + ' && cd ../vlibras-core' + ' && ./vlibras ' + parameters.getServiceType(req.query.servico) + ' ../vlibras-api/text_files/' + ID_FROM_BD + ' ' + parameters.getTransparency(req.query.transparencia) + ' ' + ID_FROM_BD + ' WEB'; /* Executa a linha de comando */ child = exec(command_line, function(err, stdout, stderr) { // [stdout] = vlibras-core output // console.log(stdout); }); /* Listener que dispara quando a requisição ao core finaliza */ child.on('close', function(code, signal){ res.send(200, { 'response' : 'http://' + SERVER_IP + ':' + port + '/' + ID_FROM_BD + '.webm' }); ID_FROM_BD++; }); /* Listener que dispara quando a requisição ao core da erro */ child.on('error', function(code, signal){ res.send(500, parameters.errorMessage('Erro na chamada ao core')); }); } else { res.send(500, parameters.errorMessage('Parâmetros insuficientes ou inválidos')); } } else { res.send(500, parameters.errorMessage('O valor de algum parâmetro está vazio')); } break; /* Case para o Tipo de Serviço: iOS */ case 'ios': /* Verifica se os paramêtros [transparencia, texto] possuem algum valor */ if ((req.query.transparencia !== '') && (req.query.texto !== '')) { /* Verifica se o paramêtro [transparencia] possui os únicos valores possíveis [opaco, transparente] */ if (parameters.checkTransparency(req.query.transparencia)) { /* Cria a linha de comando */ var command_line = 'echo ' + req.query.texto + ' >> ' + __dirname + '/text_files/' + ID_FROM_BD + ' && cd ../vlibras-core' + ' && ./vlibras ' + parameters.getServiceType(req.query.servico) + ' ../vlibras-api/text_files/' + ID_FROM_BD + ' ' + parameters.getTransparency(req.query.transparencia) + ' ' + ID_FROM_BD + ' IOS'; /* Executa a linha de comando */ child = exec(command_line, function(err, stdout, stderr) { // [stdout] = vlibras-core output // console.log(stdout); }); /* Listener que dispara quando a requisição ao core finaliza */ child.on('close', function(code, signal){ res.send(200, { 'response' : 'http://' + SERVER_IP + ':' + port + '/' + ID_FROM_BD + '.avi' }); ID_FROM_BD++; }); /* Listener que dispara quando a requisição ao core da erro */ child.on('error', function(code, signal){ res.send(500, parameters.errorMessage('Erro na chamada ao core')); }); } else { res.send(500, parameters.errorMessage('Parâmetros insuficientes ou inválidos')); } } else { res.send(500, parameters.errorMessage('O valor de algum parâmetro está vazio')); } break; case 'video': console.log(req.body); /* Verifica se os paramêtros [posicao, tamanho, transparencia] possuem algum valor */ if ((req.body.posicao !== '') && (req.body.tamanho !== '') && (req.body.transparencia !== '')) { /* Verifica se os paramêtros [linguagem, posicao, tamanho, transparencia] possuem os seus únicos valores possíveis */ if ((parameters.checkPosition(req.body.posicao) === true) && (parameters.checkSize(req.body.tamanho) === true) && (parameters.checkTransparency(req.body.transparencia) === true)) { /* Checa se o arquivo de vídeo submetivo possui uma extensão válida */ if (parameters.checkVideo(req.files.video.name)) { /* Cria uma pasta cujo o nome é o ID */ child = exec('mkdir ' + __dirname + '/uploads/' + ID_FROM_BD); /* Listener que dispara quando a pasta é criada */ child.on('close', function(code, signal){ /* Move o vídeo submetido para a pasta com o seu ID correspondente */ fs.rename(req.files.video.path, __dirname + '/uploads/' + ID_FROM_BD + '/' + req.files.video.name, function(error) { if (error) { console.log(error); } }); /* Cria a linha de comando */ var command_line = 'vlibras_user/vlibras-core/./vlibras ' + parameters.getServiceType(req.body.servico) + ' uploads/' + ID_FROM_BD + '/' + req.files.video.name + ' 1 ' + parameters.getPosition(req.body.posicao) + ' ' + parameters.getSize(req.body.tamanho) + ' ' + parameters.getTransparency(req.body.transparencia) + ' ' + ID_FROM_BD; /* Executa a linha de comando */ child = exec(command_line, function(err, stdout, stderr) { // [stdout] = vlibras-core output // console.log(stdout); }); if (req.body.callback === undefined) { /* Listener que dispara quando a requisição ao core finaliza */ child.on('close', function(code, signal){ res.send(200, { 'response' : 'http://' + SERVER_IP + ':' + port + '/' + ID_FROM_BD + '.flv' }); ID_FROM_BD++; }); /* Listener que dispara quando a requisição ao core da erro */ child.on('error', function(code, signal){ res.send(500, parameters.errorMessage('Erro na chamada ao core')); }); } else { var path = url.parse(req.body.callback); var data = querystring.stringify({ 'response' : 'http://' + SERVER_IP + ':' + port + '/' + ID_FROM_BD + '.flv' }); var options = { host: path.hostname, port: path.port, path: path.path, method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(data) } }; var requesting = http.request(options, function(res) { res.setEncoding('utf8'); }); requesting.write(data); requesting.end(); /* Listener que dispara quando a requisição ao core da erro */ child.on('error', function(code, signal){ var data = querystring.stringify(parameters.errorMessage('Erro na chamada ao core')); var options = { host: path.hostname, port: path.port, path: path.path, method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(data) } }; var requesting = http.request(options, function(res) { res.setEncoding('utf8'); }); requesting.write(data); requesting.end(); }); } }); } else { res.send(500, parameters.errorMessage('Vídeo com Extensão Inválida')); } } else { res.send(500, parameters.errorMessage('Parâmetros insuficientes ou inválidos')); } } else { res.send(500, parameters.errorMessage('O valor de algum parâmetro está vazio')); } break; case 'legenda': /* Verifica se o paramêtro [transparencia] possue algum valor */ if (req.query.transparencia !== '') { /* Verifica se os paramêtros [transparencia] possuem os seus únicos valores possíveis */ if ((parameters.checkTransparency(req.query.transparencia) === true)) { /* Checa se o arquivo de legenda submetivo possui uma extensão válida */ if (parameters.checkSubtitle(req.files.legenda.name)) { /* Cria uma pasta cujo o nome é o ID */ child = exec('mkdir ' + __dirname + '/uploads/' + ID_FROM_BD); /* Listener que dispara quando a pasta é criada */ child.on('close', function(code, signal){ /* Move a legenda submetido para a pasta com o seu ID correspondente */ fs.rename(req.files.legenda.path, __dirname + '/uploads/' + ID_FROM_BD + '/' + req.files.legenda.name, function(error) { if (error) { console.log(error); } }); /* Cria a linha de comando */ var command_line = 'vlibras_user/vlibras-core/./vlibras ' + parameters.getServiceType(req.query.servico) + ' uploads/' + ID_FROM_BD + '/' + req.files.legenda.name + ' ' + parameters.getTransparency(req.query.transparencia) + ' ' + ID_FROM_BD; /* Executa a linha de comando */ child = exec(command_line, function(err, stdout, stderr) { // [stdout] = vlibras-core output // console.log(stdout); }); /* Listener que dispara quando a requisição ao core finaliza */ child.on('close', function(code, signal){ res.send(200, { 'response' : 'http://' + SERVER_IP + ':' + port + '/' + ID_FROM_BD + '.flv' }); ID_FROM_BD++; }); /* Listener que dispara quando a requisição ao core da erro */ child.on('error', function(code, signal){ res.send(500, parameters.errorMessage('Erro na chamada ao core')); }); }); } else { res.send(500, parameters.errorMessage('Legenda com Extensão Inválida')); } } else { res.send(500, parameters.errorMessage('Parâmetros insuficientes ou inválidos')); } } else { res.send(500, parameters.errorMessage('O valor de algum parâmetro está vazio')); } break; case 'video-legenda': /* Verifica se os paramêtros [transparencia, texto] possuem algum valor */ if ((req.body.linguagem !== '') && (req.body.posicao !== '') && (req.body.tamanho !== '') && (req.body.transparencia !== '')) { /* Verifica se os paramêtros [linguagem, posicao, tamanho, transparencia] possuem os seus únicos valores possíveis */ if ((parameters.checkLanguage(req.body.linguagem) === true) && (parameters.checkPosition(req.body.posicao) === true) && (parameters.checkSize(req.body.tamanho) === true) && (parameters.checkTransparency(req.body.transparencia) === true)) { /* Checa se o arquivo de vídeo submetivo possui uma extensão válida */ if (parameters.checkVideo(req.files.video.name)) { /* Checa se o arquivo de legenda submetivo possui uma extensão válida */ if (parameters.checkSubtitle(req.files.legenda.name)) { /* Cria uma pasta cujo o nome é o ID */ child = exec('mkdir ' + __dirname + '/uploads/' + ID_FROM_BD); /* Listener que dispara quando a pasta é criada */ child.on('close', function(code, signal){ /* Move o vídeo submetido para a pasta com o seu ID correspondente */ fs.rename(req.files.video.path, __dirname + '/uploads/' + ID_FROM_BD + '/' + req.files.video.name, function(error) { if (error) { console.log(error); } }); /* Move a legenda submetido para a pasta com o seu ID correspondente */ fs.rename(req.files.legenda.path, __dirname + '/uploads/' + ID_FROM_BD + '/' + req.files.legenda.name, function(error) { if (error) { console.log(error); } }); /* Cria a linha de comando */ var command_line = 'vlibras_user/vlibras-core/./vlibras ' + parameters.getServiceType(req.body.servico) + ' uploads/' + ID_FROM_BD + '/' + req.files.video.name + ' uploads/' + ID_FROM_BD + '/' + req.files.legenda.name + ' ' + parameters.getLanguage(req.body.linguagem) + ' ' + parameters.getPosition(req.body.posicao) + ' ' + parameters.getSize(req.body.tamanho) + ' ' + parameters.getTransparency(req.body.transparencia) + ' ' + ID_FROM_BD; /* Executa a linha de comando */ child = exec(command_line, function(err, stdout, stderr) { // [stdout] = vlibras-core output }); if (req.body.callback === undefined) { /* Listener que dispara quando a requisição ao core finaliza */ child.on('close', function(code, signal){ res.send(200, { 'response' : 'http://' + SERVER_IP + ':' + port + '/' + ID_FROM_BD + '.flv' }); ID_FROM_BD++; }); } else { var path = url.parse(req.body.callback); var data = querystring.stringify({ 'response' : 'http://' + SERVER_IP + ':' + port + '/' + ID_FROM_BD + '.flv' }); var options = { host: path.hostname, port: path.port, path: path.path, method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(data) } }; var requesting = http.request(options, function(res) { res.setEncoding('utf8'); res.on('data', function (chunk) { console.log("body: " + chunk); }); }); requesting.write(data); requesting.end(); } /* Listener que dispara quando a requisição ao core da erro */ child.on('error', function(code, signal){ var data = querystring.stringify(parameters.errorMessage('Erro na chamada ao core')); var options = { host: path.hostname, port: path.port, path: path.path, method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Content-Length': Buffer.byteLength(data) } }; var requesting = http.request(options, function(res) { res.setEncoding('utf8'); }); requesting.write(data); requesting.end(); }); }); } else { res.send(500, parameters.errorMessage('Legenda com Extensão Inválida')); } } else { res.send(500, parameters.errorMessage('Vídeo com Extensão Inválida')); } } else { res.send(500, parameters.errorMessage('Parâmetros insuficientes ou inválidos')); } } else { res.send(500, parameters.errorMessage('O valor de algum parâmetro está vazio')); } break; /* Case para um Tipo de Serviço inválido */ default: res.send(500, parameters.errorMessage('Tipo do serviço inválido')); break; } } else { res.send(500, parameters.errorMessage('Especifique o tipo do serviço')); } }); app.listen(port, host, function(){ console.log('Server running on ' + host + ':' + port); });