Added new modules to help prevent Cross Site Request Forgery
[sdnc/oam.git] / admportal / server / router / routes / sla.js
1 var express = require('express');
2 var router = express.Router();
3 var exec = require('child_process').exec;
4 //var util = require('util');
5 var fs = require('fs');
6 var dbRoutes = require('./dbRoutes');
7 var csp = require('./csp');
8 var multer = require('multer');
9 var cookieParser = require('cookie-parser');
10 var csrf = require('csurf');
11 var bodyParser = require('body-parser');
12 //var sax = require('sax'),strict=true,parser = sax.parser(strict);
13 var async = require('async');
14
15
16 // SVC_LOGIC table columns
17 var _module=''; // cannot use module its a reserved word
18 var version='';
19 var rpc='';
20 var mode='';
21 var xmlfile='';
22
23
24 // used for file upload button, retain original file name
25 //router.use(bodyParser());
26 var csrfProtection = csrf({cookie: true});
27 router.use(bodyParser.urlencoded({ extended: true }));
28 //var upload = multer({ dest: process.cwd() + '/uploads/', rename: function(fieldname,filename){ return filename; } });
29
30 // multer 1.1
31 var storage = multer.diskStorage({
32   destination: function (req, file, cb) {
33     cb(null, process.cwd() + '/uploads/')
34   },
35   filename: function (req, file, cb) {
36     cb(null, file.originalname )
37   }
38 });
39
40 var upload = multer({
41     storage: storage
42 });
43
44
45 /*
46 router.use(multer({
47         dest: process.cwd() + '/uploads/',
48         rename: function(fieldname,filename){
49                 return filename;
50         }
51 }));
52 */
53
54
55 //router.use(express.json());
56 //router.use(express.urlencoded());
57 //router.use(multer({ dest: './uploads/' }));
58
59
60 // GET
61 router.get('/listSLA', csp.checkAuth, csrfProtection, function(req,res) {
62         dbRoutes.listSLA(req,res,{code:'', msg:''} );
63 });
64
65 router.get('/activate', csp.checkAuth, csrfProtection, function(req,res){
66
67         var _module = req.query.module;
68         var rpc = req.query.rpc;
69         var version = req.query.version;
70         var mode = req.query.mode;
71
72         var tasks = [];
73     tasks.push( function(callback) { dbRoutes.global_deactivate(req,res,_module,rpc,mode,callback); } );
74     tasks.push( function(callback) { dbRoutes.activate(req,res,_module,rpc,version,mode,callback); } );
75         async.series(tasks,  function(err,result){
76
77                  if (  err ) {
78                          dbRoutes.listSLA(req,res,{code:'failure', msg:'Failed to activate, '+ String(err) });
79          }
80                  else {
81                          dbRoutes.listSLA(req,res,{ code:'success', msg:'Successfully activated directed graph.'});
82                  }
83         });
84 });
85
86 router.get('/deactivate', csp.checkAuth, csrfProtection, function(req,res){
87
88         var _module = req.query.module;
89         var rpc = req.query.rpc;
90         var version = req.query.version;
91         var mode = req.query.mode;
92
93         var tasks = [];
94     tasks.push( function(callback) { dbRoutes.deactivate(req,res,_module,rpc,version,mode,callback); } );
95     async.series(tasks,  function(err,result){
96
97          if (  err ) {
98              dbRoutes.listSLA(req,res,{code:'failure', msg:'There was an error uploading the file. '+ err });
99          }
100          else {
101              dbRoutes.listSLA(req,res,{ code:'success', msg:'Successfully deactivated directed graph.'});
102          }
103     });
104 });
105
106 router.get('/deleteDG', csp.checkAuth, csrfProtection, function(req,res){
107
108         var _module = req.query.module;
109         var rpc = req.query.rpc;
110         var version = req.query.version;
111         var mode = req.query.mode;
112
113         var tasks = [];
114     tasks.push( function(callback) { dbRoutes.deleteDG(req,res,_module,rpc,version,mode,callback); } );
115     async.series(tasks,  function(err,result){
116
117          if (  err ) {
118              dbRoutes.listSLA(req,res,{ code:'failure', msg:'There was an error uploading the file. '+ err });
119          }
120          else {
121              dbRoutes.listSLA(req,res,{ code:'success', msg:'Successfully deleted directed graph.'});
122          }
123     });
124 });
125
126 router.post('/dgUpload', upload.single('filename'), csrfProtection, function(req, res, next){
127
128     if(req.file.originalname){
129         if (req.file.originalname == 0) {
130                         
131             dbRoutes.listSLA(req,res,{ code:'danger', msg:'There was an error uploading the file, please try again.'});
132         }
133         fs.exists(req.file.path, function(exists) {
134             if(exists) {
135
136                 // parse xml
137                 try {
138                                         //dbRoutes.checkSvcLogic(req,res);
139
140                     var file_buf = fs.readFileSync(req.file.path, "utf8");
141
142                     // call Dan's svclogic shell script from here
143                                          var currentDB = dbRoutes.getCurrentDB();
144                      var commandToExec = process.cwd()
145                         + "/shell/svclogic.sh load "
146                         + req.file.path + " "
147                         + process.env.SDNC_CONFIG_DIR + "/svclogic.properties." + currentDB;
148
149                     console.log("commandToExec:" + commandToExec);
150                     child = exec(commandToExec ,function (error,stdout,stderr){
151                         if(error){
152                             console.error("error:" + error);
153                                                         //res.type('text/html').status(400).send( error);
154                                                         //return;
155                         }
156                         if(stderr){
157                                                         res.status(400).send(stderr);
158                                                         return;
159                         }
160                         if(stdout){
161                                                         res.status(200).send( new Buffer('Success'));
162                                                         return;
163                         }
164
165                         // remove the grave accents, the sax parser does not like them
166                         //parser.write(file_buf.replace(/\`/g,'').toString('utf8')).close();
167                         //dbRoutes.addDG(_module,version,rpc,mode,file_buf,req,res);
168                         //dbRoutes.listSLA(req,res, resultObj);
169                     });
170                 } catch(ex) {
171                     // keep 'em silent
172                     console.error('sax error:'+ex);
173                                         res.status(400).send(ex);
174                                         return;
175                 }
176
177             } else {
178                                 res.status(400).send(new Buffer('Cannot find file.'));
179                                 return;
180                         
181             }
182         });
183     }
184     else {
185                 res.status(400).send(new Buffer('file does not exist\n'));
186     }
187         return;
188 });
189
190
191 // POST
192 router.post('/upload', csp.checkAuth, upload.single('filename'), csrfProtection, function(req, res, next){
193
194 console.log('file:'+ JSON.stringify(req.file));
195
196         if(req.file.originalname)
197         {
198                 if (req.file.originalname.size == 0)
199                 {
200                         dbRoutes.listSLA(req,res,
201                         { code:'danger', msg:'There was an error uploading the file, please try again.'});
202                 }
203                 fs.exists(req.file.path, function(exists)
204                 {
205                         if(exists)
206                         {
207                                 // parse xml
208                                 try 
209                                 {
210                                         //dbRoutes.checkSvcLogic(req,res);
211
212                                         var currentDB = dbRoutes.getCurrentDB();
213                                         var file_buf = fs.readFileSync(req.file.path, "utf8");
214
215                                         // call svclogic shell script from here
216                                         var commandToExec = process.cwd() + "/shell/svclogic.sh load "
217                                                 + req.file.path + " "
218             + process.env.SDNC_CONFIG_DIR + "/svclogic.properties." + currentDB;
219
220                                         console.log("commandToExec:" + commandToExec);
221                                         child = exec(commandToExec ,function (error,stdout,stderr)
222                                         {
223                                                 if(error)
224                                                 {
225                                                         console.error("error:" + error);
226                                                         dbRoutes.listSLA(req,res,{code:'failure',msg:error} );
227                                                         return;
228                                                 }
229                                                 if(stderr){
230                                                         console.error("stderr:" + JSON.stringify(stderr,null,2));
231                                                         var s_stderr = JSON.stringify(stderr);
232                 if ( s_stderr.indexOf("Saving") > -1 )
233                 {
234                 dbRoutes.listSLA(req,res,{code:'success', msg:'File sucessfully uploaded.'});
235                 }else {
236                 dbRoutes.listSLA(req,res,{code:'failure', msg:stderr});
237                 }
238                 return;
239                                                 }
240                 if(stdout){
241                                                         console.log("stderr:" + stdout);
242                                                         dbRoutes.listSLA(req,res,{code:'success', msg:'File sucessfully uploaded.'});
243                 return;
244                                                 }
245
246                                                 // remove the grave accents, the sax parser does not like them
247                                         //parser.write(file_buf.replace(/\`/g,'').toString('utf8')).close();
248                                                 //dbRoutes.addDG(_module,version,rpc,mode,file_buf,req,res);
249                                                 //dbRoutes.listSLA(req,res, resultObj);
250                                 });
251                         } catch(ex) {
252                                 // keep 'em silent
253                                 console.error("error:" + ex);
254                                 dbRoutes.listSLA(req,res,{code:'failure',msg:ex} );
255                         }
256                 }
257                 else {
258                         dbRoutes.listSLA(req,res,{ code:'danger', msg:'There was an error uploading the file, please try again.'});
259                 }
260                 });
261         }
262         else {
263                 dbRoutes.listSLA(req,res,{ code:'danger', msg:'There was an error uploading the file, please try again.'});
264         }
265 });
266
267 router.get('/printAsXml', csp.checkAuth, csrfProtection, function(req,res){
268
269         try {
270                 //dbRoutes.checkSvcLogic(req,res);
271
272                 var _module = req.query.module;
273     var rpc = req.query.rpc;
274     var version = req.query.version;
275     var mode = req.query.mode;
276                 var currentDB = dbRoutes.getCurrentDB();
277
278     // call Dan's svclogic shell script from here
279     var commandToExec = process.cwd()
280                 + "/shell/svclogic.sh get-source "
281             + _module + " "
282             + rpc + " "
283             + mode + " "
284             + version + " "
285             + process.env.SDNC_CONFIG_DIR + "/svclogic.properties." + currentDB;
286
287                 console.log("commandToExec:" + commandToExec);
288
289     child = exec(commandToExec , {maxBuffer: 1024*5000}, function (error,stdout,stderr){
290                 if(error){
291                                 console.error("error:" + error);
292         dbRoutes.listSLA(req,res,{code:'failure',msg:error} );
293                                 return;
294         }
295         //if(stderr){
296         //logger.info("stderr:" + stderr);
297         //}
298         if(stdout){
299         console.log("OUTPUT:" + stdout);
300         res.render('sla/printasxml', {result:{code:'success', 
301                                 msg:'Module : ' + _module + '\n' + 
302                                                 'RPC    : ' + rpc + '\n' + 
303                                                 'Mode   : ' + mode + '\n' +
304                                                 'Version: ' + version + '\n\n' + stdout}, header:process.env.MAIN_MENU});
305                 }
306
307                 // remove the grave accents, the sax parser does not like them
308                 //parser.write(file_buf.replace(/\`/g,'').toString('utf8')).close();
309                 //dbRoutes.addDG(_module,version,rpc,mode,file_buf,req,res);
310                 //dbRoutes.listSLA(req,res, resultObj);
311    });
312  } catch(ex) {
313                 console.error("error:" + ex);
314                 dbRoutes.listSLA(req,res,{code:'failure',msg:ex} );
315  }
316 });
317
318
319 module.exports = router;