-
Notifications
You must be signed in to change notification settings - Fork 0
/
parse.js
114 lines (97 loc) · 2.26 KB
/
parse.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
import fs from 'fs'
import readline from 'readline'
async function processBindFile(filePath) {
const fileStream = fs.createReadStream(filePath);
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity
})
let origin;
let ttl;
let previousTtl;
let previousName;
let records = [];
let recordsType = ['NS', 'A', 'CNAME', 'MX']
recordsType.forEach(element => {
records[element] = [];
})
let soa = {};
let soaLine = 0;
let multiLineSoa = false;
let containsTtl = false;
for await (const line of rl) {
if (line.length > 1) {
}
}
let commentedLine = false;
let l = line.trim()
.replace(/\t/g, '')
.replace(/\s+/g, '');
let commentIndex = l.indexOf(';');
if (commentIndex !== -1) {
if (commentIndex !== 0) {
let m = l.split(';');
l = m[0];
}
else {
commentedLine = true;
}
}
if (!commentedLine) {
let splittedLine = l.split(' ');
switch (splittedLine[0]) {
case '$ORIGIN':
origin = splittedLine[1];
break;
case '$TTL':
ttl = splittedLine[1];
break;
case '$INCLUDE':
break;
default:
if (splittedLine.includes('SOA')) {
previousName = splittedLine[0];
soa.mname = splittedLine[3];
soa.rname = splittedLine[4];
if (splittedLine.includes(')')) {
soa.serial = splittedLine[6];
soa.refresh = splittedLine[7];
soa.retry = splittedLine[8];
soa.expire = splittedLine[9];
soa.title = splittedLine[10];
}
else {
multiLineSoa = true;
soaLine++;
}
}
}
}
if (multiLineSoa) {
switch (soaLine) {
case 2:
//console.log(splittedLine);
soa.serial = splittedLine[0]
break;
case 3:
soa.refresh = splittedLine[0]
break;
case 4:
soa.retry = splittedLine[0];
break;
case 5:
soa.expire = splittedLine[0];
break;
case 6:
soa.ttl = splittedLine[0];
break;
default:
break;
}
//console.log(splittedLine);
if (splittedLine.includes(')')) {
multiLineSoa = false;
}
soaLine++;
}
}