@@ -4,6 +4,7 @@ const { spawn } = require('child_process')
4
4
const argv = require ( 'yargs' ) . argv
5
5
const URL = require ( 'url-parse' )
6
6
const parseDomain = require ( 'parse-domain' )
7
+ const async = require ( 'async' )
7
8
const whoisDb = require ( './db.js' )
8
9
9
10
function getWhoisData ( domain ) {
@@ -160,7 +161,7 @@ exports.getOwnerData = async function (domain) {
160
161
161
162
// Save whois data to DB only if it's valid
162
163
if ( exports . whoisDataValid ( data ) ) {
163
- whoisDb . insertDomain ( data )
164
+ await whoisDb . insertDomain ( data )
164
165
}
165
166
166
167
return data
@@ -228,9 +229,9 @@ Cross-origin percentage: ${data.resources[key].crossOriginPercentage}%`)
228
229
console . log ( `
229
230
URL: ${ exports . truncate . apply ( requestObj . url , [ 100 , false ] ) }
230
231
Owner data:
231
- Registrant Name: ${ ( requestObj . ownerData && requestObj . ownerData . registrantName ) ? requestObj . ownerData . registrantName : '' }
232
- Registrant Organization: ${ ( requestObj . ownerData && requestObj . ownerData . registrantOrganization ) ? requestObj . ownerData . registrantOrganization : '' }
233
- Registrant Country: ${ ( requestObj . ownerData && requestObj . ownerData . registrantCountry ) ? requestObj . ownerData . registrantCountry : '' } ` )
232
+ Registrant Name: ${ ( requestObj . whoisData && requestObj . whoisData . registrantName ) ? requestObj . whoisData . registrantName : '' }
233
+ Registrant Organization: ${ ( requestObj . whoisData && requestObj . whoisData . registrantOrganization ) ? requestObj . whoisData . registrantOrganization : '' }
234
+ Registrant Country: ${ ( requestObj . whoisData && requestObj . whoisData . registrantCountry ) ? requestObj . whoisData . registrantCountry : '' } ` )
234
235
}
235
236
} )
236
237
}
@@ -312,3 +313,35 @@ exports.startTime = id => {
312
313
exports . endTime = id => {
313
314
! argv . silent && console . timeEnd ( id )
314
315
}
316
+
317
+ exports . collectWhoisData = async data => {
318
+ let collectedWhoisData = [ ]
319
+ for ( let key in data . resources ) {
320
+ exports . log ( `Collecting whois data of ${ key } sources...` )
321
+ await new Promise ( resolve => {
322
+ // Limit concurrent whois queries to 30
323
+ async . mapLimit ( data . resources [ key ] . requests , 30 , async ( requestObj ) => {
324
+ let rootDomain = exports . getRootDomain ( requestObj . url )
325
+
326
+ // Fetch whois data only for cross-origins
327
+ if ( requestObj . crossOrigin && ! exports . whoisDataValid ( collectedWhoisData [ rootDomain ] ) ) {
328
+ let whoisData = await exports . getOwnerData ( rootDomain )
329
+ if ( exports . whoisDataValid ( whoisData ) ) {
330
+ collectedWhoisData [ rootDomain ] = whoisData
331
+ }
332
+ }
333
+
334
+ if ( requestObj . crossOrigin ) {
335
+ requestObj . whoisData = collectedWhoisData [ rootDomain ]
336
+ }
337
+ } , ( err , results ) => {
338
+ if ( err ) {
339
+ exports . log ( err )
340
+ }
341
+ resolve ( )
342
+ } )
343
+ } )
344
+ }
345
+
346
+ return data
347
+ }
0 commit comments