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 
			
		
		
		
	- Added a script to install every single plugin, used in development and debugging - Improved certbot plugin install commands - Adjusted some version for plugins to install properly - It's noted that some plugins require deps that do not match other plugins, however these use cases should be extremely rare
		
			
				
	
	
		
			107 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			2.3 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;
 | 
						|
const error      = require('./error');
 | 
						|
 | 
						|
module.exports = {
 | 
						|
 | 
						|
	exec: async function(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
 | 
						|
	 * @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;
 | 
						|
	}
 | 
						|
};
 |