Remove tor downloading for windows
This commit is contained in:
parent
ac9531eb98
commit
c8fc1ebefa
1 changed files with 11 additions and 60 deletions
|
@ -65,21 +65,17 @@ class TorManager(object):
|
||||||
if not self.connect():
|
if not self.connect():
|
||||||
raise Exception("No connection")
|
raise Exception("No connection")
|
||||||
self.log.debug("Tor proxy port %s check ok" % config.tor_proxy)
|
self.log.debug("Tor proxy port %s check ok" % config.tor_proxy)
|
||||||
except Exception, err:
|
except Exception as err:
|
||||||
if sys.platform.startswith("win"):
|
if sys.platform.startswith("win") and os.path.isfile(self.tor_exe):
|
||||||
self.log.info(u"Starting self-bundled Tor, due to Tor proxy port %s check error: %s" % (config.tor_proxy, err))
|
self.log.info("Starting self-bundled Tor, due to Tor proxy port %s check error: %s" % (config.tor_proxy, err))
|
||||||
else:
|
# Change to self-bundled Tor ports
|
||||||
self.log.info(u"Disabling Tor, because error while accessing Tor proxy at port %s: %s" % (config.tor_proxy, err))
|
self.port = 49051
|
||||||
self.enabled = False
|
self.proxy_port = 49050
|
||||||
# Change to self-bundled Tor ports
|
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", self.proxy_port)
|
||||||
from lib.PySocks import socks
|
|
||||||
self.port = 49051
|
|
||||||
self.proxy_port = 49050
|
|
||||||
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", self.proxy_port)
|
|
||||||
if os.path.isfile(self.tor_exe): # Already, downloaded: sync mode
|
|
||||||
self.startTor()
|
self.startTor()
|
||||||
else: # Not downloaded yet: Async mode
|
else:
|
||||||
gevent.spawn(self.startTor)
|
self.log.info("Disabling Tor, because error while accessing Tor proxy at port %s: %s" % (config.tor_proxy, err))
|
||||||
|
self.enabled = False
|
||||||
|
|
||||||
def setStatus(self, status):
|
def setStatus(self, status):
|
||||||
self.status = status
|
self.status = status
|
||||||
|
@ -89,9 +85,6 @@ class TorManager(object):
|
||||||
def startTor(self):
|
def startTor(self):
|
||||||
if sys.platform.startswith("win"):
|
if sys.platform.startswith("win"):
|
||||||
try:
|
try:
|
||||||
if not os.path.isfile(self.tor_exe):
|
|
||||||
self.downloadTor()
|
|
||||||
|
|
||||||
self.log.info("Starting Tor client %s..." % self.tor_exe)
|
self.log.info("Starting Tor client %s..." % self.tor_exe)
|
||||||
tor_dir = os.path.dirname(self.tor_exe)
|
tor_dir = os.path.dirname(self.tor_exe)
|
||||||
startupinfo = subprocess.STARTUPINFO()
|
startupinfo = subprocess.STARTUPINFO()
|
||||||
|
@ -101,7 +94,7 @@ class TorManager(object):
|
||||||
cmd += " --UseBridges 1"
|
cmd += " --UseBridges 1"
|
||||||
|
|
||||||
self.tor_process = subprocess.Popen(cmd, cwd=tor_dir, close_fds=True, startupinfo=startupinfo)
|
self.tor_process = subprocess.Popen(cmd, cwd=tor_dir, close_fds=True, startupinfo=startupinfo)
|
||||||
for wait in range(1, 10): # Wait for startup
|
for wait in range(1, 3): # Wait for startup
|
||||||
time.sleep(wait * 0.5)
|
time.sleep(wait * 0.5)
|
||||||
self.enabled = True
|
self.enabled = True
|
||||||
if self.connect():
|
if self.connect():
|
||||||
|
@ -128,48 +121,6 @@ class TorManager(object):
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
self.log.error("Error stopping Tor: %s" % err)
|
self.log.error("Error stopping Tor: %s" % err)
|
||||||
|
|
||||||
def downloadTor(self):
|
|
||||||
self.log.info("Downloading Tor...")
|
|
||||||
# Check Tor webpage for link
|
|
||||||
download_page = helper.httpRequest("https://www.torproject.org/download/download.html").read()
|
|
||||||
download_url = re.search('href="(.*?tor.*?win32.*?zip)"', download_page).group(1)
|
|
||||||
if not download_url.startswith("http"):
|
|
||||||
download_url = "https://www.torproject.org/download/" + download_url
|
|
||||||
|
|
||||||
# Download Tor client
|
|
||||||
self.log.info("Downloading %s" % download_url)
|
|
||||||
data = helper.httpRequest(download_url, as_file=True)
|
|
||||||
data_size = data.tell()
|
|
||||||
|
|
||||||
# Handle redirect
|
|
||||||
if data_size < 1024 and "The document has moved" in data.getvalue():
|
|
||||||
download_url = re.search('href="(.*?tor.*?win32.*?zip)"', data.getvalue()).group(1)
|
|
||||||
data = helper.httpRequest(download_url, as_file=True)
|
|
||||||
data_size = data.tell()
|
|
||||||
|
|
||||||
if data_size > 1024:
|
|
||||||
import zipfile
|
|
||||||
zip = zipfile.ZipFile(data)
|
|
||||||
self.log.info("Unpacking Tor")
|
|
||||||
for inner_path in zip.namelist():
|
|
||||||
if ".." in inner_path:
|
|
||||||
continue
|
|
||||||
dest_path = inner_path
|
|
||||||
dest_path = re.sub("^Data/Tor/", "tools/tor/data/", dest_path)
|
|
||||||
dest_path = re.sub("^Data/", "tools/tor/data/", dest_path)
|
|
||||||
dest_path = re.sub("^Tor/", "tools/tor/", dest_path)
|
|
||||||
dest_dir = os.path.dirname(dest_path)
|
|
||||||
if dest_dir and not os.path.isdir(dest_dir):
|
|
||||||
os.makedirs(dest_dir)
|
|
||||||
|
|
||||||
if dest_dir != dest_path.strip("/"):
|
|
||||||
data = zip.read(inner_path)
|
|
||||||
if not os.path.isfile(dest_path):
|
|
||||||
open(dest_path, 'wb').write(data)
|
|
||||||
else:
|
|
||||||
self.log.error("Bad response from server: %s" % data.getvalue())
|
|
||||||
return False
|
|
||||||
|
|
||||||
def connect(self):
|
def connect(self):
|
||||||
if not self.enabled:
|
if not self.enabled:
|
||||||
return False
|
return False
|
||||||
|
|
Loading…
Reference in a new issue