70 lines
2.1 KiB
JavaScript
70 lines
2.1 KiB
JavaScript
const axios = require('axios');
|
|
const { JSDOM } = require('jsdom');
|
|
|
|
const WIKI_TLDS_URL = 'https://wiki.opennic.org/opennic/dot';
|
|
const CLOSEST_NIC_URL = 'https://api.opennic.org/geoip/?json=&res=4&ipv=4';
|
|
|
|
const USER_OPENNIC_NS = process.env.OPENNIC_NS;
|
|
const SELECTOR = process.argv[2];
|
|
|
|
let CLOSEST_NIC = '';
|
|
|
|
if (!USER_OPENNIC_NS) {
|
|
axios
|
|
.get(CLOSEST_NIC_URL)
|
|
.then(response => {
|
|
CLOSEST_NIC = response.data[0].ip;
|
|
console.log('# using the closest server: ', CLOSEST_NIC)
|
|
})
|
|
.catch(error => {
|
|
console.error('# Error scraping:', error);
|
|
});
|
|
}
|
|
const dnsmasqConfigPrerryPrint = cfg => {
|
|
return cfg.map(({tld, ns}) => `server=/${tld}/${ns}`).join('\n');
|
|
};
|
|
|
|
const processWiki = response => {
|
|
const { document } = new JSDOM(response.data).window;
|
|
const tables = document.querySelectorAll('tbody');
|
|
const opennicNs = USER_OPENNIC_NS || CLOSEST_NIC;
|
|
|
|
// First table - OpenNIC TLDs
|
|
const OpenNICTLDs = Array
|
|
.from(tables[0].querySelectorAll('th'))
|
|
.map(row => ({
|
|
tld: row.textContent.trim().slice(1),
|
|
ns: opennicNs
|
|
}));
|
|
|
|
const PeeredTLDs = Array
|
|
.from(tables[2].querySelectorAll('tr'))
|
|
.map(row => {
|
|
const cells = Array.from(row.querySelectorAll('td'));
|
|
const TLD = cells[0].firstChild.textContent.trim().slice(1);
|
|
const NSs = cells[3].textContent.trim();
|
|
return NSs.split('\n').map(NS => ({
|
|
tld: TLD,
|
|
ns: NS
|
|
}));
|
|
})
|
|
.reduce((acc, record) => acc.concat(record), []);
|
|
const OpenNICconfig = dnsmasqConfigPrerryPrint(OpenNICTLDs);
|
|
const OpenNICPeeredConfig = dnsmasqConfigPrerryPrint(PeeredTLDs)
|
|
|
|
if (SELECTOR === '-opennic') {
|
|
console.log(`# OpenNIC TLDs \n${OpenNICconfig}\n# ---------- \n`);
|
|
} else if (SELECTOR === '-peered') {
|
|
console.log(`# OpenNIC Peered TLDs \n${OpenNICPeeredConfig}\n# ---------- \n`);
|
|
} else {
|
|
console.log(`# OpenNIC TLDs \n\n${OpenNICconfig}\n# ---------- \n`);
|
|
console.log(`# OpenNIC Peered TLDs \n${OpenNICPeeredConfig}\n# ---------- \n`);
|
|
}
|
|
}
|
|
|
|
axios.get(WIKI_TLDS_URL)
|
|
.then(processWiki)
|
|
.catch(error => {
|
|
console.error('# Error scraping:', error);
|
|
});
|