UNPKG

12.7 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _alinexUtil = require('alinex-util');
8
9var _alinexUtil2 = _interopRequireDefault(_alinexUtil);
10
11var _Number = require('./Number');
12
13var _Number2 = _interopRequireDefault(_Number);
14
15var _Error = require('../Error');
16
17var _Error2 = _interopRequireDefault(_Error);
18
19var _Reference = require('../Reference');
20
21var _Reference2 = _interopRequireDefault(_Reference);
22
23function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
24
25const portNames = {
26 'acr-nema': 104,
27 afbackup: 2988,
28 afmbackup: 2989,
29 afpovertcp: 548,
30 'afs3-bos': 7007,
31 'afs3-callback': 7001,
32 'afs3-errors': 7006,
33 'afs3-fileserver': 7000,
34 'afs3-kaserver': 7004,
35 'afs3-prserver': 7002,
36 'afs3-rmtsys': 7009,
37 'afs3-update': 7008,
38 'afs3-vlserver': 7003,
39 'afs3-volser': 7005,
40 amanda: 10080,
41 amandaidx: 10082,
42 amidxtape: 10083,
43 amqp: 5672,
44 aol: 5190,
45 'asf-rmcp': 623,
46 asp: 27374,
47 'at-echo': 204,
48 'at-nbp': 202,
49 'at-rtmp': 201,
50 'at-zis': 206,
51 auth: 113,
52 'bacula-dir': 9101,
53 'bacula-fd': 9102,
54 'bacula-sd': 9103,
55 bgp: 179,
56 bgpd: 2605,
57 bgpsim: 5675,
58 biff: 512,
59 binkp: 24554,
60 bootpc: 68,
61 bootps: 67,
62 bpcd: 13782,
63 bpdbm: 13721,
64 'bpjava-msvc': 13722,
65 bprd: 13720,
66 canna: 5680,
67 cfengine: 5308,
68 cfinger: 2003,
69 chargen: 19,
70 'cisco-sccp': 2000,
71 'clc-build-daemon': 8990,
72 clearcase: 371,
73 'cmip-agent': 164,
74 'cmip-man': 163,
75 codaauth2: 370,
76 codasrv: 2432,
77 'codasrv-se': 2433,
78 conference: 531,
79 courier: 530,
80 'csnet-ns': 105,
81 csync2: 30865,
82 customs: 1001,
83 cvspserver: 2401,
84 daap: 3689,
85 datametrics: 1645,
86 daytime: 13,
87 'db-lsp': 17500,
88 dcap: 22125,
89 'dhcpv6-client': 546,
90 'dhcpv6-server': 547,
91 dicom: 11112,
92 dict: 2628,
93 dircproxy: 57000,
94 discard: 9,
95 distcc: 3632,
96 distmp3: 4600,
97 domain: 53,
98 echo: 7,
99 eklogin: 2105,
100 'enbd-cstatd': 5051,
101 'enbd-sstatd': 5052,
102 epmd: 4369,
103 exec: 512,
104 'f5-globalsite': 2792,
105 'f5-iquery': 4353,
106 fatserv: 347,
107 fax: 4557,
108 fido: 60179,
109 finger: 79,
110 'font-service': 7100,
111 freeciv: 5556,
112 frox: 2121,
113 fsp: 21,
114 ftp: 21,
115 'ftp-data': 20,
116 ftps: 990,
117 'ftps-data': 989,
118 gdomap: 538,
119 'gds-db': 3050,
120 ggz: 5688,
121 git: 9418,
122 gnunet: 2086,
123 'gnutella-rtr': 6347,
124 'gnutella-svc': 6346,
125 gopher: 70,
126 gpsd: 2947,
127 gris: 2135,
128 groupwise: 1677,
129 gsidcap: 22128,
130 gsiftp: 2811,
131 gsigatekeeper: 2119,
132 hkp: 11371,
133 'hmmp-ind': 612,
134 hostmon: 5355,
135 hostnames: 101,
136 http: 80,
137 'http-alt': 8080,
138 https: 443,
139 hylafax: 4559,
140 iax: 4569,
141 icpv2: 3130,
142 idfp: 549,
143 imap2: 143,
144 imap3: 220,
145 imaps: 993,
146 imsp: 406,
147 ingreslock: 1524,
148 ipp: 631,
149 iprop: 2121,
150 'ipsec-nat-t': 4500,
151 ipx: 213,
152 irc: 194,
153 ircd: 6667,
154 ircs: 994,
155 isakmp: 500,
156 'iscsi-target': 3260,
157 isdnlog: 20011,
158 isisd: 2608,
159 'iso-tsap': 102,
160 kamanda: 10081,
161 kazaa: 1214,
162 kerberos4: 750,
163 kerberos: 88,
164 'kerberos-adm': 749,
165 'kerberos-master': 751,
166 kermit: 1649,
167 klogin: 543,
168 knetd: 2053,
169 kpasswd: 464,
170 kpop: 1109,
171 'krb-prop': 754,
172 krbupdate: 760,
173 kshell: 544,
174 kx: 2111,
175 l2f: 1701,
176 ldap: 389,
177 ldaps: 636,
178 link: 87,
179 linuxconf: 98,
180 'loc-srv': 135,
181 login: 513,
182 'log-server': 1958,
183 lotusnote: 1352,
184 mailq: 174,
185 mandelspawn: 9359,
186 mdns: 5353,
187 'microsoft-ds': 445,
188 mmcc: 5050,
189 'moira-db': 775,
190 'moira-update': 777,
191 'moira-ureg': 779,
192 mon: 2583,
193 mrtd: 5674,
194 msnp: 1863,
195 msp: 18,
196 'ms-sql-m': 1434,
197 'ms-sql-s': 1433,
198 mtn: 4691,
199 mtp: 57,
200 munin: 4949,
201 mysql: 3306,
202 'mysql-proxy': 6446,
203 nameserver: 42,
204 nbd: 10809,
205 nbp: 2,
206 nessus: 1241,
207 'netbios-dgm': 138,
208 'netbios-ns': 137,
209 'netbios-ssn': 139,
210 netnews: 532,
211 netstat: 15,
212 netwall: 533,
213 nextstep: 178,
214 nfs: 2049,
215 ninstall: 2150,
216 nntp: 119,
217 nntps: 563,
218 noclog: 5354,
219 'npmp-gui': 611,
220 'npmp-local': 610,
221 nqs: 607,
222 nrpe: 5666,
223 nsca: 5667,
224 ntalk: 518,
225 ntp: 123,
226 nut: 3493,
227 omirr: 808,
228 omniorb: 8088,
229 openvpn: 1194,
230 ospf6d: 2606,
231 ospfapi: 2607,
232 ospfd: 2604,
233 'passwd-server': 752,
234 pawserv: 345,
235 pcrd: 5151,
236 'pipe-server': 2010,
237 pop2: 109,
238 pop3: 110,
239 pop3s: 995,
240 poppassd: 106,
241 postgresql: 5432,
242 predict: 1210,
243 printer: 515,
244 proofd: 1093,
245 prospero: 191,
246 'prospero-np': 1525,
247 pwdgen: 129,
248 qmqp: 628,
249 qmtp: 209,
250 qotd: 17,
251 radius: 1812,
252 'radius-acct': 1813,
253 'radmin-port': 4899,
254 're-mail-ck': 50,
255 remctl: 4373,
256 remotefs: 556,
257 remoteping: 1959,
258 rfe: 5002,
259 ripd: 2602,
260 ripngd: 2603,
261 rje: 77,
262 rlp: 39,
263 rmiregistry: 1099,
264 rmtcfg: 1236,
265 rootd: 1094,
266 route: 520,
267 rpc2portmap: 369,
268 rplay: 5555,
269 rsync: 873,
270 'rtcm-sc104': 2101,
271 rtelnet: 107,
272 rtmp: 1935,
273 rtsp: 554,
274 saft: 487,
275 'sa-msg-port': 1646,
276 'sane-port': 6566,
277 search: 2010,
278 sftp: 115,
279 'sge-execd': 6445,
280 'sge-qmaster': 6444,
281 'sgi-cad': 17004,
282 'sgi-cmsd': 17001,
283 'sgi-crsd': 17002,
284 'sgi-gcd': 17003,
285 shell: 514,
286 sieve: 4190,
287 silc: 706,
288 sip: 5060,
289 'sip-tls': 5061,
290 skkserv: 1178,
291 smsqp: 11201,
292 smtp: 25,
293 smux: 199,
294 snmp: 161,
295 'snmp-trap': 162,
296 snpp: 444,
297 socks: 1080,
298 spamd: 783,
299 ssh: 22,
300 submission: 587,
301 sunrpc: 111,
302 supdup: 95,
303 supfiledbg: 1127,
304 supfilesrv: 871,
305 support: 1529,
306 suucp: 4031,
307 svn: 3690,
308 svrloc: 427,
309 swat: 901,
310 syslog: 514,
311 'syslog-tls': 6514,
312 sysrqd: 4094,
313 systat: 11,
314 tacacs: 49,
315 'tacacs-ds': 65,
316 talk: 517,
317 tcpmux: 1,
318 telnet: 23,
319 telnets: 992,
320 tempo: 526,
321 tfido: 60177,
322 tftp: 69,
323 time: 37,
324 timed: 525,
325 tinc: 655,
326 tproxy: 8081,
327 ulistserv: 372,
328 'unix-status': 1957,
329 urd: 465,
330 uucp: 540,
331 'uucp-path': 117,
332 vboxd: 20012,
333 venus: 2430,
334 'venus-se': 2431,
335 vnetd: 13724,
336 vopied: 13783,
337 webmin: 10000,
338 webster: 765,
339 who: 513,
340 whois: 43,
341 wipld: 1300,
342 wnn6: 22273,
343 'x11-1': 6001,
344 'x11-2': 6002,
345 'x11-3': 6003,
346 'x11-4': 6004,
347 'x11-5': 6005,
348 x11: 6000,
349 'x11-6': 6006,
350 'x11-7': 6007,
351 xdmcp: 177,
352 xinetd: 9098,
353 xmms2: 9667,
354 'xmpp-client': 5222,
355 'xmpp-server': 5269,
356 xpilot: 15345,
357 xtel: 1313,
358 xtell: 4224,
359 xtelw: 1314,
360 z3950: 210,
361 'zabbix-agent': 10050,
362 'zabbix-trapper': 10051,
363 zebra: 2601,
364 zebrasrv: 2600,
365 'zephyr-clt': 2103,
366 'zephyr-hm': 2104,
367 'zephyr-srv': 2102,
368 zip: 6,
369 zope: 9673,
370 'zope-ftp': 8021,
371 zserv: 346
372};
373
374const portRanges = {
375 system: [0, 1023],
376 registered: [1024, 49151],
377 dynamic: [49152, 65535]
378};
379
380class PortSchema extends _Number2.default {
381 constructor(base) {
382 super(base);
383 super.integerType('short');
384 super.positive();
385 }
386
387 sanitize() {
388 return this._setError('sanitize');
389 }
390
391 _sanitizeDescriptor() {
392 const set = this._setting;
393 let msg = 'A port number or name is needed, the names will be replaced with their standard \
394 ports. ';
395 if (set.sanitize instanceof _Reference2.default) {
396 msg += `Strings are sanitized depending on ${set.sanitize.description}. `;
397 } else if (set.sanitize) {
398 msg += 'Strings are sanitized to get the first numerical value out of it. ';
399 }
400 return msg.replace(/ $/, '\n');
401 }
402
403 _sanitizeValidator(data) {
404 const check = this._check;
405 try {
406 this._checkBoolean('sanitize');
407 } catch (err) {
408 return Promise.reject(new _Error2.default(this, data, err.message));
409 }
410
411 const orig = data.value;
412 if (typeof data.value === 'string') {
413 const lc = data.value.toLowerCase();
414 if (portNames[lc]) data.value = portNames[lc];
415 if (check.sanitize) data.value = data.value.replace(/^.*?([-+]?\d+\.?\d*).*?$/, '$1');
416 if (typeof data.value === 'string') data.value = parseInt(data.value, 10);
417 data.value = Number(data.value);
418 }
419 if (typeof data.value !== 'number') {
420 return Promise.reject(new _Error2.default(this, data, `The given value is of type ${typeof data.value} but a number is needed.`));
421 } else if (Number.isNaN(data.value)) {
422 return Promise.reject(new _Error2.default(this, data, `The given element \`${_alinexUtil2.default.inspect(orig)}\` is no valid number.`));
423 }
424 return Promise.resolve();
425 }
426
427 unit() {
428 return this._setError('unit');
429 }
430 toUnit() {
431 return this._setError('toUnit');
432 }
433 positive() {
434 return this._setError('positive');
435 }
436 negative() {
437 return this._setError('negative');
438 }
439 integer() {
440 return this._setError('integer');
441 }
442 integerType() {
443 return this._setError('integerType');
444 }
445 round() {
446 return this._setError('round');
447 }
448 multiple() {
449 return this._setError('multiple');
450 }
451 format() {
452 return this._setError('format');
453 }
454
455 _allowValidator(data) {
456 const check = this._check;
457 this._checkArray('allow');
458 this._checkArray('deny');
459
460 const deny = [];
461 if (check.deny) {
462 var _iteratorNormalCompletion = true;
463 var _didIteratorError = false;
464 var _iteratorError = undefined;
465
466 try {
467 for (var _iterator = check.deny[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
468 const e = _step.value;
469
470 if (portRanges[e]) {
471 for (let n = portRanges[e][0]; n <= portRanges[e][1]; n += 1) deny.push(n);
472 }
473 }
474 } catch (err) {
475 _didIteratorError = true;
476 _iteratorError = err;
477 } finally {
478 try {
479 if (!_iteratorNormalCompletion && _iterator.return) {
480 _iterator.return();
481 }
482 } finally {
483 if (_didIteratorError) {
484 throw _iteratorError;
485 }
486 }
487 }
488 }
489 const allow = [];
490 if (check.allow) {
491 var _iteratorNormalCompletion2 = true;
492 var _didIteratorError2 = false;
493 var _iteratorError2 = undefined;
494
495 try {
496 for (var _iterator2 = check.allow[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
497 const e = _step2.value;
498
499 if (portRanges[e]) {
500 for (let n = portRanges[e][0]; n <= portRanges[e][1]; n += 1) allow.push(n);
501 }
502 }
503 } catch (err) {
504 _didIteratorError2 = true;
505 _iteratorError2 = err;
506 } finally {
507 try {
508 if (!_iteratorNormalCompletion2 && _iterator2.return) {
509 _iterator2.return();
510 }
511 } finally {
512 if (_didIteratorError2) {
513 throw _iteratorError2;
514 }
515 }
516 }
517 }
518 if (allow && deny && allow.length && deny.length) {
519 check.deny = check.deny.filter(e => !check.allow.includes(e));
520 }
521
522 if (check.deny) {
523 var _iteratorNormalCompletion3 = true;
524 var _didIteratorError3 = false;
525 var _iteratorError3 = undefined;
526
527 try {
528 for (var _iterator3 = check.deny[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
529 const e = _step3.value;
530
531 if (portNames[e]) allow.push(portNames[e]);else if (!portRanges[e]) {
532 deny.push(e);
533 const idx = allow.indexOf(e);
534 if (idx > -1) allow.splice(idx, 1);
535 }
536 }
537 } catch (err) {
538 _didIteratorError3 = true;
539 _iteratorError3 = err;
540 } finally {
541 try {
542 if (!_iteratorNormalCompletion3 && _iterator3.return) {
543 _iterator3.return();
544 }
545 } finally {
546 if (_didIteratorError3) {
547 throw _iteratorError3;
548 }
549 }
550 }
551 }
552 if (check.allow) {
553 var _iteratorNormalCompletion4 = true;
554 var _didIteratorError4 = false;
555 var _iteratorError4 = undefined;
556
557 try {
558 for (var _iterator4 = check.allow[Symbol.iterator](), _step4; !(_iteratorNormalCompletion4 = (_step4 = _iterator4.next()).done); _iteratorNormalCompletion4 = true) {
559 const e = _step4.value;
560
561 if (portNames[e]) allow.push(portNames[e]);else if (!portRanges[e]) {
562 allow.push(e);
563 const idx = deny.indexOf(e);
564 if (idx > -1) deny.splice(idx, 1);
565 }
566 }
567 } catch (err) {
568 _didIteratorError4 = true;
569 _iteratorError4 = err;
570 } finally {
571 try {
572 if (!_iteratorNormalCompletion4 && _iterator4.return) {
573 _iterator4.return();
574 }
575 } finally {
576 if (_didIteratorError4) {
577 throw _iteratorError4;
578 }
579 }
580 }
581 }
582 if (check.deny) check.deny = deny;
583 if (check.allow) check.allow = allow;
584
585 return super._allowValidator(data);
586 }
587}
588
589exports.default = PortSchema;
\No newline at end of file