UNPKG

homebridge-config-ui-x

Version:

A web based management, configuration and control platform for Homebridge.

76 lines 3.23 kB
import { readFile, stat } from 'node:fs/promises'; import { homedir, networkInterfaces } from 'node:os'; import { resolve } from 'node:path'; import process from 'node:process'; import { readJson } from 'fs-extra/esm'; import { Logger } from '../logger/logger.service.js'; import { SslCertGeneratorService } from '../ssl/ssl-cert-generator.service.js'; export async function getStartupConfig() { const logger = new Logger(); const configPath = process.env.UIX_CONFIG_PATH || resolve(homedir(), '.homebridge/config.json'); const homebridgeConfig = await readJson(configPath); const ui = Array.isArray(homebridgeConfig.platforms) ? homebridgeConfig.platforms.find((x) => x.platform === 'config') : undefined; const config = {}; const ipv6 = Object.entries(networkInterfaces()).filter(([, addresses]) => { return addresses.find(x => x.family === 'IPv6'); }).length; config.host = ipv6 ? '::' : '0.0.0.0'; if (!ui) { return config; } if (ui.host && process.env.UIX_DEVELOPMENT !== '1') { config.host = ui.host; } if (ui.ssl && process.env.UIX_DEVELOPMENT !== '1') { if (ui.ssl.selfSigned) { try { const sslCertGenerator = new SslCertGeneratorService(); const hostnames = ui.ssl.selfSignedHostnames || ['localhost', '127.0.0.1']; const { privateKey, certificate } = await sslCertGenerator.generateOrLoadCertificate(hostnames); config.httpsOptions = { key: privateKey, cert: certificate, }; logger.log('Self-signed certificate loaded successfully'); } catch (e) { logger.error(`Could not generate self-signed certificate: ${e.message}`); logger.error(e); } } else if ((ui.ssl.key && ui.ssl.cert) || ui.ssl.pfx) { for (const attribute of ['key', 'cert', 'pfx']) { if (ui.ssl[attribute]) { if (!(await (stat(ui.ssl[attribute]))).isFile()) { logger.error(`SSL config error: ui.ssl.${attribute}: ${ui.ssl[attribute]} is not a valid file.`); } } } try { config.httpsOptions = { key: ui.ssl.key ? await readFile(ui.ssl.key) : undefined, cert: ui.ssl.cert ? await readFile(ui.ssl.cert) : undefined, pfx: ui.ssl.pfx ? await readFile(ui.ssl.pfx) : undefined, passphrase: ui.ssl.passphrase, }; } catch (e) { logger.error(`Could not start server with SSL enabled as ${e.message}.`); logger.error(e); } } } if (ui.proxyHost && process.env.UIX_DEVELOPMENT !== '1') { config.cspWsOverride = `wss://${ui.proxyHost} ws://${ui.proxyHost}`; } if (ui.debug) { config.debug = true; process.env.UIX_DEBUG_LOGGING = '1'; } else { config.debug = false; process.env.UIX_DEBUG_LOGGING = '0'; } return config; } //# sourceMappingURL=config.startup.js.map