Software: Apache/2.4.41 (Ubuntu). PHP/8.0.30 uname -a: Linux apirnd 5.4.0-204-generic #224-Ubuntu SMP Thu Dec 5 13:38:28 UTC 2024 x86_64 uid=33(www-data) gid=33(www-data) groups=33(www-data) Safe-mode: OFF (not secure) /var/www/html/node-red/node_modules/proxy/bin/ drwxr-xr-x | |
| Viewing file: Select action/file-type: #!/usr/bin/env node
process.title = 'proxy';
/**
* Module dependencies.
*/
const args = require('args');
const pkg = require('../package');
args.option(
'port',
'Port number to the proxy server should bind to',
3128,
parseInt
)
.option(
'authenticate',
'"authenticate" command to run when the "Proxy-Authorization" header is sent',
'',
String
)
.option(
'local-address',
'IP address of the network interface to send the outgoing requests through',
'',
String
);
const flags = args.parse(process.argv, { name: pkg.name });
const { port, authenticate } = flags;
const http = require('http');
const setup = require('../');
const debug = require('debug')('proxy');
const spawn = require('child_process').spawn;
const basicAuthParser = require('basic-auth-parser');
/**
* Setup the HTTP "proxy server" instance.
*/
const proxy = http.createServer();
setup(proxy);
/**
* Outbound proxy requests will use `agent: false`.
*/
debug("setting outbound proxy request's `agent` to `false`");
proxy.agent = false;
/**
* Proxy outgoing request localAddress parameter
*/
if (flags.localAddress) {
proxy.localAddress = flags.localAddress;
}
/**
* Proxy authenticate function.
*/
if (authenticate) {
debug('setting `authenticate()` function for: "%s"', authenticate);
proxy.authenticate = function(req, fn) {
debug('authenticate(): "%s"', authenticate);
// parse the "Proxy-Authorization" header
var auth = req.headers['proxy-authorization'];
if (!auth) {
// optimization: don't invoke the child process if no
// "Proxy-Authorization" header was given
return fn(null, false);
}
var parsed = basicAuthParser(auth);
debug('parsed "Proxy-Authorization": %j', parsed);
// spawn a child process with the user-specified "authenticate" command
var i;
var env = {};
for (i in process.env) {
// inherit parent env variables
env[i] = process.env[i];
}
// add "auth" related ENV variables
for (i in parsed) {
env['PROXY_AUTH_' + i.toUpperCase()] = parsed[i];
}
var opts = {};
opts.stdio = ['ignore', 1, 2];
opts.env = env;
var args = ['-c', authenticate];
// TODO: add Windows support (use `cross-spawn`?)
var child = spawn('/bin/sh', args, opts);
function onerror(err) {
child.removeListener('exit', onexit);
fn(err);
}
function onexit(code, signal) {
debug(
'authentication child process "exit" event: %s %s',
code,
signal
);
child.removeListener('error', onerror);
fn(null, 0 == code);
}
child.once('error', onerror);
child.once('exit', onexit);
};
}
/**
* Bind to port.
*/
proxy.listen(port, function() {
console.log(
'HTTP(s) proxy server listening on port %d',
this.address().port
);
});
|
:: Command execute :: | |
--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.005 ]-- |