Allow syncing external backend assets using Tor

This commit is contained in:
Felipe Knorr Kuhn 2022-03-23 08:11:22 -07:00
parent aaa8945b09
commit 3e2e23417a
No known key found for this signature in database
GPG key ID: 79619B52BB097C1A

View file

@ -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);
} }