-
Notifications
You must be signed in to change notification settings - Fork 10
/
client.js
executable file
·77 lines (73 loc) · 2.62 KB
/
client.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
#!/usr/bin/env node
//
// Copyright (c) 2017 NetBlocks Project <https://netblocks.org>
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
global.Promise = require('bluebird');
const WhoisIP = require('./check');
const prettyjson = require('prettyjson');
const argv = require('yargs')
.command('whois-rdap', 'RDAP IP WHOIS client')
.usage('Usage: $0 [options] [ip ...]')
.example('$0 8.8.8.8', 'query the specified IPv4/IPv6 address')
.demandCommand(1)
.boolean('force')
.alias('f', 'force')
.describe('f', 'avoid cache and force update')
.boolean('verbose')
.alias('v', 'verbose')
.describe('v', 'enable verbose debug output')
.boolean('pretty')
.alias('p', 'pretty')
//.default('p', process.stdout.isTTY)
.describe('p', 'pretty-print RDAP output')
.help('h')
.alias('h', 'help')
.epilog('The NetBlocks Project <https://netblocks.org>')
.argv;
const VERBOSE = argv.verbose;
const ips = argv._;
var whois = new WhoisIP();
whois.http_timeout = 20000;
// TODO: Pass verbose flag down to the backend
whois.connect()
.catch(err => {
if (!VERBOSE)
return;
// TODO: Other db calls can still throw and will be uncaught
if (err.name === 'MongoNetworkError')
console.error('no database cache');
else
console.error(err);
}).then(() => {
if (argv.force)
whois.ttl_secs = 0;
return whois.check(ips[0]).then((res) => {
if (argv.pretty) {
console.log(prettyjson.render(res.rdap));
} else {
console.log(JSON.stringify(res.rdap, null, ' '));
}
if (VERBOSE)
console.error(res.object_id);
});
}).finally(() => {
if (whois.client)
return whois.client.close();
});