@@ -7,7 +7,7 @@ const fs = require('fs');
77const path = require ( 'path' ) ;
88const os = require ( 'os' ) ;
99
10- async function checkifTableExists ( db ) {
10+ async function checkifTableExists ( db ) {
1111 const query = `select count(*) from sqlite_master m where m.name="assets" OR m.name="relations"`
1212
1313 return new Promise ( ( resolve , reject ) => {
@@ -41,43 +41,41 @@ async function openDatabase(fileContent) {
4141async function parse ( fileContent ) {
4242 const db = await openDatabase ( fileContent ) ;
4343 const tableExists = await checkifTableExists ( db ) ;
44- if ( ! tableExists ) return [ ] ;
44+ if ( ! tableExists ) return [ ] ;
4545
4646 return new Promise ( ( resolve , reject ) => {
4747
4848 const query = `
4949 WITH relation_chain AS (
50- SELECT
51- fqdn.content AS subdomain,
52- ips.content AS ip,
53- cidr.content AS cidr,
54- asn.id AS asn_id,
55- asn.content AS asn
50+ SELECT
51+ fqdn.content AS subdomain,
52+ ips.content AS ip,
53+ cidr.content AS cidr,
54+ asn.id AS asn_id,
55+ asn.content AS asn
5656 FROM assets fqdn
57-
58- JOIN relations r1 ON fqdn.id = r1.from_asset_id AND (r1.type = 'a_record' OR r1.type = 'aaaa_record')
59- JOIN assets ips ON r1.to_asset_id = ips.id
60-
61- JOIN relations r2 ON ips.id = r2.to_asset_id AND r2.type = 'contains'
62- JOIN assets cidr ON r2.from_asset_id = cidr.id
63-
64- JOIN relations r3 ON cidr.id = r3.to_asset_id AND r3.type = 'announces'
65- JOIN assets asn ON r3.from_asset_id = asn.id
66-
67- WHERE fqdn.type = 'FQDN'
68- )
6957
70- SELECT
58+ LEFT JOIN relations r1 ON fqdn.id = r1.from_asset_id AND (r1.type = 'a_record' OR r1.type = 'aaaa_record')
59+ LEFT JOIN assets ips ON r1.to_asset_id = ips.id
60+
61+ LEFT JOIN relations r2 ON ips.id = r2.to_asset_id AND r2.type = 'contains'
62+ LEFT JOIN assets cidr ON r2.from_asset_id = cidr.id
63+
64+ LEFT JOIN relations r3 ON cidr.id = r3.to_asset_id AND r3.type = 'announces'
65+ LEFT JOIN assets asn ON r3.from_asset_id = asn.id
66+
67+ WHERE fqdn.type = 'FQDN'
68+ )
69+ SELECT
7170 rc.subdomain,
7271 rc.ip,
7372 rc.cidr,
7473 rc.asn,
7574 a.content AS managed_by,
7675 (SELECT content FROM assets WHERE id = 1) AS domain
77-
78- FROM relation_chain rc
79- JOIN relations r ON rc.asn_id = r.from_asset_id AND r.type = 'managed_by'
80- JOIN assets a ON r.to_asset_id = a.id;` ;
76+ FROM relation_chain rc
77+ LEFT JOIN relations r ON rc.asn_id = r.from_asset_id AND r.type = 'managed_by'
78+ LEFT JOIN assets a ON r.to_asset_id = a.id;` ;
8179
8280 db . all ( query , [ ] , ( err , rows ) => {
8381 if ( err ) {
0 commit comments