mirror of
https://github.com/onionshare/onionshare.git
synced 2024-12-27 00:09:50 -05:00
Renamed onionshare.helpers module to onionshare.common
This commit is contained in:
parent
219c4351e1
commit
1591888863
@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
import os, sys, time, argparse, threading
|
import os, sys, time, argparse, threading
|
||||||
|
|
||||||
from . import strings, helpers, web
|
from . import strings, common, web
|
||||||
from .onion import *
|
from .onion import *
|
||||||
from .onionshare import OnionShare
|
from .onionshare import OnionShare
|
||||||
|
|
||||||
@ -30,11 +30,11 @@ def main(cwd=None):
|
|||||||
The main() function implements all of the logic that the command-line version of
|
The main() function implements all of the logic that the command-line version of
|
||||||
onionshare uses.
|
onionshare uses.
|
||||||
"""
|
"""
|
||||||
strings.load_strings(helpers)
|
strings.load_strings(common)
|
||||||
print(strings._('version_string').format(helpers.get_version()))
|
print(strings._('version_string').format(common.get_version()))
|
||||||
|
|
||||||
# OnionShare CLI in OSX needs to change current working directory (#132)
|
# OnionShare CLI in OSX needs to change current working directory (#132)
|
||||||
if helpers.get_platform() == 'Darwin':
|
if common.get_platform() == 'Darwin':
|
||||||
if cwd:
|
if cwd:
|
||||||
os.chdir(cwd)
|
os.chdir(cwd)
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ from stem.connection import MissingPassword, UnreadableCookieFile, Authenticatio
|
|||||||
import os, sys, tempfile, shutil, urllib, platform, subprocess, time, shlex
|
import os, sys, tempfile, shutil, urllib, platform, subprocess, time, shlex
|
||||||
|
|
||||||
from . import socks
|
from . import socks
|
||||||
from . import helpers, strings
|
from . import common, strings
|
||||||
from .settings import Settings
|
from .settings import Settings
|
||||||
|
|
||||||
class TorErrorAutomatic(Exception):
|
class TorErrorAutomatic(Exception):
|
||||||
@ -134,7 +134,7 @@ class Onion(object):
|
|||||||
self.bundle_tor_supported = True
|
self.bundle_tor_supported = True
|
||||||
|
|
||||||
# Set the path of the tor binary, for bundled tor
|
# Set the path of the tor binary, for bundled tor
|
||||||
(self.tor_path, self.tor_geo_ip_file_path, self.tor_geo_ipv6_file_path) = helpers.get_tor_paths()
|
(self.tor_path, self.tor_geo_ip_file_path, self.tor_geo_ipv6_file_path) = common.get_tor_paths()
|
||||||
|
|
||||||
# The tor process
|
# The tor process
|
||||||
self.tor_proc = None
|
self.tor_proc = None
|
||||||
@ -159,19 +159,19 @@ class Onion(object):
|
|||||||
|
|
||||||
if self.system == 'Windows':
|
if self.system == 'Windows':
|
||||||
# Windows needs to use network ports, doesn't support unix sockets
|
# Windows needs to use network ports, doesn't support unix sockets
|
||||||
torrc_template = open(helpers.get_resource_path('torrc_template-windows')).read()
|
torrc_template = open(common.get_resource_path('torrc_template-windows')).read()
|
||||||
self.tor_control_port = helpers.get_available_port(1000, 65535)
|
self.tor_control_port = common.get_available_port(1000, 65535)
|
||||||
self.tor_control_socket = None
|
self.tor_control_socket = None
|
||||||
self.tor_cookie_auth_file = os.path.join(self.tor_data_directory.name, 'cookie')
|
self.tor_cookie_auth_file = os.path.join(self.tor_data_directory.name, 'cookie')
|
||||||
self.tor_socks_port = helpers.get_available_port(1000, 65535)
|
self.tor_socks_port = common.get_available_port(1000, 65535)
|
||||||
self.tor_torrc = os.path.join(self.tor_data_directory.name, 'torrc')
|
self.tor_torrc = os.path.join(self.tor_data_directory.name, 'torrc')
|
||||||
else:
|
else:
|
||||||
# Linux and Mac can use unix sockets
|
# Linux and Mac can use unix sockets
|
||||||
torrc_template = open(helpers.get_resource_path('torrc_template')).read()
|
torrc_template = open(common.get_resource_path('torrc_template')).read()
|
||||||
self.tor_control_port = None
|
self.tor_control_port = None
|
||||||
self.tor_control_socket = os.path.join(self.tor_data_directory.name, 'control_socket')
|
self.tor_control_socket = os.path.join(self.tor_data_directory.name, 'control_socket')
|
||||||
self.tor_cookie_auth_file = os.path.join(self.tor_data_directory.name, 'cookie')
|
self.tor_cookie_auth_file = os.path.join(self.tor_data_directory.name, 'cookie')
|
||||||
self.tor_socks_port = helpers.get_available_port(1000, 65535)
|
self.tor_socks_port = common.get_available_port(1000, 65535)
|
||||||
self.tor_torrc = os.path.join(self.tor_data_directory.name, 'torrc')
|
self.tor_torrc = os.path.join(self.tor_data_directory.name, 'torrc')
|
||||||
|
|
||||||
torrc_template = torrc_template.replace('{{data_directory}}', self.tor_data_directory.name)
|
torrc_template = torrc_template.replace('{{data_directory}}', self.tor_data_directory.name)
|
||||||
|
@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
import os, shutil
|
import os, shutil
|
||||||
|
|
||||||
from . import helpers
|
from . import common
|
||||||
|
|
||||||
class OnionShare(object):
|
class OnionShare(object):
|
||||||
"""
|
"""
|
||||||
@ -53,7 +53,7 @@ class OnionShare(object):
|
|||||||
Start the onionshare onion service.
|
Start the onionshare onion service.
|
||||||
"""
|
"""
|
||||||
# Choose a random port
|
# Choose a random port
|
||||||
self.port = helpers.get_available_port(17600, 17650)
|
self.port = common.get_available_port(17600, 17650)
|
||||||
|
|
||||||
if self.local_only:
|
if self.local_only:
|
||||||
self.onion_host = '127.0.0.1:{0:d}'.format(self.port)
|
self.onion_host = '127.0.0.1:{0:d}'.format(self.port)
|
||||||
|
@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
|
|
||||||
import platform, os, json
|
import platform, os, json
|
||||||
|
|
||||||
from . import strings, helpers
|
from . import strings, common
|
||||||
|
|
||||||
class Settings(object):
|
class Settings(object):
|
||||||
"""
|
"""
|
||||||
@ -34,7 +34,7 @@ class Settings(object):
|
|||||||
|
|
||||||
# These are the default settings. They will get overwritten when loading from disk
|
# These are the default settings. They will get overwritten when loading from disk
|
||||||
self.default_settings = {
|
self.default_settings = {
|
||||||
'version': helpers.get_version(),
|
'version': common.get_version(),
|
||||||
'connection_type': 'bundled',
|
'connection_type': 'bundled',
|
||||||
'control_port_address': '127.0.0.1',
|
'control_port_address': '127.0.0.1',
|
||||||
'control_port_port': 9051,
|
'control_port_port': 9051,
|
||||||
|
@ -21,16 +21,16 @@ import json, locale, os
|
|||||||
|
|
||||||
strings = {}
|
strings = {}
|
||||||
|
|
||||||
def load_strings(helpers, default="en"):
|
def load_strings(common, default="en"):
|
||||||
"""
|
"""
|
||||||
Loads translated strings and fallback to English
|
Loads translated strings and fallback to English
|
||||||
if the translation does not exist.
|
if the translation does not exist.
|
||||||
"""
|
"""
|
||||||
global strings
|
global strings
|
||||||
p = helpers.get_platform()
|
p = common.get_platform()
|
||||||
|
|
||||||
# find locale dir
|
# find locale dir
|
||||||
locale_dir = helpers.get_resource_path('locale')
|
locale_dir = common.get_resource_path('locale')
|
||||||
|
|
||||||
# load all translations
|
# load all translations
|
||||||
translations = {}
|
translations = {}
|
||||||
|
@ -24,7 +24,7 @@ from urllib.request import urlopen
|
|||||||
from flask import Flask, Response, request, render_template_string, abort
|
from flask import Flask, Response, request, render_template_string, abort
|
||||||
from flask import __version__ as flask_version
|
from flask import __version__ as flask_version
|
||||||
|
|
||||||
from . import strings, helpers
|
from . import strings, common
|
||||||
|
|
||||||
|
|
||||||
def _safe_select_jinja_autoescape(self, filename):
|
def _safe_select_jinja_autoescape(self, filename):
|
||||||
@ -64,17 +64,17 @@ def set_file_info(filenames, processed_size_callback=None):
|
|||||||
}
|
}
|
||||||
if os.path.isfile(filename):
|
if os.path.isfile(filename):
|
||||||
info['size'] = os.path.getsize(filename)
|
info['size'] = os.path.getsize(filename)
|
||||||
info['size_human'] = helpers.human_readable_filesize(info['size'])
|
info['size_human'] = common.human_readable_filesize(info['size'])
|
||||||
file_info['files'].append(info)
|
file_info['files'].append(info)
|
||||||
if os.path.isdir(filename):
|
if os.path.isdir(filename):
|
||||||
info['size'] = helpers.dir_size(filename)
|
info['size'] = common.dir_size(filename)
|
||||||
info['size_human'] = helpers.human_readable_filesize(info['size'])
|
info['size_human'] = common.human_readable_filesize(info['size'])
|
||||||
file_info['dirs'].append(info)
|
file_info['dirs'].append(info)
|
||||||
file_info['files'] = sorted(file_info['files'], key=lambda k: k['basename'])
|
file_info['files'] = sorted(file_info['files'], key=lambda k: k['basename'])
|
||||||
file_info['dirs'] = sorted(file_info['dirs'], key=lambda k: k['basename'])
|
file_info['dirs'] = sorted(file_info['dirs'], key=lambda k: k['basename'])
|
||||||
|
|
||||||
# zip up the files and folders
|
# zip up the files and folders
|
||||||
z = helpers.ZipWriter(processed_size_callback=processed_size_callback)
|
z = common.ZipWriter(processed_size_callback=processed_size_callback)
|
||||||
for info in file_info['files']:
|
for info in file_info['files']:
|
||||||
z.add_file(info['filename'])
|
z.add_file(info['filename'])
|
||||||
for info in file_info['dirs']:
|
for info in file_info['dirs']:
|
||||||
@ -108,7 +108,7 @@ def add_request(request_type, path, data=None):
|
|||||||
slug = None
|
slug = None
|
||||||
def generate_slug():
|
def generate_slug():
|
||||||
global slug
|
global slug
|
||||||
slug = helpers.build_slug()
|
slug = common.build_slug()
|
||||||
|
|
||||||
download_count = 0
|
download_count = 0
|
||||||
error404_count = 0
|
error404_count = 0
|
||||||
@ -153,7 +153,7 @@ def check_slug_candidate(slug_candidate, slug_compare = None):
|
|||||||
global slug
|
global slug
|
||||||
if not slug_compare:
|
if not slug_compare:
|
||||||
slug_compare = slug
|
slug_compare = slug
|
||||||
if not helpers.constant_time_compare(slug_compare.encode('ascii'), slug_candidate.encode('ascii')):
|
if not common.constant_time_compare(slug_compare.encode('ascii'), slug_candidate.encode('ascii')):
|
||||||
abort(404)
|
abort(404)
|
||||||
|
|
||||||
|
|
||||||
@ -175,16 +175,16 @@ def index(slug_candidate):
|
|||||||
global stay_open, download_in_progress
|
global stay_open, download_in_progress
|
||||||
deny_download = not stay_open and download_in_progress
|
deny_download = not stay_open and download_in_progress
|
||||||
if deny_download:
|
if deny_download:
|
||||||
return render_template_string(open(helpers.get_resource_path('html/denied.html')).read())
|
return render_template_string(open(common.get_resource_path('html/denied.html')).read())
|
||||||
|
|
||||||
# If download is allowed to continue, serve download page
|
# If download is allowed to continue, serve download page
|
||||||
return render_template_string(
|
return render_template_string(
|
||||||
open(helpers.get_resource_path('html/index.html')).read(),
|
open(common.get_resource_path('html/index.html')).read(),
|
||||||
slug=slug,
|
slug=slug,
|
||||||
file_info=file_info,
|
file_info=file_info,
|
||||||
filename=os.path.basename(zip_filename),
|
filename=os.path.basename(zip_filename),
|
||||||
filesize=zip_filesize,
|
filesize=zip_filesize,
|
||||||
filesize_human=helpers.human_readable_filesize(zip_filesize))
|
filesize_human=common.human_readable_filesize(zip_filesize))
|
||||||
|
|
||||||
# If the client closes the OnionShare window while a download is in progress,
|
# If the client closes the OnionShare window while a download is in progress,
|
||||||
# it should immediately stop serving the file. The client_cancel global is
|
# it should immediately stop serving the file. The client_cancel global is
|
||||||
@ -203,7 +203,7 @@ def download(slug_candidate):
|
|||||||
global stay_open, download_in_progress
|
global stay_open, download_in_progress
|
||||||
deny_download = not stay_open and download_in_progress
|
deny_download = not stay_open and download_in_progress
|
||||||
if deny_download:
|
if deny_download:
|
||||||
return render_template_string(open(helpers.get_resource_path('html/denied.html')).read())
|
return render_template_string(open(common.get_resource_path('html/denied.html')).read())
|
||||||
|
|
||||||
global download_count
|
global download_count
|
||||||
|
|
||||||
@ -255,9 +255,9 @@ def download(slug_candidate):
|
|||||||
percent = (1.0 * downloaded_bytes / zip_filesize) * 100
|
percent = (1.0 * downloaded_bytes / zip_filesize) * 100
|
||||||
|
|
||||||
# only output to stdout if running onionshare in CLI mode, or if using Linux (#203, #304)
|
# only output to stdout if running onionshare in CLI mode, or if using Linux (#203, #304)
|
||||||
if not gui_mode or helpers.get_platform() == 'Linux':
|
if not gui_mode or common.get_platform() == 'Linux':
|
||||||
sys.stdout.write(
|
sys.stdout.write(
|
||||||
"\r{0:s}, {1:.2f}% ".format(helpers.human_readable_filesize(downloaded_bytes), percent))
|
"\r{0:s}, {1:.2f}% ".format(common.human_readable_filesize(downloaded_bytes), percent))
|
||||||
sys.stdout.flush()
|
sys.stdout.flush()
|
||||||
|
|
||||||
add_request(REQUEST_PROGRESS, path, {'id': download_id, 'bytes': downloaded_bytes})
|
add_request(REQUEST_PROGRESS, path, {'id': download_id, 'bytes': downloaded_bytes})
|
||||||
@ -271,7 +271,7 @@ def download(slug_candidate):
|
|||||||
|
|
||||||
fp.close()
|
fp.close()
|
||||||
|
|
||||||
if helpers.get_platform() != 'Darwin':
|
if common.get_platform() != 'Darwin':
|
||||||
sys.stdout.write("\n")
|
sys.stdout.write("\n")
|
||||||
|
|
||||||
# Download is finished
|
# Download is finished
|
||||||
@ -311,10 +311,10 @@ def page_not_found(e):
|
|||||||
force_shutdown()
|
force_shutdown()
|
||||||
print(strings._('error_rate_limit'))
|
print(strings._('error_rate_limit'))
|
||||||
|
|
||||||
return render_template_string(open(helpers.get_resource_path('html/404.html')).read())
|
return render_template_string(open(common.get_resource_path('html/404.html')).read())
|
||||||
|
|
||||||
# shutting down the server only works within the context of flask, so the easiest way to do it is over http
|
# shutting down the server only works within the context of flask, so the easiest way to do it is over http
|
||||||
shutdown_slug = helpers.random_string(16)
|
shutdown_slug = common.random_string(16)
|
||||||
|
|
||||||
|
|
||||||
@app.route("/<slug_candidate>/shutdown")
|
@app.route("/<slug_candidate>/shutdown")
|
||||||
|
@ -21,7 +21,7 @@ from __future__ import division
|
|||||||
import os, sys, platform, argparse
|
import os, sys, platform, argparse
|
||||||
from PyQt5 import QtCore, QtWidgets
|
from PyQt5 import QtCore, QtWidgets
|
||||||
|
|
||||||
from onionshare import strings, helpers, web
|
from onionshare import strings, common, web
|
||||||
from onionshare.onion import Onion
|
from onionshare.onion import Onion
|
||||||
from onionshare.onionshare import OnionShare
|
from onionshare.onionshare import OnionShare
|
||||||
from onionshare.settings import Settings
|
from onionshare.settings import Settings
|
||||||
@ -52,8 +52,8 @@ def main():
|
|||||||
"""
|
"""
|
||||||
The main() function implements all of the logic that the GUI version of onionshare uses.
|
The main() function implements all of the logic that the GUI version of onionshare uses.
|
||||||
"""
|
"""
|
||||||
strings.load_strings(helpers)
|
strings.load_strings(common)
|
||||||
print(strings._('version_string').format(helpers.get_version()))
|
print(strings._('version_string').format(common.get_version()))
|
||||||
|
|
||||||
# Start the Qt app
|
# Start the Qt app
|
||||||
global qtapp
|
global qtapp
|
||||||
|
@ -19,7 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
"""
|
"""
|
||||||
from PyQt5 import QtCore, QtWidgets, QtGui
|
from PyQt5 import QtCore, QtWidgets, QtGui
|
||||||
|
|
||||||
from onionshare import helpers
|
from onionshare import common
|
||||||
|
|
||||||
class Alert(QtWidgets.QMessageBox):
|
class Alert(QtWidgets.QMessageBox):
|
||||||
"""
|
"""
|
||||||
@ -28,7 +28,7 @@ class Alert(QtWidgets.QMessageBox):
|
|||||||
def __init__(self, message, icon=QtWidgets.QMessageBox.NoIcon, buttons=QtWidgets.QMessageBox.Ok, autostart=True):
|
def __init__(self, message, icon=QtWidgets.QMessageBox.NoIcon, buttons=QtWidgets.QMessageBox.Ok, autostart=True):
|
||||||
super(Alert, self).__init__(None)
|
super(Alert, self).__init__(None)
|
||||||
self.setWindowTitle("OnionShare")
|
self.setWindowTitle("OnionShare")
|
||||||
self.setWindowIcon(QtGui.QIcon(helpers.get_resource_path('images/logo.png')))
|
self.setWindowIcon(QtGui.QIcon(common.get_resource_path('images/logo.png')))
|
||||||
self.setText(message)
|
self.setText(message)
|
||||||
self.setIcon(icon)
|
self.setIcon(icon)
|
||||||
self.setStandardButtons(buttons)
|
self.setStandardButtons(buttons)
|
||||||
|
@ -21,7 +21,7 @@ import time
|
|||||||
|
|
||||||
from PyQt5 import QtCore, QtWidgets
|
from PyQt5 import QtCore, QtWidgets
|
||||||
|
|
||||||
from onionshare import strings, helpers
|
from onionshare import strings, common
|
||||||
|
|
||||||
class Download(object):
|
class Download(object):
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ class Download(object):
|
|||||||
self.progress_bar.setValue(downloaded_bytes)
|
self.progress_bar.setValue(downloaded_bytes)
|
||||||
if downloaded_bytes == self.progress_bar.total_bytes:
|
if downloaded_bytes == self.progress_bar.total_bytes:
|
||||||
pb_fmt = strings._('gui_download_progress_complete').format(
|
pb_fmt = strings._('gui_download_progress_complete').format(
|
||||||
helpers.format_seconds(time.time() - self.started))
|
common.format_seconds(time.time() - self.started))
|
||||||
else:
|
else:
|
||||||
elapsed = time.time() - self.started
|
elapsed = time.time() - self.started
|
||||||
if elapsed < 10:
|
if elapsed < 10:
|
||||||
@ -59,10 +59,10 @@ class Download(object):
|
|||||||
# This prevents a "Windows copy dialog"-esque experience at
|
# This prevents a "Windows copy dialog"-esque experience at
|
||||||
# the beginning of the download.
|
# the beginning of the download.
|
||||||
pb_fmt = strings._('gui_download_progress_starting').format(
|
pb_fmt = strings._('gui_download_progress_starting').format(
|
||||||
helpers.human_readable_filesize(downloaded_bytes))
|
common.human_readable_filesize(downloaded_bytes))
|
||||||
else:
|
else:
|
||||||
pb_fmt = strings._('gui_download_progress_eta').format(
|
pb_fmt = strings._('gui_download_progress_eta').format(
|
||||||
helpers.human_readable_filesize(downloaded_bytes),
|
common.human_readable_filesize(downloaded_bytes),
|
||||||
self.estimated_time_remaining)
|
self.estimated_time_remaining)
|
||||||
|
|
||||||
self.progress_bar.setFormat(pb_fmt)
|
self.progress_bar.setFormat(pb_fmt)
|
||||||
@ -72,7 +72,7 @@ class Download(object):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def estimated_time_remaining(self):
|
def estimated_time_remaining(self):
|
||||||
return helpers.estimated_time_remaining(self.downloaded_bytes,
|
return common.estimated_time_remaining(self.downloaded_bytes,
|
||||||
self.total_bytes,
|
self.total_bytes,
|
||||||
self.started)
|
self.started)
|
||||||
|
|
||||||
|
@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
import os
|
import os
|
||||||
from PyQt5 import QtCore, QtWidgets, QtGui
|
from PyQt5 import QtCore, QtWidgets, QtGui
|
||||||
|
|
||||||
from onionshare import strings, helpers
|
from onionshare import strings, common
|
||||||
|
|
||||||
class FileList(QtWidgets.QListWidget):
|
class FileList(QtWidgets.QListWidget):
|
||||||
"""
|
"""
|
||||||
@ -47,7 +47,7 @@ class FileList(QtWidgets.QListWidget):
|
|||||||
self.setAlignment(QtCore.Qt.AlignCenter)
|
self.setAlignment(QtCore.Qt.AlignCenter)
|
||||||
|
|
||||||
if image:
|
if image:
|
||||||
self.setPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(helpers.get_resource_path('images/drop_files.png'))))
|
self.setPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(common.get_resource_path('images/drop_files.png'))))
|
||||||
else:
|
else:
|
||||||
self.setText(strings._('gui_drag_and_drop', True))
|
self.setText(strings._('gui_drag_and_drop', True))
|
||||||
self.setStyleSheet('color: #999999;')
|
self.setStyleSheet('color: #999999;')
|
||||||
@ -137,9 +137,9 @@ class FileList(QtWidgets.QListWidget):
|
|||||||
icon = ip.icon(fileinfo)
|
icon = ip.icon(fileinfo)
|
||||||
|
|
||||||
if os.path.isfile(filename):
|
if os.path.isfile(filename):
|
||||||
size = helpers.human_readable_filesize(fileinfo.size())
|
size = common.human_readable_filesize(fileinfo.size())
|
||||||
else:
|
else:
|
||||||
size = helpers.human_readable_filesize(helpers.dir_size(filename))
|
size = common.human_readable_filesize(common.dir_size(filename))
|
||||||
item_name = '{0:s} ({1:s})'.format(basename, size)
|
item_name = '{0:s} ({1:s})'.format(basename, size)
|
||||||
item = QtWidgets.QListWidgetItem(item_name)
|
item = QtWidgets.QListWidgetItem(item_name)
|
||||||
item.setToolTip(size)
|
item.setToolTip(size)
|
||||||
|
@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
import os, platform, threading, time
|
import os, platform, threading, time
|
||||||
from PyQt5 import QtCore, QtWidgets, QtGui
|
from PyQt5 import QtCore, QtWidgets, QtGui
|
||||||
|
|
||||||
from onionshare import strings, helpers, web
|
from onionshare import strings, common, web
|
||||||
from onionshare.settings import Settings
|
from onionshare.settings import Settings
|
||||||
from onionshare.onion import *
|
from onionshare.onion import *
|
||||||
|
|
||||||
@ -52,7 +52,7 @@ class OnionShareGui(QtWidgets.QMainWindow):
|
|||||||
self.app = app
|
self.app = app
|
||||||
|
|
||||||
self.setWindowTitle('OnionShare')
|
self.setWindowTitle('OnionShare')
|
||||||
self.setWindowIcon(QtGui.QIcon(helpers.get_resource_path('images/logo.png')))
|
self.setWindowIcon(QtGui.QIcon(common.get_resource_path('images/logo.png')))
|
||||||
|
|
||||||
# Load settings
|
# Load settings
|
||||||
self.settings = Settings()
|
self.settings = Settings()
|
||||||
@ -118,7 +118,7 @@ class OnionShareGui(QtWidgets.QMainWindow):
|
|||||||
# Status bar
|
# Status bar
|
||||||
self.status_bar = QtWidgets.QStatusBar()
|
self.status_bar = QtWidgets.QStatusBar()
|
||||||
self.status_bar.setSizeGripEnabled(False)
|
self.status_bar.setSizeGripEnabled(False)
|
||||||
version_label = QtWidgets.QLabel('v{0:s}'.format(helpers.get_version()))
|
version_label = QtWidgets.QLabel('v{0:s}'.format(common.get_version()))
|
||||||
version_label.setStyleSheet('color: #666666; padding: 0 10px;')
|
version_label.setStyleSheet('color: #666666; padding: 0 10px;')
|
||||||
self.status_bar.addPermanentWidget(version_label)
|
self.status_bar.addPermanentWidget(version_label)
|
||||||
self.setStatusBar(self.status_bar)
|
self.setStatusBar(self.status_bar)
|
||||||
@ -280,7 +280,7 @@ class OnionShareGui(QtWidgets.QMainWindow):
|
|||||||
if os.path.isfile(filename):
|
if os.path.isfile(filename):
|
||||||
total_size += os.path.getsize(filename)
|
total_size += os.path.getsize(filename)
|
||||||
if os.path.isdir(filename):
|
if os.path.isdir(filename):
|
||||||
total_size += helpers.dir_size(filename)
|
total_size += common.dir_size(filename)
|
||||||
return total_size
|
return total_size
|
||||||
|
|
||||||
def check_for_requests(self):
|
def check_for_requests(self):
|
||||||
|
@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
import platform
|
import platform
|
||||||
from PyQt5 import QtCore, QtWidgets, QtGui
|
from PyQt5 import QtCore, QtWidgets, QtGui
|
||||||
|
|
||||||
from onionshare import strings, helpers
|
from onionshare import strings, common
|
||||||
|
|
||||||
class ServerStatus(QtWidgets.QVBoxLayout):
|
class ServerStatus(QtWidgets.QVBoxLayout):
|
||||||
"""
|
"""
|
||||||
@ -45,9 +45,9 @@ class ServerStatus(QtWidgets.QVBoxLayout):
|
|||||||
self.file_selection = file_selection
|
self.file_selection = file_selection
|
||||||
|
|
||||||
# server layout
|
# server layout
|
||||||
self.status_image_stopped = QtGui.QImage(helpers.get_resource_path('images/server_stopped.png'))
|
self.status_image_stopped = QtGui.QImage(common.get_resource_path('images/server_stopped.png'))
|
||||||
self.status_image_working = QtGui.QImage(helpers.get_resource_path('images/server_working.png'))
|
self.status_image_working = QtGui.QImage(common.get_resource_path('images/server_working.png'))
|
||||||
self.status_image_started = QtGui.QImage(helpers.get_resource_path('images/server_started.png'))
|
self.status_image_started = QtGui.QImage(common.get_resource_path('images/server_started.png'))
|
||||||
self.status_image_label = QtWidgets.QLabel()
|
self.status_image_label = QtWidgets.QLabel()
|
||||||
self.status_image_label.setFixedWidth(30)
|
self.status_image_label.setFixedWidth(30)
|
||||||
self.server_button = QtWidgets.QPushButton()
|
self.server_button = QtWidgets.QPushButton()
|
||||||
|
@ -20,7 +20,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
from PyQt5 import QtCore, QtWidgets, QtGui
|
from PyQt5 import QtCore, QtWidgets, QtGui
|
||||||
import sys, platform, datetime
|
import sys, platform, datetime
|
||||||
|
|
||||||
from onionshare import strings, helpers
|
from onionshare import strings, common
|
||||||
from onionshare.settings import Settings
|
from onionshare.settings import Settings
|
||||||
from onionshare.onion import *
|
from onionshare.onion import *
|
||||||
|
|
||||||
@ -38,7 +38,7 @@ class SettingsDialog(QtWidgets.QDialog):
|
|||||||
|
|
||||||
self.setModal(True)
|
self.setModal(True)
|
||||||
self.setWindowTitle(strings._('gui_settings_window_title', True))
|
self.setWindowTitle(strings._('gui_settings_window_title', True))
|
||||||
self.setWindowIcon(QtGui.QIcon(helpers.get_resource_path('images/logo.png')))
|
self.setWindowIcon(QtGui.QIcon(common.get_resource_path('images/logo.png')))
|
||||||
|
|
||||||
system = platform.system()
|
system = platform.system()
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
"""
|
"""
|
||||||
from PyQt5 import QtCore, QtWidgets, QtGui
|
from PyQt5 import QtCore, QtWidgets, QtGui
|
||||||
|
|
||||||
from onionshare import strings, helpers
|
from onionshare import strings, common
|
||||||
from onionshare.onion import *
|
from onionshare.onion import *
|
||||||
|
|
||||||
from .alert import Alert
|
from .alert import Alert
|
||||||
@ -36,7 +36,7 @@ class TorConnectionDialog(QtWidgets.QProgressDialog):
|
|||||||
self.onion = onion
|
self.onion = onion
|
||||||
|
|
||||||
self.setWindowTitle("OnionShare")
|
self.setWindowTitle("OnionShare")
|
||||||
self.setWindowIcon(QtGui.QIcon(helpers.get_resource_path('images/logo.png')))
|
self.setWindowIcon(QtGui.QIcon(common.get_resource_path('images/logo.png')))
|
||||||
self.setModal(True)
|
self.setModal(True)
|
||||||
self.setFixedSize(400, 150)
|
self.setFixedSize(400, 150)
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ from onionshare import socks
|
|||||||
from onionshare.settings import Settings
|
from onionshare.settings import Settings
|
||||||
from onionshare.onion import Onion
|
from onionshare.onion import Onion
|
||||||
|
|
||||||
from . import strings, helpers
|
from . import strings, common
|
||||||
|
|
||||||
class UpdateCheckerCheckError(Exception):
|
class UpdateCheckerCheckError(Exception):
|
||||||
"""
|
"""
|
||||||
@ -85,7 +85,7 @@ class UpdateChecker(QtCore.QObject):
|
|||||||
# Download the latest-version file over Tor
|
# Download the latest-version file over Tor
|
||||||
try:
|
try:
|
||||||
# User agent string includes OnionShare version and platform
|
# User agent string includes OnionShare version and platform
|
||||||
user_agent = 'OnionShare {}, {}'.format(helpers.get_version(), platform.system())
|
user_agent = 'OnionShare {}, {}'.format(common.get_version(), platform.system())
|
||||||
|
|
||||||
# If the update is forced, add '?force=1' to the URL, to more
|
# If the update is forced, add '?force=1' to the URL, to more
|
||||||
# accurately measure daily users
|
# accurately measure daily users
|
||||||
@ -124,7 +124,7 @@ class UpdateChecker(QtCore.QObject):
|
|||||||
|
|
||||||
# Do we need to update?
|
# Do we need to update?
|
||||||
update_url = 'https://github.com/micahflee/onionshare/releases/tag/v{}'.format(latest_version)
|
update_url = 'https://github.com/micahflee/onionshare/releases/tag/v{}'.format(latest_version)
|
||||||
installed_version = helpers.get_version()
|
installed_version = common.get_version()
|
||||||
if installed_version < latest_version:
|
if installed_version < latest_version:
|
||||||
self.update_available.emit(update_url, installed_version, latest_version)
|
self.update_available.emit(update_url, installed_version, latest_version)
|
||||||
return
|
return
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
"help_stay_open": "Keep onion service running after download has finished",
|
"help_stay_open": "Keep onion service running after download has finished",
|
||||||
"help_transparent_torification": "My system is transparently torified",
|
"help_transparent_torification": "My system is transparently torified",
|
||||||
"help_stealth": "Create stealth onion service (advanced)",
|
"help_stealth": "Create stealth onion service (advanced)",
|
||||||
"help_debug": "Log errors to disk",
|
"help_debug": "Log application errors to stdout, and log web errors to disk",
|
||||||
"help_filename": "List of files or folders to share",
|
"help_filename": "List of files or folders to share",
|
||||||
"gui_drag_and_drop": "Drag and drop\nfiles here",
|
"gui_drag_and_drop": "Drag and drop\nfiles here",
|
||||||
"gui_add_files": "Add Files",
|
"gui_add_files": "Add Files",
|
||||||
|
@ -17,20 +17,19 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
"""
|
"""
|
||||||
import socket
|
import socket
|
||||||
from onionshare import helpers
|
from onionshare import common
|
||||||
|
|
||||||
|
|
||||||
def test_get_platform_returns_platform_system():
|
def test_get_platform_returns_platform_system():
|
||||||
"""get_platform() returns platform.system() when ONIONSHARE_PLATFORM is not defined"""
|
"""get_platform() returns platform.system() when ONIONSHARE_PLATFORM is not defined"""
|
||||||
p = helpers.platform.system
|
p = common.platform.system
|
||||||
helpers.platform.system = lambda: 'Sega Saturn'
|
common.platform.system = lambda: 'Sega Saturn'
|
||||||
assert helpers.get_platform() == 'Sega Saturn'
|
assert common.get_platform() == 'Sega Saturn'
|
||||||
helpers.platform.system = p
|
common.platform.system = p
|
||||||
|
|
||||||
def test_get_available_port_returns_an_open_port():
|
def test_get_available_port_returns_an_open_port():
|
||||||
"""get_available_port() should return an open port within the range"""
|
"""get_available_port() should return an open port within the range"""
|
||||||
for i in range(100):
|
for i in range(100):
|
||||||
port = helpers.get_available_port(1024, 2048)
|
port = common.get_available_port(1024, 2048)
|
||||||
assert 1024 <= port <= 2048
|
assert 1024 <= port <= 2048
|
||||||
socket.socket().bind(("127.0.0.1", port))
|
socket.socket().bind(("127.0.0.1", port))
|
||||||
|
|
@ -18,14 +18,14 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
"""
|
"""
|
||||||
import locale, os
|
import locale, os
|
||||||
from onionshare import helpers, strings
|
from onionshare import common, strings
|
||||||
|
|
||||||
# Stub get_resource_path so it finds the correct path while running tests
|
# Stub get_resource_path so it finds the correct path while running tests
|
||||||
def get_resource_path(filename):
|
def get_resource_path(filename):
|
||||||
resources_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'share')
|
resources_dir = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'share')
|
||||||
path = os.path.join(resources_dir, filename)
|
path = os.path.join(resources_dir, filename)
|
||||||
return path
|
return path
|
||||||
helpers.get_resource_path = get_resource_path
|
common.get_resource_path = get_resource_path
|
||||||
|
|
||||||
def test_starts_with_empty_strings():
|
def test_starts_with_empty_strings():
|
||||||
"""creates an empty strings dict by default"""
|
"""creates an empty strings dict by default"""
|
||||||
@ -35,12 +35,12 @@ def test_starts_with_empty_strings():
|
|||||||
def test_load_strings_defaults_to_english():
|
def test_load_strings_defaults_to_english():
|
||||||
"""load_strings() loads English by default"""
|
"""load_strings() loads English by default"""
|
||||||
locale.getdefaultlocale = lambda: ('en_US', 'UTF-8')
|
locale.getdefaultlocale = lambda: ('en_US', 'UTF-8')
|
||||||
strings.load_strings(helpers)
|
strings.load_strings(common)
|
||||||
assert strings._('wait_for_hs') == "Waiting for HS to be ready:"
|
assert strings._('wait_for_hs') == "Waiting for HS to be ready:"
|
||||||
|
|
||||||
|
|
||||||
def test_load_strings_loads_other_languages():
|
def test_load_strings_loads_other_languages():
|
||||||
"""load_strings() loads other languages in different locales"""
|
"""load_strings() loads other languages in different locales"""
|
||||||
locale.getdefaultlocale = lambda: ('fr_FR', 'UTF-8')
|
locale.getdefaultlocale = lambda: ('fr_FR', 'UTF-8')
|
||||||
strings.load_strings(helpers, "fr")
|
strings.load_strings(common, "fr")
|
||||||
assert strings._('wait_for_hs') == "En attente du HS:"
|
assert strings._('wait_for_hs') == "En attente du HS:"
|
||||||
|
Loading…
Reference in New Issue
Block a user