blob: 098cd66bf056f1b5a202a770f55c835ac1f657bb [file] [log] [blame]
var express = require('express');
var router = express.Router();
var exec = require('child_process').exec;
//var util = require('util');
var fs = require('fs');
var dbRoutes = require('./dbRoutes');
var csp = require('./csp');
var multer = require('multer');
var cookieParser = require('cookie-parser');
var csrf = require('csurf');
var bodyParser = require('body-parser');
//var sax = require('sax'),strict=true,parser = sax.parser(strict);
var async = require('async');
// SVC_LOGIC table columns
var _module=''; // cannot use module its a reserved word
var version='';
var rpc='';
var mode='';
var xmlfile='';
// used for file upload button, retain original file name
//router.use(bodyParser());
var csrfProtection = csrf({cookie: true});
router.use(bodyParser.urlencoded({ extended: true }));
//var upload = multer({ dest: process.cwd() + '/uploads/', rename: function(fieldname,filename){ return filename; } });
// multer 1.1
var storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, process.cwd() + '/uploads/')
},
filename: function (req, file, cb) {
cb(null, file.originalname )
}
});
var upload = multer({
storage: storage
});
/*
router.use(multer({
dest: process.cwd() + '/uploads/',
rename: function(fieldname,filename){
return filename;
}
}));
*/
//router.use(express.json());
//router.use(express.urlencoded());
//router.use(multer({ dest: './uploads/' }));
// GET
router.get('/listSLA', csp.checkAuth, csrfProtection, function(req,res) {
dbRoutes.listSLA(req,res,{code:'', msg:''} );
});
router.get('/activate', csp.checkAuth, csrfProtection, function(req,res){
var _module = req.query.module;
var rpc = req.query.rpc;
var version = req.query.version;
var mode = req.query.mode;
var tasks = [];
tasks.push( function(callback) { dbRoutes.global_deactivate(req,res,_module,rpc,mode,callback); } );
tasks.push( function(callback) { dbRoutes.activate(req,res,_module,rpc,version,mode,callback); } );
async.series(tasks, function(err,result){
if ( err ) {
dbRoutes.listSLA(req,res,{code:'failure', msg:'Failed to activate, '+ String(err) });
}
else {
dbRoutes.listSLA(req,res,{ code:'success', msg:'Successfully activated directed graph.'});
}
});
});
router.get('/deactivate', csp.checkAuth, csrfProtection, function(req,res){
var _module = req.query.module;
var rpc = req.query.rpc;
var version = req.query.version;
var mode = req.query.mode;
var tasks = [];
tasks.push( function(callback) { dbRoutes.deactivate(req,res,_module,rpc,version,mode,callback); } );
async.series(tasks, function(err,result){
if ( err ) {
dbRoutes.listSLA(req,res,{code:'failure', msg:'There was an error uploading the file. '+ err });
}
else {
dbRoutes.listSLA(req,res,{ code:'success', msg:'Successfully deactivated directed graph.'});
}
});
});
router.get('/deleteDG', csp.checkAuth, csrfProtection, function(req,res){
var _module = req.query.module;
var rpc = req.query.rpc;
var version = req.query.version;
var mode = req.query.mode;
var tasks = [];
tasks.push( function(callback) { dbRoutes.deleteDG(req,res,_module,rpc,version,mode,callback); } );
async.series(tasks, function(err,result){
if ( err ) {
dbRoutes.listSLA(req,res,{ code:'failure', msg:'There was an error uploading the file. '+ err });
}
else {
dbRoutes.listSLA(req,res,{ code:'success', msg:'Successfully deleted directed graph.'});
}
});
});
router.post('/dgUpload', upload.single('filename'), csrfProtection, function(req, res, next){
if(req.file.originalname){
if (req.file.originalname == 0) {
dbRoutes.listSLA(req,res,{ code:'danger', msg:'There was an error uploading the file, please try again.'});
}
fs.exists(req.file.path, function(exists) {
if(exists) {
// parse xml
try {
//dbRoutes.checkSvcLogic(req,res);
var file_buf = fs.readFileSync(req.file.path, "utf8");
// call Dan's svclogic shell script from here
var currentDB = dbRoutes.getCurrentDB();
var commandToExec = process.cwd()
+ "/shell/svclogic.sh load "
+ req.file.path + " "
+ process.env.SDNC_CONFIG_DIR + "/svclogic.properties." + currentDB;
console.log("commandToExec:" + commandToExec);
child = exec(commandToExec ,function (error,stdout,stderr){
if(error){
console.error("error:" + error);
//res.type('text/html').status(400).send( error);
//return;
}
if(stderr){
res.status(400).send(stderr);
return;
}
if(stdout){
res.status(200).send( new Buffer('Success'));
return;
}
// remove the grave accents, the sax parser does not like them
//parser.write(file_buf.replace(/\`/g,'').toString('utf8')).close();
//dbRoutes.addDG(_module,version,rpc,mode,file_buf,req,res);
//dbRoutes.listSLA(req,res, resultObj);
});
} catch(ex) {
// keep 'em silent
console.error('sax error:'+ex);
res.status(400).send(ex);
return;
}
} else {
res.status(400).send(new Buffer('Cannot find file.'));
return;
}
});
}
else {
res.status(400).send(new Buffer('file does not exist\n'));
}
return;
});
// POST
router.post('/upload', csp.checkAuth, upload.single('filename'), csrfProtection, function(req, res, next){
console.log('file:'+ JSON.stringify(req.file));
if(req.file.originalname)
{
if (req.file.originalname.size == 0)
{
dbRoutes.listSLA(req,res,
{ code:'danger', msg:'There was an error uploading the file, please try again.'});
}
fs.exists(req.file.path, function(exists)
{
if(exists)
{
// parse xml
try
{
//dbRoutes.checkSvcLogic(req,res);
var currentDB = dbRoutes.getCurrentDB();
var file_buf = fs.readFileSync(req.file.path, "utf8");
// call svclogic shell script from here
var commandToExec = process.cwd() + "/shell/svclogic.sh load "
+ req.file.path + " "
+ process.env.SDNC_CONFIG_DIR + "/svclogic.properties." + currentDB;
console.log("commandToExec:" + commandToExec);
child = exec(commandToExec ,function (error,stdout,stderr)
{
if(error)
{
console.error("error:" + error);
dbRoutes.listSLA(req,res,{code:'failure',msg:error} );
return;
}
if(stderr){
console.error("stderr:" + JSON.stringify(stderr,null,2));
var s_stderr = JSON.stringify(stderr);
if ( s_stderr.indexOf("Saving") > -1 )
{
dbRoutes.listSLA(req,res,{code:'success', msg:'File sucessfully uploaded.'});
}else {
dbRoutes.listSLA(req,res,{code:'failure', msg:stderr});
}
return;
}
if(stdout){
console.log("stderr:" + stdout);
dbRoutes.listSLA(req,res,{code:'success', msg:'File sucessfully uploaded.'});
return;
}
// remove the grave accents, the sax parser does not like them
//parser.write(file_buf.replace(/\`/g,'').toString('utf8')).close();
//dbRoutes.addDG(_module,version,rpc,mode,file_buf,req,res);
//dbRoutes.listSLA(req,res, resultObj);
});
} catch(ex) {
// keep 'em silent
console.error("error:" + ex);
dbRoutes.listSLA(req,res,{code:'failure',msg:ex} );
}
}
else {
dbRoutes.listSLA(req,res,{ code:'danger', msg:'There was an error uploading the file, please try again.'});
}
});
}
else {
dbRoutes.listSLA(req,res,{ code:'danger', msg:'There was an error uploading the file, please try again.'});
}
});
router.get('/printAsXml', csp.checkAuth, csrfProtection, function(req,res){
try {
//dbRoutes.checkSvcLogic(req,res);
var _module = req.query.module;
var rpc = req.query.rpc;
var version = req.query.version;
var mode = req.query.mode;
var currentDB = dbRoutes.getCurrentDB();
// call Dan's svclogic shell script from here
var commandToExec = process.cwd()
+ "/shell/svclogic.sh get-source "
+ _module + " "
+ rpc + " "
+ mode + " "
+ version + " "
+ process.env.SDNC_CONFIG_DIR + "/svclogic.properties." + currentDB;
console.log("commandToExec:" + commandToExec);
child = exec(commandToExec , {maxBuffer: 1024*5000}, function (error,stdout,stderr){
if(error){
console.error("error:" + error);
dbRoutes.listSLA(req,res,{code:'failure',msg:error} );
return;
}
//if(stderr){
//logger.info("stderr:" + stderr);
//}
if(stdout){
console.log("OUTPUT:" + stdout);
res.render('sla/printasxml', {result:{code:'success',
msg:'Module : ' + _module + '\n' +
'RPC : ' + rpc + '\n' +
'Mode : ' + mode + '\n' +
'Version: ' + version + '\n\n' + stdout}, header:process.env.MAIN_MENU});
}
// remove the grave accents, the sax parser does not like them
//parser.write(file_buf.replace(/\`/g,'').toString('utf8')).close();
//dbRoutes.addDG(_module,version,rpc,mode,file_buf,req,res);
//dbRoutes.listSLA(req,res, resultObj);
});
} catch(ex) {
console.error("error:" + ex);
dbRoutes.listSLA(req,res,{code:'failure',msg:ex} );
}
});
module.exports = router;