-
Notifications
You must be signed in to change notification settings - Fork 5
/
index.js
117 lines (110 loc) · 4.55 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
var async = require('async');
var pfSense = require('./actions/all');
var normalize = require('./lib/normalizers');
var start = function (connection, tasks, callback) {
var useropts = connection;
var resultArr = [];
async.waterfall([
// login
function (callback) {
pfSense.login(useropts, function (err, session) {
if (err) {
resultArr.push({'status': 'error', 'errormessage': err});
callback(err);
} else {
callback(null, session);
}
})
},
// execute each task
function (session, callback) {
async.eachSeries(tasks, function (task, callback) {
normalize.normalizeParams(task.params, function (err, params) {
task.params = params;
switch (task.action) {
case 'create':
pfSense.createRule(session, useropts, task, function (err, result) {
if (err) {
resultArr.push({
'ruledesc': task.params.descr,
'status': 'error',
'errormessage': err
});
callback();
} else {
resultArr.push(result);
pfSense.activateRule(session, useropts, function (err, result) {
callback();
});
}
});
break;
case 'delete':
pfSense.deleteRule(session, useropts, task, function (err, result) {
if (err) {
resultArr.push({
'ruledesc': task.params.descr,
'status': 'error',
'errormessage': err
});
callback();
} else {
resultArr.push(result);
pfSense.activateRule(session, useropts, function (err, result) {
callback();
});
}
});
break;
case 'search':
pfSense.searchRule(session, useropts, task, function (err, result) {
if (err) {
resultArr.push({
'ruledesc': task.params.descr,
'status': 'error',
'errormessage': err
});
callback();
} else {
resultArr.push(result);
pfSense.activateRule(session, useropts, function (err, result) {
callback();
});
}
});
break;
default:
callback();
}
})
}, function (err) {
// one of the series had an error, we will nevertheless continue to properly logout
if (err) {
callback(null, session);
} else {
callback(null, session);
}
})
},
// logout
function (session, callback) {
pfSense.logout(session, useropts, function (err, result) {
if (err) {
callback(err);
} else {
callback(null);
}
})
}
], function (err, result) {
if (err) {
// TODO: move the stuff from resultArr to the actuall error
if (callback) callback(err, resultArr);
} else {
if (callback) callback(null, resultArr);
}
});
};
module.exports = {
start: start
};