UNPKG

navy

Version:

Quick and powerful development environments using Docker and Docker Compose

69 lines (51 loc) 2.01 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.createHostForService = createHostForService; exports.createUrlForService = createUrlForService; exports.getNIPSubdomain = getNIPSubdomain; exports.getUrlFromService = getUrlFromService; var _https = require("./https"); var _fs = _interopRequireDefault(require("fs")); const BASE = 'nip.io'; function isValidIpv4Addr(ip) { return /^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/g.test(ip); } async function getNIPSubdomain(externalIP) { if (!isValidIpv4Addr(externalIP)) { // invalid IP address, fallback to local return `127.0.0.1.${BASE}`; } return `${externalIP}.${BASE}`; } async function createHostForService(service, navyNormalisedName, externalIP) { return `${service}.${navyNormalisedName}.${process.env.NAVY_EXTERNAL_SUBDOMAIN || (await getNIPSubdomain(externalIP))}`; } async function createUrlForService(service, navyNormalisedName, externalIP) { const certsPath = (0, _https.getCertsPath)(); let proto = 'http'; const baseUrl = await createHostForService(service, navyNormalisedName, externalIP); if (_fs.default.existsSync(`${certsPath}/${baseUrl}.crt`)) { proto = 'https'; } return `${proto}://${await createHostForService(service, navyNormalisedName, externalIP)}`; } function getUrlFromService(service) { if (!service || !service.raw || !service.raw.Config || !service.raw.Config.Env) { return null; } const env = service.raw.Config.Env; const certsPath = (0, _https.getCertsPath)(); for (const envVar of env) { if (envVar.indexOf('VIRTUAL_HOST=') === 0) { let proto = 'http'; if (_fs.default.existsSync(`${certsPath}/${envVar.substring('VIRTUAL_HOST='.length)}.crt`)) { proto = 'https'; } return proto + '://' + envVar.substring('VIRTUAL_HOST='.length); } } return null; }