Allow syncing external backend assets using Tor
This commit is contained in:
		
							parent
							
								
									aaa8945b09
								
							
						
					
					
						commit
						3e2e23417a
					
				@ -1,8 +1,8 @@
 | 
			
		||||
import axios from 'axios';
 | 
			
		||||
import axios, { AxiosResponse } from 'axios';
 | 
			
		||||
import * as fs from 'fs';
 | 
			
		||||
const fsPromises = fs.promises;
 | 
			
		||||
import config from './config';
 | 
			
		||||
import logger from './logger';
 | 
			
		||||
import { SocksProxyAgent } from 'socks-proxy-agent';
 | 
			
		||||
 | 
			
		||||
const PATH = './';
 | 
			
		||||
 | 
			
		||||
@ -17,12 +17,44 @@ class SyncAssets {
 | 
			
		||||
 | 
			
		||||
  private async downloadFile(url: string) {
 | 
			
		||||
    const fileName = url.split('/').slice(-1)[0];
 | 
			
		||||
    logger.info(`Downloading external asset: ${fileName}...`);
 | 
			
		||||
 | 
			
		||||
    try {
 | 
			
		||||
      const response = await axios.get(url, {
 | 
			
		||||
        responseType: 'stream', timeout: 30000
 | 
			
		||||
      });
 | 
			
		||||
      await fsPromises.writeFile(PATH + fileName, response.data);
 | 
			
		||||
      if (config.SOCKS5PROXY.ENABLED) {
 | 
			
		||||
        let socksOptions: any = {
 | 
			
		||||
          agentOptions: {
 | 
			
		||||
            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) {
 | 
			
		||||
      throw new Error(`Failed to download external asset. ` + e);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user