Files
cloudron-box/src/sysinfo.js

59 lines
1.6 KiB
JavaScript
Raw Normal View History

'use strict';
exports = module.exports = {
getServerIPv4,
getServerIPv6,
2022-02-15 12:31:55 -08:00
testIPv4Config,
testIPv6Config,
2019-07-25 11:26:53 -07:00
2021-05-01 11:21:09 -07:00
hasIPv6
};
2021-08-19 13:24:38 -07:00
const assert = require('assert'),
2019-07-25 11:26:53 -07:00
fs = require('fs'),
ipaddr = require('ipaddr.js'),
settings = require('./settings.js');
function api(provider) {
assert.strictEqual(typeof provider, 'string');
2019-10-29 15:46:33 -07:00
switch (provider) {
2022-03-01 12:05:01 -08:00
case 'noop': return require('./sysinfo/noop.js');
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();
2016-01-05 12:10:25 +01:00
return await api(config.provider).getServerIPv4(config);
}
2022-01-06 12:22:16 -08:00
// returns RFC 5952 formatted address (https://datatracker.ietf.org/doc/html/rfc5952)
async function getServerIPv6() {
2022-02-15 13:16:37 -08:00
const config = await settings.getIPv6Config();
const result = await api(config.provider).getServerIPv6(config);
2022-03-01 12:05:01 -08:00
if (!result) return null;
return ipaddr.parse(result).toRFC5952String();
2016-01-05 12:10:25 +01:00
}
2019-07-25 11:26:53 -07:00
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;
}
2019-10-29 20:08:45 -07:00
2022-02-15 12:31:55 -08:00
async function testIPv4Config(config) {
assert.strictEqual(typeof config, 'object');
return await api(config.provider).testIPv4Config(config);
}
async function testIPv6Config(config) {
2019-10-29 20:08:45 -07:00
assert.strictEqual(typeof config, 'object');
2022-02-15 12:31:55 -08:00
return await api(config.provider).testIPv6Config(config);
2019-10-29 20:08:45 -07:00
}