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 
			
		
		
		
	
		
			
				
	
	
		
			111 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
const _          = require('lodash');
 | 
						|
const exec       = require('node:child_process').exec;
 | 
						|
const execFile   = require('node:child_process').execFile;
 | 
						|
const { Liquid } = require('liquidjs');
 | 
						|
const logger     = require('../logger').global;
 | 
						|
const error      = require('./error');
 | 
						|
 | 
						|
module.exports = {
 | 
						|
 | 
						|
	exec: async (cmd, options = {}) => {
 | 
						|
		logger.debug('CMD:', cmd);
 | 
						|
 | 
						|
		const { stdout, stderr } = await new Promise((resolve, reject) => {
 | 
						|
			const child = exec(cmd, options, (isError, stdout, stderr) => {
 | 
						|
				if (isError) {
 | 
						|
					reject(new error.CommandError(stderr, isError));
 | 
						|
				} else {
 | 
						|
					resolve({ stdout, stderr });
 | 
						|
				}
 | 
						|
			});
 | 
						|
 | 
						|
			child.on('error', (e) => {
 | 
						|
				reject(new error.CommandError(stderr, 1, e));
 | 
						|
			});
 | 
						|
		});
 | 
						|
		return stdout;
 | 
						|
	},
 | 
						|
 | 
						|
	/**
 | 
						|
	 * @param   {String} cmd
 | 
						|
	 * @param   {Array}  args
 | 
						|
	 * @param   {Object|undefined}  options
 | 
						|
	 * @returns {Promise}
 | 
						|
	 */
 | 
						|
	execFile: (cmd, args, options) => {
 | 
						|
		logger.debug(`CMD: ${cmd} ${args ? args.join(' ') : ''}`);
 | 
						|
		if (typeof options === 'undefined') {
 | 
						|
			options = {};
 | 
						|
		}
 | 
						|
 | 
						|
		return new Promise((resolve, reject) => {
 | 
						|
			execFile(cmd, args, options, (err, stdout, stderr) => {
 | 
						|
				if (err && typeof err === 'object') {
 | 
						|
					reject(new error.CommandError(stderr, 1, err));
 | 
						|
				} else {
 | 
						|
					resolve(stdout.trim());
 | 
						|
				}
 | 
						|
			});
 | 
						|
		});
 | 
						|
	},
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Used in objection query builder
 | 
						|
	 *
 | 
						|
	 * @param   {Array}  omissions
 | 
						|
	 * @returns {Function}
 | 
						|
	 */
 | 
						|
	omitRow: (omissions) => {
 | 
						|
		/**
 | 
						|
		 * @param   {Object} row
 | 
						|
		 * @returns {Object}
 | 
						|
		 */
 | 
						|
		return (row) => {
 | 
						|
			return _.omit(row, omissions);
 | 
						|
		};
 | 
						|
	},
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Used in objection query builder
 | 
						|
	 *
 | 
						|
	 * @param   {Array}  omissions
 | 
						|
	 * @returns {Function}
 | 
						|
	 */
 | 
						|
	omitRows: (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: () => {
 | 
						|
		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;
 | 
						|
	}
 | 
						|
};
 |