navy
Version:
Quick and powerful development environments using Docker and Docker Compose
69 lines (51 loc) • 2.01 kB
JavaScript
;
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;
}