Save the slug when using a persistent private key

This commit is contained in:
Miguel Jacq 2018-01-15 10:01:34 +11:00
parent 448f6af796
commit 3e7d4c64ff
No known key found for this signature in database
GPG Key ID: EEA4341C6D97A0B6
7 changed files with 34 additions and 10 deletions

View File

@ -23,7 +23,7 @@ import os, sys, time, argparse, threading
from . import strings, common, web from . import strings, common, web
from .onion import * from .onion import *
from .onionshare import OnionShare from .onionshare import OnionShare
from .settings import Settings
def main(cwd=None): def main(cwd=None):
""" """
@ -77,6 +77,10 @@ def main(cwd=None):
if not valid: if not valid:
sys.exit() sys.exit()
settings = Settings(config)
settings.load()
# Start the Onion object # Start the Onion object
onion = Onion() onion = Onion()
try: try:
@ -108,7 +112,7 @@ def main(cwd=None):
print('') print('')
# Start OnionShare http service in new thread # Start OnionShare http service in new thread
t = threading.Thread(target=web.start, args=(app.port, app.stay_open)) t = threading.Thread(target=web.start, args=(app.port, app.stay_open, settings.get('slug')))
t.daemon = True t.daemon = True
t.start() t.start()
@ -120,6 +124,12 @@ def main(cwd=None):
if app.shutdown_timeout > 0: if app.shutdown_timeout > 0:
app.shutdown_timer.start() app.shutdown_timer.start()
# Save the web slug if we are using a persistent private key
if settings.get('save_private_key'):
if not settings.get('slug'):
settings.set('slug', web.slug)
settings.save()
if(stealth): if(stealth):
print(strings._("give_this_url_stealth")) print(strings._("give_this_url_stealth"))
print('http://{0:s}/{1:s}'.format(app.onion_host, web.slug)) print('http://{0:s}/{1:s}'.format(app.onion_host, web.slug))

View File

@ -63,6 +63,7 @@ class Settings(object):
'autoupdate_timestamp': None, 'autoupdate_timestamp': None,
'save_private_key': False, 'save_private_key': False,
'private_key': '', 'private_key': '',
'slug': '',
'hidservauth_string': '' 'hidservauth_string': ''
} }
self._settings = {} self._settings = {}

View File

@ -128,8 +128,11 @@ def add_request(request_type, path, data=None):
slug = None slug = None
def generate_slug(): def generate_slug(persistent_slug=''):
global slug global slug
if persistent_slug:
slug = persistent_slug
else:
slug = common.build_slug() slug = common.build_slug()
download_count = 0 download_count = 0
@ -383,11 +386,11 @@ def force_shutdown():
func() func()
def start(port, stay_open=False): def start(port, stay_open=False, persistent_slug=''):
""" """
Start the flask web server. Start the flask web server.
""" """
generate_slug() generate_slug(persistent_slug)
set_stay_open(stay_open) set_stay_open(stay_open)

View File

@ -69,7 +69,7 @@ class OnionShareGui(QtWidgets.QMainWindow):
self.file_selection.file_list.add_file(filename) self.file_selection.file_list.add_file(filename)
# Server status # Server status
self.server_status = ServerStatus(self.qtapp, self.app, web, self.file_selection) self.server_status = ServerStatus(self.qtapp, self.app, web, self.file_selection, self.settings)
self.server_status.server_started.connect(self.file_selection.server_started) self.server_status.server_started.connect(self.file_selection.server_started)
self.server_status.server_started.connect(self.start_server) self.server_status.server_started.connect(self.start_server)
self.server_status.server_stopped.connect(self.file_selection.server_stopped) self.server_status.server_stopped.connect(self.file_selection.server_stopped)
@ -278,7 +278,7 @@ class OnionShareGui(QtWidgets.QMainWindow):
self.app.stay_open = not self.settings.get('close_after_first_download') self.app.stay_open = not self.settings.get('close_after_first_download')
# start onionshare http service in new thread # start onionshare http service in new thread
t = threading.Thread(target=web.start, args=(self.app.port, self.app.stay_open)) t = threading.Thread(target=web.start, args=(self.app.port, self.app.stay_open, self.settings.get('slug')))
t.daemon = True t.daemon = True
t.start() t.start()
# wait for modules in thread to load, preventing a thread-related cx_Freeze crash # wait for modules in thread to load, preventing a thread-related cx_Freeze crash

View File

@ -21,7 +21,7 @@ import platform
from .alert import Alert from .alert import Alert
from PyQt5 import QtCore, QtWidgets, QtGui from PyQt5 import QtCore, QtWidgets, QtGui
from onionshare import strings, common from onionshare import strings, common, settings
class ServerStatus(QtWidgets.QVBoxLayout): class ServerStatus(QtWidgets.QVBoxLayout):
""" """
@ -36,7 +36,7 @@ class ServerStatus(QtWidgets.QVBoxLayout):
STATUS_WORKING = 1 STATUS_WORKING = 1
STATUS_STARTED = 2 STATUS_STARTED = 2
def __init__(self, qtapp, app, web, file_selection): def __init__(self, qtapp, app, web, file_selection, settings):
super(ServerStatus, self).__init__() super(ServerStatus, self).__init__()
self.status = self.STATUS_STOPPED self.status = self.STATUS_STOPPED
@ -45,6 +45,8 @@ class ServerStatus(QtWidgets.QVBoxLayout):
self.web = web self.web = web
self.file_selection = file_selection self.file_selection = file_selection
self.settings = settings
# Helper boolean as this is used in a few places # Helper boolean as this is used in a few places
self.timer_enabled = False self.timer_enabled = False
# Shutdown timeout layout # Shutdown timeout layout
@ -141,6 +143,11 @@ class ServerStatus(QtWidgets.QVBoxLayout):
self.url_label.show() self.url_label.show()
self.copy_url_button.show() self.copy_url_button.show()
if self.settings.get('save_private_key'):
if not self.settings.get('slug'):
self.settings.set('slug', self.web.slug)
self.settings.save()
if self.app.stealth: if self.app.stealth:
self.copy_hidservauth_button.show() self.copy_hidservauth_button.show()
else: else:

View File

@ -570,10 +570,12 @@ class SettingsDialog(QtWidgets.QDialog):
if self.save_private_key_checkbox.isChecked(): if self.save_private_key_checkbox.isChecked():
settings.set('save_private_key', True) settings.set('save_private_key', True)
settings.set('private_key', self.old_settings.get('private_key')) settings.set('private_key', self.old_settings.get('private_key'))
settings.set('slug', self.old_settings.get('slug'))
settings.set('hidservauth_string', self.old_settings.get('hidservauth_string')) settings.set('hidservauth_string', self.old_settings.get('hidservauth_string'))
else: else:
settings.set('save_private_key', False) settings.set('save_private_key', False)
settings.set('private_key', '') settings.set('private_key', '')
settings.set('slug', '')
# Also unset the HidServAuth if we are removing our reusable private key # Also unset the HidServAuth if we are removing our reusable private key
settings.set('hidservauth_string', '') settings.set('hidservauth_string', '')
settings.set('use_stealth', self.stealth_checkbox.isChecked()) settings.set('use_stealth', self.stealth_checkbox.isChecked())

View File

@ -60,6 +60,7 @@ class TestSettings:
'autoupdate_timestamp': None, 'autoupdate_timestamp': None,
'save_private_key': False, 'save_private_key': False,
'private_key': '', 'private_key': '',
'slug': '',
'hidservauth_string': '' 'hidservauth_string': ''
} }