Fixed 267U.pre2
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
import * as http from "node:http";
|
||||
import * as https from "node:https";
|
||||
import net from "node:net";
|
||||
import { HttpProxyAgent, HttpsProxyAgent } from "hpagent";
|
||||
import config from "../config/index.js";
|
||||
import IPCIDR from "ip-cidr";
|
||||
import PrivateIp from "private-ip";
|
||||
function isPrivateIp(ip) {
|
||||
for (const net of config.allowedPrivateNetworks || []){
|
||||
const cidr = new IPCIDR(net);
|
||||
if (cidr.contains(ip)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return PrivateIp(ip);
|
||||
}
|
||||
function checkConnection(socket) {
|
||||
if (socket instanceof net.Socket) {
|
||||
const address = socket.remoteAddress;
|
||||
if (process.env.NODE_ENV === 'production') {
|
||||
if (address && IPCIDR.isValidAddress(address) && isPrivateIp(address)) {
|
||||
socket.destroy(new Error(`Blocked address: ${address}`));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
throw "Tried to check connection for type that isn't net.Socket";
|
||||
}
|
||||
}
|
||||
export class CheckedHttpAgent extends http.Agent {
|
||||
createConnection(options, callback) {
|
||||
const socket = super.createConnection(options, callback ? (err, stream)=>{
|
||||
if (stream) checkConnection(stream);
|
||||
callback(err, stream);
|
||||
} : undefined)?.on('connect', ()=>{
|
||||
socket && checkConnection(socket);
|
||||
});
|
||||
return socket;
|
||||
}
|
||||
}
|
||||
export class CheckedHttpsAgent extends https.Agent {
|
||||
createConnection(options, callback) {
|
||||
const socket = super.createConnection(options, callback ? (err, stream)=>{
|
||||
if (stream) checkConnection(stream);
|
||||
callback(err, stream);
|
||||
} : undefined)?.on('connect', ()=>{
|
||||
socket && checkConnection(socket);
|
||||
});
|
||||
return socket;
|
||||
}
|
||||
}
|
||||
export class CheckedHttpProxyAgent extends HttpProxyAgent {
|
||||
createConnection(options, callback) {
|
||||
const socket = super.createConnection(options, callback ? (err, stream)=>{
|
||||
if (stream) checkConnection(stream);
|
||||
callback(err, stream);
|
||||
} : undefined)?.on('connect', ()=>{
|
||||
socket && checkConnection(socket);
|
||||
});
|
||||
return socket;
|
||||
}
|
||||
}
|
||||
export class CheckedHttpsProxyAgent extends HttpsProxyAgent {
|
||||
createConnection(options, callback) {
|
||||
const socket = super.createConnection(options, callback ? (err, stream)=>{
|
||||
if (stream) checkConnection(stream);
|
||||
callback(err, stream);
|
||||
} : undefined)?.on('connect', ()=>{
|
||||
socket && checkConnection(socket);
|
||||
});
|
||||
return socket;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user