install_tor
This commit is contained in:
parent
bc593b65fd
commit
cda61c5560
1 changed files with 69 additions and 26 deletions
93
oml/tor.py
93
oml/tor.py
|
@ -1,4 +1,5 @@
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
from threading import Thread
|
from threading import Thread
|
||||||
import distutils
|
import distutils
|
||||||
|
@ -43,32 +44,9 @@ DirReqStatistics 0
|
||||||
'''.strip().format(base=settings.config_path))
|
'''.strip().format(base=settings.config_path))
|
||||||
return defaults, torrc
|
return defaults, torrc
|
||||||
|
|
||||||
def get_tor(self):
|
|
||||||
def cmd_exists(cmd):
|
|
||||||
return subprocess.call("type " + cmd, shell=True,
|
|
||||||
stdout=subprocess.PIPE, stderr=subprocess.PIPE) == 0
|
|
||||||
for path in (
|
|
||||||
'/Applications/TorBrowser.app/TorBrowser/Tor/tor',
|
|
||||||
):
|
|
||||||
if os.path.isfile(path) and os.access(path, os.X_OK):
|
|
||||||
return path
|
|
||||||
start = os.path.expanduser('~/.local/share/applications/start-tor-browser.desktop')
|
|
||||||
if os.path.exists(start):
|
|
||||||
with open(start) as fd:
|
|
||||||
e = [line for line in fd.read().split('\n') if line.startswith('Exec')]
|
|
||||||
if e:
|
|
||||||
try:
|
|
||||||
base = os.path.dirname(e[0].split('"')[1])
|
|
||||||
path = os.path.join(base, 'TorBrowser', 'Tor', 'tor')
|
|
||||||
if os.path.isfile(path) and os.access(path, os.X_OK):
|
|
||||||
return path
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
return distutils.spawn.find_executable('tor')
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
defaults, torrc = self.create_torrc()
|
defaults, torrc = self.create_torrc()
|
||||||
tor = self.get_tor()
|
tor = get_tor()
|
||||||
if not tor:
|
if not tor:
|
||||||
self._status.append('No tor binary found. Please install TorBrowser or tor')
|
self._status.append('No tor binary found. Please install TorBrowser or tor')
|
||||||
else:
|
else:
|
||||||
|
@ -203,7 +181,6 @@ class Tor(object):
|
||||||
|
|
||||||
def torbrowser_url():
|
def torbrowser_url():
|
||||||
import re
|
import re
|
||||||
import sys
|
|
||||||
from ox.cache import read_url
|
from ox.cache import read_url
|
||||||
|
|
||||||
base_url = 'https://dist.torproject.org/torbrowser/'
|
base_url = 'https://dist.torproject.org/torbrowser/'
|
||||||
|
@ -211,7 +188,11 @@ def torbrowser_url():
|
||||||
current = sorted(r.findall(read_url(base_url).decode()))[-1]
|
current = sorted(r.findall(read_url(base_url).decode()))[-1]
|
||||||
url = base_url + current
|
url = base_url + current
|
||||||
if sys.platform.startswith('linux'):
|
if sys.platform.startswith('linux'):
|
||||||
|
import platform
|
||||||
|
if platform.architecture()[0] == '64bit':
|
||||||
osname = 'linux64'
|
osname = 'linux64'
|
||||||
|
else:
|
||||||
|
osname = 'linux32'
|
||||||
ext = 'xz'
|
ext = 'xz'
|
||||||
elif sys.platform == 'darwin':
|
elif sys.platform == 'darwin':
|
||||||
osname = 'osx64'
|
osname = 'osx64'
|
||||||
|
@ -226,3 +207,65 @@ def torbrowser_url():
|
||||||
torbrowser = sorted(r.findall(read_url(url).decode()))[-1]
|
torbrowser = sorted(r.findall(read_url(url).decode()))[-1]
|
||||||
url += torbrowser
|
url += torbrowser
|
||||||
return url
|
return url
|
||||||
|
|
||||||
|
def get_tor():
|
||||||
|
if sys.platform == 'darwin':
|
||||||
|
for path in (
|
||||||
|
'/Applications/TorBrowser.app/TorBrowser/Tor/tor',
|
||||||
|
os.path.join(settings.base_dir, 'tor', 'TorBrowser.app/TorBrowser/Tor/tor')
|
||||||
|
):
|
||||||
|
if os.path.isfile(path) and os.access(path, os.X_OK):
|
||||||
|
return path
|
||||||
|
start = os.path.expanduser('~/.local/share/applications/start-tor-browser.desktop')
|
||||||
|
if os.path.exists(start):
|
||||||
|
with open(start) as fd:
|
||||||
|
e = [line for line in fd.read().split('\n') if line.startswith('Exec')]
|
||||||
|
if e:
|
||||||
|
try:
|
||||||
|
base = os.path.dirname(e[0].split('"')[1])
|
||||||
|
path = os.path.join(base, 'TorBrowser', 'Tor', 'tor')
|
||||||
|
if os.path.isfile(path) and os.access(path, os.X_OK):
|
||||||
|
return path
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
return distutils.spawn.find_executable('tor')
|
||||||
|
|
||||||
|
def install_tor():
|
||||||
|
import tarfile
|
||||||
|
import update
|
||||||
|
import shutil
|
||||||
|
# only install if tor can not be found
|
||||||
|
if get_tor():
|
||||||
|
print('found existing tor installation')
|
||||||
|
url = torbrowser_url()
|
||||||
|
target = os.path.join(settings.base_dir, 'tor')
|
||||||
|
if url:
|
||||||
|
print('downloading and installing tor')
|
||||||
|
if sys.platform.startswith('linux'):
|
||||||
|
os.makedirs(target)
|
||||||
|
tar_file = os.path.join(target, os.path.basename(url))
|
||||||
|
update.get(url, tar_file)
|
||||||
|
tar = tarfile.open(tar_file)
|
||||||
|
tar.extractall(target)
|
||||||
|
desktop = os.path.join(target, tar.members[0].path, 'start-tor-browser.desktop')
|
||||||
|
tar.close()
|
||||||
|
subprocess.call([desktop, '--register-app'], cwd=target)
|
||||||
|
os.unlink(tar_file)
|
||||||
|
elif sys.platform == 'darwin':
|
||||||
|
os.makedirs(target)
|
||||||
|
dmg = os.path.join(target, os.path.basename(url))
|
||||||
|
update.get(url, dmg)
|
||||||
|
subprocess.call(['hdiutil', 'mount', dmg])
|
||||||
|
volume = '/Volumes/Tor Browser'
|
||||||
|
name = 'TorBrowser.app'
|
||||||
|
app = os.path.join(volume, name)
|
||||||
|
if os.access('/Applications', os.W_OK):
|
||||||
|
target = os.path.join('/Applications', name)
|
||||||
|
else:
|
||||||
|
os.makedirs(target)
|
||||||
|
target = os.path.join(target, name)
|
||||||
|
if not os.path.exists(target):
|
||||||
|
shutil.copy(app, target)
|
||||||
|
subprocess.call(['hdiutil', 'unmount', volume])
|
||||||
|
else:
|
||||||
|
logger.debug('no way to install TorBrowser on %s so far', sys.platform)
|
||||||
|
|
Loading…
Reference in a new issue