You've already forked nginx-proxy-manager
							
							
				mirror of
				https://github.com/NginxProxyManager/nginx-proxy-manager.git
				synced 2025-11-04 04:11:42 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			102 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const _          = require('lodash');
 | 
						|
const exec       = require('child_process').exec;
 | 
						|
const execFile   = require('child_process').execFile;
 | 
						|
const { Liquid } = require('liquidjs');
 | 
						|
const logger     = require('../logger').global;
 | 
						|
 | 
						|
module.exports = {
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @param   {String} cmd
 | 
						|
	 * @returns {Promise}
 | 
						|
	 */
 | 
						|
	exec: function (cmd) {
 | 
						|
		return new Promise((resolve, reject) => {
 | 
						|
			exec(cmd, function (err, stdout, /*stderr*/) {
 | 
						|
				if (err && typeof err === 'object') {
 | 
						|
					reject(err);
 | 
						|
				} else {
 | 
						|
					resolve(stdout.trim());
 | 
						|
				}
 | 
						|
			});
 | 
						|
		});
 | 
						|
	},
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @param   {String} cmd
 | 
						|
	 * @param   {Array}  args
 | 
						|
	 * @returns {Promise}
 | 
						|
	 */
 | 
						|
	execFile: function (cmd, args) {
 | 
						|
		logger.debug('CMD: ' + cmd + ' ' + (args ? args.join(' ') : ''));
 | 
						|
		return new Promise((resolve, reject) => {
 | 
						|
			execFile(cmd, args, function (err, stdout, /*stderr*/) {
 | 
						|
				if (err && typeof err === 'object') {
 | 
						|
					reject(err);
 | 
						|
				} else {
 | 
						|
					resolve(stdout.trim());
 | 
						|
				}
 | 
						|
			});
 | 
						|
		});
 | 
						|
	},
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Used in objection query builder
 | 
						|
	 *
 | 
						|
	 * @param   {Array}  omissions
 | 
						|
	 * @returns {Function}
 | 
						|
	 */
 | 
						|
	omitRow: function (omissions) {
 | 
						|
		/**
 | 
						|
		 * @param   {Object} row
 | 
						|
		 * @returns {Object}
 | 
						|
		 */
 | 
						|
		return (row) => {
 | 
						|
			return _.omit(row, omissions);
 | 
						|
		};
 | 
						|
	},
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Used in objection query builder
 | 
						|
	 *
 | 
						|
	 * @param   {Array}  omissions
 | 
						|
	 * @returns {Function}
 | 
						|
	 */
 | 
						|
	omitRows: function (omissions) {
 | 
						|
		/**
 | 
						|
		 * @param   {Array} rows
 | 
						|
		 * @returns {Object}
 | 
						|
		 */
 | 
						|
		return (rows) => {
 | 
						|
			rows.forEach((row, idx) => {
 | 
						|
				rows[idx] = _.omit(row, omissions);
 | 
						|
			});
 | 
						|
			return rows;
 | 
						|
		};
 | 
						|
	},
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @returns {Object} Liquid render engine
 | 
						|
	 */
 | 
						|
	getRenderEngine: function () {
 | 
						|
		const renderEngine = new Liquid({
 | 
						|
			root: __dirname + '/../templates/'
 | 
						|
		});
 | 
						|
 | 
						|
		/**
 | 
						|
		 * nginxAccessRule expects the object given to have 2 properties:
 | 
						|
		 *
 | 
						|
		 * directive  string
 | 
						|
		 * address    string
 | 
						|
		 */
 | 
						|
		renderEngine.registerFilter('nginxAccessRule', (v) => {
 | 
						|
			if (typeof v.directive !== 'undefined' && typeof v.address !== 'undefined' && v.directive && v.address) {
 | 
						|
				return `${v.directive} ${v.address};`;
 | 
						|
			}
 | 
						|
			return '';
 | 
						|
		});
 | 
						|
 | 
						|
		return renderEngine;
 | 
						|
	}
 | 
						|
};
 |