UNPKG

@pushrocks/smartnginx

Version:

control nginx from node, TypeScript ready

144 lines 11.1 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const plugins = require("./smartnginx.plugins"); const paths = require("./smartnginx.paths"); const snippets = require("./smartnginx.snippets"); const smartnginx_classes_nginxhost_1 = require("./smartnginx.classes.nginxhost"); const smartnginx_classes_nginxprocess_1 = require("./smartnginx.classes.nginxprocess"); /** * main class that manages a NginxInstance */ class SmartNginx { constructor(optionsArg) { // the objectmaps this.deployedHosts = new plugins.lik.Objectmap(); this.hostCandidates = new plugins.lik.Objectmap(); this.nginxProcess = new smartnginx_classes_nginxprocess_1.NginxProcess(this); this.options = optionsArg; this.options.logger ? (this.logger = this.options.logger) : (this.logger = plugins.smartlog.defaultLogger); } // =================== // interact with Hosts // =================== /** * add a host * @param nginxHostArg */ addHostCandidate(optionsArg) { const nginxHost = new smartnginx_classes_nginxhost_1.NginxHost(this, optionsArg); this.hostCandidates.add(nginxHost); return nginxHost; } /** * Gets a NginxHost by hostname * @param hostNameArg */ getDeployedNginxHostByHostName(hostNameArg) { return this.deployedHosts.find(nginxHost => { return nginxHost.hostName === hostNameArg; }); } /** * listHosts */ listDeployedHosts() { return __awaiter(this, void 0, void 0, function* () { return this.deployedHosts.getArray(); }); } /** * remove a Host * @param nginxHostArg */ removeDeployedHost(nginxHostArg) { return __awaiter(this, void 0, void 0, function* () { if (this.hostCandidates.isEmpty()) { this.deployedHosts.forEach(hostArg => { this.hostCandidates.add(hostArg); }); } this.hostCandidates.remove(nginxHostArg); this.deploy(); }); } /** * check wether there has been a diverging host configuration * this function will only redeploy the nginx configuration in case there has been a change */ areHostsDiverged() { return __awaiter(this, void 0, void 0, function* () { let hostCounter = 0; let unfoundHosts = 0; yield this.hostCandidates.forEach((hostCandidateArg) => __awaiter(this, void 0, void 0, function* () { let foundHost = false; yield this.deployedHosts.forEach((deployedHostArg) => __awaiter(this, void 0, void 0, function* () { if (hostCandidateArg.hostName === deployedHostArg.hostName && hostCandidateArg.destination === deployedHostArg.destination && hostCandidateArg.destinationPort === deployedHostArg.destinationPort) { hostCounter++; foundHost = true; } })); if (!foundHost) { unfoundHosts++; } })); return (this.deployedHosts.getArray().length !== this.hostCandidates.getArray().length || hostCounter !== this.deployedHosts.getArray().length || unfoundHosts !== 0); }); } /** * deploy the current stack and restart nginx */ deploy() { return __awaiter(this, void 0, void 0, function* () { if (yield this.areHostsDiverged()) { this.logger.log('ok', `hosts have diverged, trigger config deployment and nginx reload!`); this.deployedHosts.wipe(); this.deployedHosts.addArray(this.hostCandidates.getArray()); this.hostCandidates.wipe(); // write base config plugins.smartfile.fs.ensureDirSync(paths.nginxConfigDirPath); plugins.smartfile.memory.toFsSync(snippets.getBaseConfigString(this.options.defaultProxyUrl), paths.nginxConfFile); // write standard self signed certificate const selfsignedCert = plugins.selfsigned.generate([{ name: 'commonName', value: 'selfsigned.git.zone' }], { days: 365 }); // deploy hosts plugins.smartfile.fs.ensureDirSync(paths.nginxHostDirPath); plugins.smartfile.memory.toFsSync(selfsignedCert.private, plugins.path.join(paths.nginxHostDirPath, './default.private.pem')); plugins.smartfile.memory.toFsSync(selfsignedCert.cert, plugins.path.join(paths.nginxHostDirPath, './default.public.pem')); for (const host of this.deployedHosts.getArray()) { yield host.deploy(); this.logger.log('info', `Host ${host.hostName} deployed!`); } this.nginxProcess.reloadConfig(); } else { this.logger.log('info', `hosts have not diverged, skipping nginx reload`); this.hostCandidates.wipe(); } }); } /** * stops the smartnginx instance */ stop() { return __awaiter(this, void 0, void 0, function* () { if (this.nginxProcess) { yield this.nginxProcess.stop(); } }); } } exports.SmartNginx = SmartNginx; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRuZ2lueC5jbGFzc2VzLnNtYXJ0bmdpbnguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9zbWFydG5naW54LmNsYXNzZXMuc21hcnRuZ2lueC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQUEsZ0RBQWdEO0FBQ2hELDRDQUE0QztBQUM1QyxrREFBa0Q7QUFDbEQsaUZBQTJEO0FBQzNELHVGQUFpRTtBQVFqRTs7R0FFRztBQUNILE1BQWEsVUFBVTtJQVNyQixZQUFZLFVBQXdDO1FBTHBELGlCQUFpQjtRQUNULGtCQUFhLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBYSxDQUFDO1FBQ3ZELG1CQUFjLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBYSxDQUFDO1FBRXpELGlCQUFZLEdBQWlCLElBQUksOENBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUV6RCxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU07WUFDakIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUNyQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDckQsQ0FBQztJQUVELHNCQUFzQjtJQUN0QixzQkFBc0I7SUFDdEIsc0JBQXNCO0lBRXRCOzs7T0FHRztJQUNJLGdCQUFnQixDQUFDLFVBQXVCO1FBQzdDLE1BQU0sU0FBUyxHQUFHLElBQUksd0NBQVMsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbkMsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVEOzs7T0FHRztJQUNJ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