Emergency jank: Route through Tor

This commit is contained in:
Cadence Ember
2020-11-17 18:30:18 +13:00
parent 0e320c16d2
commit 72ee788799
2 changed files with 14 additions and 7 deletions

View File

@@ -2,6 +2,7 @@ const SocksProxyAgent = require("socks-proxy-agent")
const {connect} = require("net");
const constants = require("../constants")
const {request} = require("./request")
const {RequestCache} = require("../cache")
class TorManager {
/**
@@ -12,14 +13,17 @@ class TorManager {
this.tor = tor
this.port = port
this.agent = new SocksProxyAgent("socks5://localhost:"+this.port)
this.circuitManager = new RequestCache()
}
async request(url, test) {
let result = null
while (!result) {
let done = false
while (!done) {
const req = await request(url, {agent: this.agent}, {log: true, statusLine: "TOR"})
try {
result = await test(req)
done = true
} catch (e) {
await this.newCircuit()
}
@@ -28,9 +32,12 @@ class TorManager {
}
newCircuit() {
return new Promise(resolve => {
this.tor.cleanCircuits(() => resolve())
})
return this.circuitManager.getOrFetchPromise("circuit", () => {
console.log(" <> [TOR-CIR] Finding a new circuit...")
return new Promise(resolve => {
this.tor.cleanCircuits(() => resolve())
})
}).then(x => x.result)
}
}