mirror of
https://github.com/mempool/mempool.git
synced 2025-02-24 06:47:52 +01:00
Allow syncing external backend assets using Tor
This commit is contained in:
parent
aaa8945b09
commit
3e2e23417a
1 changed files with 39 additions and 7 deletions
|
@ -1,8 +1,8 @@
|
||||||
import axios from 'axios';
|
import axios, { AxiosResponse } from 'axios';
|
||||||
import * as fs from 'fs';
|
import * as fs from 'fs';
|
||||||
const fsPromises = fs.promises;
|
|
||||||
import config from './config';
|
import config from './config';
|
||||||
import logger from './logger';
|
import logger from './logger';
|
||||||
|
import { SocksProxyAgent } from 'socks-proxy-agent';
|
||||||
|
|
||||||
const PATH = './';
|
const PATH = './';
|
||||||
|
|
||||||
|
@ -17,12 +17,44 @@ class SyncAssets {
|
||||||
|
|
||||||
private async downloadFile(url: string) {
|
private async downloadFile(url: string) {
|
||||||
const fileName = url.split('/').slice(-1)[0];
|
const fileName = url.split('/').slice(-1)[0];
|
||||||
logger.info(`Downloading external asset: ${fileName}...`);
|
|
||||||
try {
|
try {
|
||||||
const response = await axios.get(url, {
|
if (config.SOCKS5PROXY.ENABLED) {
|
||||||
responseType: 'stream', timeout: 30000
|
let socksOptions: any = {
|
||||||
});
|
agentOptions: {
|
||||||
await fsPromises.writeFile(PATH + fileName, response.data);
|
keepAlive: true,
|
||||||
|
},
|
||||||
|
host: config.SOCKS5PROXY.HOST,
|
||||||
|
port: config.SOCKS5PROXY.PORT
|
||||||
|
};
|
||||||
|
|
||||||
|
if (config.SOCKS5PROXY.USERNAME && config.SOCKS5PROXY.PASSWORD) {
|
||||||
|
socksOptions.username = config.SOCKS5PROXY.USERNAME;
|
||||||
|
socksOptions.password = config.SOCKS5PROXY.PASSWORD;
|
||||||
|
}
|
||||||
|
|
||||||
|
const agent = new SocksProxyAgent(socksOptions);
|
||||||
|
|
||||||
|
logger.info(`Downloading external asset ${fileName} over the Tor network...`);
|
||||||
|
await axios.get(url, {
|
||||||
|
httpAgent: agent,
|
||||||
|
httpsAgent: agent,
|
||||||
|
responseType: 'stream',
|
||||||
|
timeout: 30000
|
||||||
|
}).then(function (response) {
|
||||||
|
response.data.pipe(fs.createWriteStream(PATH + fileName));
|
||||||
|
logger.info(`External asset ${fileName} saved to ${PATH + fileName}`);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
logger.info(`Downloading external asset ${fileName} over clearnet...`);
|
||||||
|
await axios.get(url, {
|
||||||
|
responseType: 'stream',
|
||||||
|
timeout: 30000
|
||||||
|
}).then(function (response) {
|
||||||
|
response.data.pipe(fs.createWriteStream(PATH + fileName));
|
||||||
|
logger.info(`External asset ${fileName} saved to ${PATH + fileName}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
} catch (e: any) {
|
} catch (e: any) {
|
||||||
throw new Error(`Failed to download external asset. ` + e);
|
throw new Error(`Failed to download external asset. ` + e);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue