'use strict'; exports = module.exports = { getServerIPv4, getServerIPv6, testConfig, hasIPv6 }; const assert = require('assert'), fs = require('fs'), settings = require('./settings.js'); function api(provider) { assert.strictEqual(typeof provider, 'string'); switch (provider) { case 'fixed': return require('./sysinfo/fixed.js'); case 'network-interface': return require('./sysinfo/network-interface.js'); default: return require('./sysinfo/generic.js'); } } async function getServerIPv4() { const config = await settings.getSysinfoConfig(); return await api(config.provider).getServerIPv4(config); } // returns RFC 5952 formatted address (https://datatracker.ietf.org/doc/html/rfc5952) async function getServerIPv6() { const config = await settings.getSysinfoConfig(); return await api(config.provider).getServerIPv6(config); } function hasIPv6() { const IPV6_PROC_FILE = '/proc/net/if_inet6'; // on contabo, /proc/net/if_inet6 is an empty file. so just exists is not enough return fs.existsSync(IPV6_PROC_FILE) && fs.readFileSync(IPV6_PROC_FILE, 'utf8').trim().length !== 0; } async function testConfig(config) { assert.strictEqual(typeof config, 'object'); return await api(config.provider).testConfig(config); }