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/test/ drwxr-xr-x | |
| Viewing file: Select action/file-type: /**
* Module dependencies.
*/
const fs = require('fs');
const net = require('net');
const path = require('path');
const http = require('http');
const https = require('https');
const assert = require('assert');
const setup = require('../');
describe('proxy', function() {
var proxy;
var proxyPort;
var server;
var serverPort;
before(function(done) {
// setup proxy server
proxy = setup(http.createServer());
proxy.listen(function() {
proxyPort = proxy.address().port;
done();
});
});
before(function(done) {
// setup target server
server = http.createServer();
server.listen(function() {
serverPort = server.address().port;
done();
});
});
after(function(done) {
proxy.once('close', function() {
done();
});
proxy.close();
});
after(function(done) {
server.once('close', function() {
done();
});
server.close();
});
it('should proxy HTTP GET requests', function(done) {
var gotData = false;
var gotRequest = false;
var host = '127.0.0.1:' + serverPort;
server.once('request', function(req, res) {
gotRequest = true;
// ensure headers are being proxied
assert(req.headers['user-agent'] == 'curl/7.30.0');
assert(req.headers.host == host);
assert(req.headers.accept == '*/*');
res.end();
});
var socket = net.connect({ port: proxyPort });
socket.once('close', function() {
assert(gotData);
assert(gotRequest);
done();
});
socket.once('connect', function() {
socket.write(
'GET http://' +
host +
'/ HTTP/1.1\r\n' +
'User-Agent: curl/7.30.0\r\n' +
'Host: ' +
host +
'\r\n' +
'Accept: */*\r\n' +
'Proxy-Connection: Keep-Alive\r\n' +
'\r\n'
);
});
socket.setEncoding('utf8');
socket.once('data', function(data) {
assert(0 == data.indexOf('HTTP/1.1 200 OK\r\n'));
gotData = true;
socket.destroy();
});
});
it('should establish connection for CONNECT requests', function(done) {
var gotData = false;
var socket = net.connect({ port: proxyPort });
socket.once('close', function() {
assert(gotData);
done();
});
socket.once('connect', function() {
var host = '127.0.0.1:' + serverPort;
socket.write(
'CONNECT ' +
host +
' HTTP/1.1\r\n' +
'Host: ' +
host +
'\r\n' +
'User-Agent: curl/7.30.0\r\n' +
'Proxy-Connection: Keep-Alive\r\n' +
'\r\n'
);
});
socket.setEncoding('utf8');
socket.once('data', function(data) {
assert(
0 == data.indexOf('HTTP/1.1 200 Connection established\r\n')
);
gotData = true;
socket.destroy();
});
});
describe('authentication', function() {
function clearAuth() {
delete proxy.authenticate;
}
before(clearAuth);
after(clearAuth);
it('should invoke the `server.authenticate()` function when set', function(done) {
var auth = 'Basic Zm9vOmJhcg==';
var called = false;
proxy.authenticate = function(req, fn) {
assert(auth == req.headers['proxy-authorization']);
socket.destroy();
called = true;
};
var socket = net.connect({ port: proxyPort });
socket.once('close', function() {
assert(called);
done();
});
socket.once('connect', function() {
socket.write(
'GET / HTTP/1.1\r\n' +
'Proxy-Authorization: ' +
auth +
'\r\n' +
'\r\n'
);
});
});
it('should provide the HTTP client with a 407 response status code', function(done) {
proxy.authenticate = function(req, fn) {
// reject everything
fn(null, false);
};
var gotData = false;
var socket = net.connect({ port: proxyPort });
socket.once('close', function() {
assert(gotData);
done();
});
socket.once('connect', function() {
socket.write('GET / HTTP/1.1\r\n\r\n');
});
socket.setEncoding('utf8');
socket.once('data', function(data) {
assert(0 == data.indexOf('HTTP/1.1 407'));
gotData = true;
socket.destroy();
});
});
it("should close the socket after a CONNECT request's 407 response status code", function(done) {
proxy.authenticate = function(req, fn) {
// reject everything
fn(null, false);
};
var gotData = false;
var socket = net.connect({ port: proxyPort });
socket.once('close', function() {
assert(gotData);
done();
});
socket.once('connect', function() {
socket.write('CONNECT 127.0.0.1:80 HTTP/1.1\r\n\r\n');
});
socket.setEncoding('utf8');
socket.once('data', function(data) {
assert(0 == data.indexOf('HTTP/1.1 407'));
gotData = true;
});
});
});
});
|
:: Command execute :: | |
--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0048 ]-- |