Added new modules to help prevent Cross Site Request Forgery
[sdnc/oam.git] / admportal / server / router / routes / network.js
1 \r
2 // Helper functions for processing a NETWORK worksheet\r
3 \r
4 var helpers = require('./helpers.js');\r
5 var _ = require('lodash');\r
6 var csvtojson = require('csvtojson');\r
7 var async = require('async');\r
8 var uuid = require('node-uuid');   // generate a uuid with "uuid.v1()"\r
9 var path = require('path');\r
10 var fs = require("fs");\r
11 var moment = require("moment");\r
12 \r
13 var network = module.exports;\r
14 var getParam = helpers.getParam;\r
15 \r
16 var indir;\r
17 var csvGeneral, csvSubnets, csvVpnBindings, csvPolicies, csvNetRoutes;\r
18 var rawJson={}\r
19 var finalJson={};  \r
20 var platform;\r
21 var req,res;\r
22 var preloadVersion;  // 1607, 1610, etc...\r
23 var proc_error = false;\r
24 var filename;\r
25 \r
26 puts = helpers.puts;\r
27 putd = helpers.putd;\r
28 \r
29 network.go = function(lreq,lres,cb,dir) {\r
30   puts("Processing NETWORK workbook");\r
31         proc_error = false;\r
32   req = lreq;\r
33   res = lres;\r
34   callback = cb;\r
35   if (dir!="") {\r
36     platform="pc";\r
37     indir=dir;\r
38   } else {\r
39     platform="portal";\r
40     indir=process.cwd() + "/uploads/";\r
41   }\r
42   doGeneral();\r
43 }\r
44 \r
45 // READ WORKSHEET: GENERAL\r
46 \r
47 function doGeneral() {\r
48   puts("Reading General worksheet");\r
49   var csvFilename="General.csv";\r
50   var newFileName = helpers.getFileName(req, csvFilename);\r
51   if ( newFileName != null ) {\r
52     helpers.readCsv(indir, newFileName, gotGeneral);\r
53   }\r
54   else {\r
55     puts('general file is missing from upload.');\r
56                 proc_error=true;\r
57   }\r
58 }\r
59 \r
60 function gotGeneral(err, jsonObj) {\r
61   if (err) {\r
62     puts("\nError!");\r
63     putd(err);\r
64     proc_error=true;\r
65                 callback('General.csv file is missing from upload.');\r
66                 return;\r
67   }\r
68   csvGeneral = jsonObj;\r
69   puts("\nRead this: ");\r
70   putd(csvGeneral);\r
71   puts("\n");\r
72   doSubnets();\r
73 }\r
74 \r
75 // READ WORKSHEET: SUBNETS\r
76 \r
77 function doSubnets() {\r
78   puts("Reading Subnets worksheet");\r
79   var csvFilename="Subnets.csv";\r
80   var newFileName = helpers.getFileName(req, csvFilename);\r
81   if ( newFileName != null ) {\r
82     helpers.readCsv(indir, newFileName, gotSubnets);\r
83   }\r
84   else {\r
85                 puts('subnets file is missing from upload.');\r
86     proc_error=true;\r
87     callback(csvFilename + ' file is missing from upload.');\r
88                 return;\r
89   }\r
90 }\r
91 \r
92 function gotSubnets(err, jsonObj) {\r
93   if (err) {\r
94     puts("\nError!");\r
95     putd(err);\r
96                 proc_error=true;\r
97     callback('Subnets.csv file is missing from upload.');\r
98     return;\r
99   }\r
100   csvSubnets = jsonObj;\r
101   csvSubnets = _.reject(csvSubnets, 'field2', 'Subnets');\r
102   csvSubnets = _.reject(csvSubnets, 'field2', 'start-address');\r
103   csvSubnets = _.reject(csvSubnets, 'field2', '');\r
104   puts("\nRead this: ");\r
105   putd(csvSubnets);\r
106   puts("\n");\r
107   doVpnBindings();\r
108 }\r
109 \r
110 // READ WORKSHEET: VPN-BINDINGS\r
111 \r
112 function doVpnBindings() {\r
113   puts("Reading VPN-Bindings worksheet");\r
114   var csvFilename="VPN-Bindings.csv";\r
115   var newFileName = helpers.getFileName(req, csvFilename);\r
116   if ( newFileName != null ) {\r
117     helpers.readCsv(indir, newFileName, gotVpnBindings);\r
118   }\r
119   else {\r
120                 puts('vnp-bindings file is missing from upload.');\r
121     proc_error=true;\r
122     callback(csvFilename + ' file is missing from upload.');\r
123                 return;\r
124   }\r
125 }\r
126 \r
127 function gotVpnBindings(err, jsonObj) {\r
128   if (err) {\r
129     puts("\nError!");\r
130     putd(err);\r
131                 proc_error=true;\r
132     callback('VPN-Bindings.csv file is missing from upload.');\r
133     return;\r
134   }\r
135   csvVpnBindings = jsonObj;\r
136   csvVpnBindings = _.reject(csvVpnBindings, 'field2', 'VPN-Bindings');\r
137   csvVpnBindings = _.reject(csvVpnBindings, 'field2', 'vpn-binding-id');\r
138   csvVpnBindings = _.reject(csvVpnBindings, function(o) { return (_.trim(o.field2)=="") && (_.trim(o.field3)==""); } );\r
139   puts("\nRead this: ");\r
140   putd(csvVpnBindings);\r
141   puts("\n");\r
142   doPolicies();\r
143 }\r
144 \r
145 \r
146 // READ WORKSHEET: POLICIES\r
147 \r
148 function doPolicies() {\r
149   puts("Reading Policies worksheet");\r
150   var csvFilename="Policies.csv";\r
151   var newFileName = helpers.getFileName(req, csvFilename);\r
152   if ( newFileName != null ) {\r
153     helpers.readCsv(indir, newFileName, gotPolicies);\r
154   }\r
155   else {\r
156                 puts('policies file is missing from upload.');\r
157     proc_error=true;\r
158     callback(csvFilename + ' file is missing from upload.');\r
159                 return;\r
160   }\r
161 }\r
162 \r
163 function gotPolicies(err, jsonObj) {\r
164   if (err) {\r
165     puts("\nError!");\r
166     putd(err);\r
167                 proc_error=true;\r
168     callback('Policies.csv file is missing from upload.');\r
169     return;\r
170   }\r
171   csvPolicies = jsonObj;\r
172   csvPolicies = _.reject(csvPolicies, 'field2', 'Policies');\r
173   csvPolicies = _.reject(csvPolicies, 'field2', 'network-policy-fqdn');\r
174   csvPolicies = _.reject(csvPolicies, 'field2', '');\r
175   puts("\nRead this: ");\r
176   putd(csvPolicies);\r
177   puts("\n");\r
178   doNetRoutes();\r
179 }\r
180 \r
181 \r
182 // READ WORKSHEET: NETWORK-ROUTES\r
183 \r
184 function doNetRoutes() {\r
185   puts("Reading Network-Routes worksheet");\r
186   var csvFilename="Network-Routes.csv";\r
187   var newFileName = helpers.getFileName(req, csvFilename);\r
188   preloadVersion = getParam(csvGeneral, 'field2', 'preload-version', 'field3');\r
189   if ( preloadVersion == '1607' ) {\r
190     puts("This is a 1607 spreadsheet. Skipping Network-Routes.csv.");\r
191     gotNetRoutes(null,{});\r
192     return;\r
193   }\r
194   if ( newFileName != null ) {\r
195     helpers.readCsv(indir, newFileName, gotNetRoutes);\r
196   }\r
197   else {\r
198                 puts('network-routes file is missing from upload.');\r
199     proc_error=true;\r
200     callback(csvFilename + ' file is missing from upload.');\r
201                 return;\r
202   }\r
203 }\r
204 \r
205 function gotNetRoutes(err, jsonObj) {\r
206   if (err) {\r
207     puts("\nError!");\r
208     putd(err);\r
209                 proc_error=true;\r
210     callback('Network-Routes.csv file is missing from upload.');\r
211     return;\r
212   }\r
213   csvNetRoutes = jsonObj;\r
214   csvNetRoutes = _.reject(csvNetRoutes, 'field2', 'Network-Routes');\r
215   csvNetRoutes = _.reject(csvNetRoutes, 'field2', 'route-table-reference-fqdn');\r
216   csvNetRoutes = _.reject(csvNetRoutes, 'field2', '');\r
217   puts("\nRead this: ");\r
218   putd(csvNetRoutes);\r
219   puts("\n");\r
220   doneReadingFiles();\r
221 }\r
222 \r
223 \r
224 // DONE READING FILES\r
225 \r
226 function doneReadingFiles() {\r
227   puts("\n");\r
228   puts("DONE READING FILES!");\r
229   puts("\n");\r
230   processJson();\r
231 }\r
232 \r
233 \r
234 // PROCESS THE CSV FILES INTO OBJECTS TO BE ASSEMBLED INTO FINAL OUTPUT\r
235 function processJson() {\r
236   processGeneral();\r
237   processSubnets();\r
238   processVpnBindings();\r
239   processPolicies();\r
240   processNetRoutes();\r
241   assembleJson();\r
242         outputJson();\r
243 \r
244         puts('proc_error=');\r
245   putd(proc_error);\r
246   if ( proc_error ){\r
247     puts('callback with failure');\r
248     callback('Error was encountered processing upload.');\r
249     return;\r
250   }\r
251   else\r
252   {\r
253     puts('callback with success');\r
254         callback(null,  finalJson, filename);\r
255     return;\r
256         }\r
257 }\r
258 \r
259 // ASSEMBLE AND OUTPUT RESULTS\r
260 \r
261 function assembleJson() {\r
262   puts("\n");\r
263   puts("Using raw JSON and assembling final ouptut JSON.");\r
264   puts("\n");\r
265 \r
266   networkTopoID = { "network-name": rawJson['network-name'],\r
267                 "network-role": rawJson['network-role'],\r
268                 "network-type": rawJson['network-type'],\r
269                 "network-technology": rawJson['network-technology'] };\r
270 \r
271   providerInfo = { "physical-network-name": rawJson['physical-network-name'],\r
272                "is-provider-network": rawJson['is-provider-network'],\r
273                "is-shared-network": rawJson['is-shared-network'],\r
274                "is-external-network": rawJson['is-external-network'] };\r
275 \r
276   networkSubnets = rawJson['subnets'];\r
277 \r
278   networkVpnBindings = rawJson['vpn-bindings'];\r
279 \r
280   networkPolicies = rawJson['network-policy-fqdns'];\r
281 \r
282   networkRoutes = rawJson['route-table-reference'];\r
283 \r
284   networkTopo = { "network-topology-identifier": networkTopoID,\r
285               "provider-network-information": providerInfo,\r
286               "subnets": networkSubnets,\r
287               "vpn-bindings": networkVpnBindings,\r
288               "network-policy": networkPolicies,\r
289               "route-table-reference": networkRoutes};\r
290 \r
291   networkInput = {'network-topology-information': networkTopo};\r
292 \r
293   finalJson = {"input": networkInput};\r
294 \r
295   //outputJson();\r
296 }\r
297 \r
298 function outputJson() {\r
299   puts("\n");\r
300   puts("\n");\r
301   puts(JSON.stringify(finalJson,null,2));\r
302   puts("\n");\r
303   puts("\n");\r
304   var unixTime, fullpath_filename;\r
305   unixTime = moment().unix();\r
306   if (platform=='portal') {\r
307     fullpath_filename = process.cwd() + "/uploads/" + unixTime + ".net_worksheet.json";\r
308     filename = unixTime + ".net_worksheet.json.";\r
309   } else {\r
310     fullpath_filename = "./output.json."+unixTime;\r
311     filename = "output.json." + unixTime;\r
312   }\r
313   helpers.writeOutput(req, fullpath_filename, JSON.stringify(finalJson,null,2), callback);\r
314   //callback(null,  finalJson, filename);\r
315 }\r
316 \r
317 \r
318 // Gather functions that actually process data after it is all read\r
319 \r
320 function processGeneral() {\r
321   preloadVersion = getParam(csvGeneral, 'field2', 'preload-version', 'field3');\r
322   rawJson['preload-version'] = preloadVersion;\r
323   puts("Preload version: " + preloadVersion);\r
324 \r
325   if ( (preloadVersion!='1607') && (preloadVersion!='1610') ) {\r
326     puts("\nError - incorrect version of preload worksheet.");\r
327                 proc_error=true;\r
328     //callback('Error - incorrect version of preload worksheet.');\r
329                 return;\r
330   }\r
331 \r
332   rawJson['network-name'] = getParam(csvGeneral, 'field2', 'network-name', 'field3');\r
333   rawJson['network-role'] = getParam(csvGeneral, 'field2', 'network-role', 'field3');\r
334   rawJson['network-type'] = getParam(csvGeneral, 'field2', 'network-type', 'field3');\r
335   rawJson['network-technology'] = getParam(csvGeneral, 'field2', 'network-technology', 'field3');\r
336 \r
337   if ( preloadVersion!='1607' ) {\r
338     rawJson['physical-network-name'] = getParam(csvGeneral, 'field2', 'physical-network-name', 'field3');\r
339     rawJson['is-provider-network'] = getParam(csvGeneral, 'field2', 'is-provider-network', 'field3');\r
340     rawJson['is-shared-network'] = getParam(csvGeneral, 'field2', 'is-shared-network', 'field3');\r
341     rawJson['is-external-network'] = getParam(csvGeneral, 'field2', 'is-external-network', 'field3');\r
342   }\r
343 \r
344   rawJson['request-action'] = "PreloadNetworkRequest";\r
345   rawJson['svc-request-id'] = uuid.v1();\r
346   rawJson['svc-action'] = "reserve";\r
347   puts('rawJson:');\r
348   putd(rawJson);\r
349   puts("\n");\r
350 }\r
351 \r
352 function processSubnets() {\r
353   var newSubnets = [];\r
354   csvSubnets.forEach( function(subnet) {\r
355     var subnetJson = {};\r
356     subnetJson["start-address"] = subnet.field2;\r
357     if (subnet.field3!='') {\r
358       subnetJson["dhcp-start-address"] = subnet.field3;\r
359     }\r
360     if (subnet.field4!='') {\r
361       subnetJson["dhcp-end-address"] = subnet.field4;\r
362     }\r
363     if (subnet.field5!='') {\r
364       subnetJson["gateway-address"] = subnet.field5;\r
365     }\r
366     subnetJson["cidr-mask"] = subnet.field6;\r
367     subnetJson["ip-version"] = subnet.field7;\r
368     subnetJson["dhcp-enabled"] = subnet.field8;\r
369     subnetJson["subnet-name"] = subnet.field9;\r
370     newSubnets.push(subnetJson);\r
371     }\r
372   );\r
373   puts("subnets:");\r
374   putd(newSubnets);\r
375   puts("\n");\r
376   rawJson["subnets"] = newSubnets;\r
377 }\r
378 \r
379 function processVpnBindings() {\r
380   var newVpnBindings = [];\r
381 \r
382   csvVpnBindings.forEach( function(vpn) {\r
383     var vpnJson = {};\r
384     bindid = _.trim(vpn.field2);\r
385     vpnJson["vpn-binding-id"] = bindid;\r
386     if (bindid!="") {\r
387       newVpnBindings.push(vpnJson);\r
388     }\r
389     });\r
390 \r
391   puts("VPN-Bindings:");\r
392   putd(newVpnBindings);\r
393   puts("\n");\r
394   rawJson["vpn-bindings"] = newVpnBindings;\r
395 }\r
396 \r
397 function processPolicies() {\r
398   var newPolicies = [];\r
399 \r
400   csvPolicies.forEach( function(policy) {\r
401     var policyJson = {};\r
402     fqdn = _.trim(policy.field2);\r
403     if (fqdn != "") {\r
404       policyJson["network-policy-fqdn"] = fqdn;\r
405       newPolicies.push(policyJson);\r
406     }\r
407 \r
408     }\r
409   );\r
410 \r
411   puts("Policies:");\r
412   putd(newPolicies);\r
413   puts("\n");\r
414   rawJson["network-policy-fqdns"] = newPolicies;\r
415 }\r
416 \r
417 function processNetRoutes() {\r
418   var newNetRoutes = [];\r
419 \r
420   csvNetRoutes.forEach( function(netroute) {\r
421     var netrouteJson = {};\r
422     fqdn = _.trim(netroute.field2);\r
423     if (fqdn != "") {\r
424       netrouteJson["route-table-reference-fqdn"] = fqdn;\r
425       newNetRoutes.push(netrouteJson);\r
426     }\r
427 \r
428     }\r
429   );\r
430 \r
431   puts("Network-Routes:");\r
432   putd(newNetRoutes);\r
433   puts("\n");\r
434   rawJson["route-table-reference"] = newNetRoutes;\r
435 }\r
436 \r
437 \r
438 \r