From e90908c5b072a0b945a89aba62615b4a1033b406 Mon Sep 17 00:00:00 2001 From: Miguel Jacq Date: Sat, 13 Jan 2018 20:58:24 +1100 Subject: [PATCH] Move the saving of private key into the SettingsDialog and Onion objects entirely (no QPushButton to save it) --- onionshare/onion.py | 17 +++++++++++------ onionshare/onionshare.py | 3 --- onionshare/settings.py | 5 ++++- onionshare_gui/onionshare_gui.py | 8 -------- onionshare_gui/server_status.py | 23 ++--------------------- onionshare_gui/settings_dialog.py | 5 +++-- share/locale/en.json | 4 +--- 7 files changed, 21 insertions(+), 44 deletions(-) diff --git a/onionshare/onion.py b/onionshare/onion.py index 862266e7..3e30761a 100644 --- a/onionshare/onion.py +++ b/onionshare/onion.py @@ -423,10 +423,9 @@ class Onion(object): onion_host = self.service_id + '.onion' # A new private key was generated and is in the Control port response. - if not self.settings.get('private_key'): - self.private_key = res.private_key - else: - self.private_key = '' + if self.settings.get('save_private_key'): + if not self.settings.get('private_key'): + self.settings.set('private_key', res.private_key) if self.stealth: # Similar to the PrivateKey, the Control port only returns the ClientAuth @@ -434,12 +433,18 @@ class Onion(object): # in the first place. # If we sent the basic_auth (due to a saved hidservauth_string in the settings), # there is no response here, so use the saved value from settings. - if self.settings.get('hidservauth_string'): - self.auth_string = self.settings.get('hidservauth_string') + if self.settings.get('save_private_key'): + if self.settings.get('hidservauth_string'): + self.auth_string = self.settings.get('hidservauth_string') + else: + auth_cookie = list(res.client_auth.values())[0] + self.auth_string = 'HidServAuth {} {}'.format(onion_host, auth_cookie) + self.settings.set('hidservauth_string', self.auth_string) else: auth_cookie = list(res.client_auth.values())[0] self.auth_string = 'HidServAuth {} {}'.format(onion_host, auth_cookie) + self.settings.save() return onion_host def cleanup(self, stop_tor=True): diff --git a/onionshare/onionshare.py b/onionshare/onionshare.py index ff5f33fb..85bfaf22 100644 --- a/onionshare/onionshare.py +++ b/onionshare/onionshare.py @@ -78,9 +78,6 @@ class OnionShare(object): self.onion_host = self.onion.start_onion_service(self.port) - if self.onion.private_key: - self.private_key = self.onion.private_key - if self.stealth: self.auth_string = self.onion.auth_string diff --git a/onionshare/settings.py b/onionshare/settings.py index 408c8bdc..e87638f1 100644 --- a/onionshare/settings.py +++ b/onionshare/settings.py @@ -60,7 +60,10 @@ class Settings(object): 'systray_notifications': True, 'use_stealth': False, 'use_autoupdate': True, - 'autoupdate_timestamp': None + 'autoupdate_timestamp': None, + 'save_private_key': False, + 'private_key': '', + 'hidservauth_string': '' } self._settings = {} self.fill_in_defaults() diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py index 17b4cfc1..18c0f642 100644 --- a/onionshare_gui/onionshare_gui.py +++ b/onionshare_gui/onionshare_gui.py @@ -80,7 +80,6 @@ class OnionShareGui(QtWidgets.QMainWindow): self.file_selection.file_list.files_updated.connect(self.server_status.update) self.server_status.url_copied.connect(self.copy_url) self.server_status.hidservauth_copied.connect(self.copy_hidservauth) - self.server_status.private_key_saved.connect(self.private_key_saved) self.starting_server_step2.connect(self.start_server_step2) self.starting_server_step3.connect(self.start_server_step3) self.starting_server_error.connect(self.start_server_error) @@ -473,13 +472,6 @@ class OnionShareGui(QtWidgets.QMainWindow): common.log('OnionShareGui', 'copy_hidservauth') self.status_bar.showMessage(strings._('gui_copied_hidservauth', True), 2000) - def private_key_saved(self): - """ - When the private key gets saved, display this in the status bar. - """ - common.log('OnionShareGui', 'private_key_saved') - self.status_bar.showMessage(strings._('gui_private_key_saved', True), 2000) - def clear_message(self): """ Clear messages from the status bar. diff --git a/onionshare_gui/server_status.py b/onionshare_gui/server_status.py index 1a5d0807..7e8706b9 100644 --- a/onionshare_gui/server_status.py +++ b/onionshare_gui/server_status.py @@ -32,7 +32,6 @@ class ServerStatus(QtWidgets.QVBoxLayout): server_stopped = QtCore.pyqtSignal() url_copied = QtCore.pyqtSignal() hidservauth_copied = QtCore.pyqtSignal() - private_key_saved = QtCore.pyqtSignal() STATUS_STOPPED = 0 STATUS_WORKING = 1 @@ -90,13 +89,10 @@ class ServerStatus(QtWidgets.QVBoxLayout): self.copy_url_button.clicked.connect(self.copy_url) self.copy_hidservauth_button = QtWidgets.QPushButton(strings._('gui_copy_hidservauth', True)) self.copy_hidservauth_button.clicked.connect(self.copy_hidservauth) - self.save_private_key_button = QtWidgets.QPushButton(strings._('gui_save_private_key', True)) - self.save_private_key_button.clicked.connect(self.save_private_key) url_layout = QtWidgets.QHBoxLayout() url_layout.addWidget(self.url_label) url_layout.addWidget(self.copy_url_button) url_layout.addWidget(self.copy_hidservauth_button) - url_layout.addWidget(self.save_private_key_button) # add the widgets self.addLayout(shutdown_timeout_layout_group) @@ -146,9 +142,8 @@ class ServerStatus(QtWidgets.QVBoxLayout): self.url_label.setText('http://{0:s}/{1:s}'.format(self.app.onion_host, self.web.slug)) self.url_label.show() self.copy_url_button.show() - if not self.settings.get('private_key'): - self.save_private_key_button.show() - self.save_private_key_button.setEnabled(True) + if self.settings.get('save_private_key'): + common.log('ServerStatus', 'update', '@TODO need to show a "persistent URL in use" label') if self.app.stealth: self.copy_hidservauth_button.show() @@ -162,7 +157,6 @@ class ServerStatus(QtWidgets.QVBoxLayout): self.url_label.hide() self.copy_url_button.hide() self.copy_hidservauth_button.hide() - self.save_private_key_button.hide() # button if self.file_selection.get_num_files() == 0: @@ -259,16 +253,3 @@ class ServerStatus(QtWidgets.QVBoxLayout): clipboard.setText(self.app.auth_string) self.hidservauth_copied.emit() - - def save_private_key(self): - """ - Save the Onion private key to settings, so the Onion URL can be re-used. - """ - self.save_private_key_button.setEnabled(False) - self.settings.set('private_key', self.app.private_key) - if self.app.stealth: - self.settings.set('hidservauth_string', self.app.auth_string) - self.settings.save() - self.settings.load() - - self.private_key_saved.emit() diff --git a/onionshare_gui/settings_dialog.py b/onionshare_gui/settings_dialog.py index 3de3ef85..2aaaab47 100644 --- a/onionshare_gui/settings_dialog.py +++ b/onionshare_gui/settings_dialog.py @@ -291,12 +291,11 @@ class SettingsDialog(QtWidgets.QDialog): else: self.systray_notifications_checkbox.setCheckState(QtCore.Qt.Unchecked) - save_private_key = self.old_settings.get('private_key') + save_private_key = self.old_settings.get('save_private_key') if save_private_key: self.save_private_key_checkbox.setCheckState(QtCore.Qt.Checked) else: self.save_private_key_checkbox.setCheckState(QtCore.Qt.Unchecked) - self.save_private_key_checkbox.hide() use_stealth = self.old_settings.get('use_stealth') if use_stealth: @@ -565,9 +564,11 @@ class SettingsDialog(QtWidgets.QDialog): settings.set('close_after_first_download', self.close_after_first_download_checkbox.isChecked()) settings.set('systray_notifications', self.systray_notifications_checkbox.isChecked()) if self.save_private_key_checkbox.isChecked(): + settings.set('save_private_key', True) settings.set('private_key', self.old_settings.get('private_key')) settings.set('hidservauth_string', self.old_settings.get('hidservauth_string')) else: + settings.set('save_private_key', False) settings.set('private_key', '') # Also unset the HidServAuth if we are removing our reusable private key settings.set('hidservauth_string', '') diff --git a/share/locale/en.json b/share/locale/en.json index 2ec21580..ae9da805 100644 --- a/share/locale/en.json +++ b/share/locale/en.json @@ -46,7 +46,6 @@ "gui_canceled": "Canceled", "gui_copied_url": "Copied URL to clipboard", "gui_copied_hidservauth": "Copied HidServAuth line to clipboard", - "gui_private_key_saved": "Private key saved to settings", "gui_starting_server1": "Starting Tor onion service...", "gui_starting_server2": "Crunching files...", "gui_please_wait": "Please wait...", @@ -124,6 +123,5 @@ "gui_server_started_after_timeout": "The server started after your chosen auto-timeout.\nPlease start a new share.", "gui_server_timeout_expired": "The chosen timeout has already expired.\nPlease update the timeout and then you may start sharing.", "share_via_onionshare": "Share via OnionShare", - "gui_save_private_key": "Save private key", - "gui_save_private_key_checkbox": "Should the private key be saved for re-use?\nThis makes the Onion share URL persistent.\nUnchecking will remove the private key from settings." + "gui_save_private_key_checkbox": "Use a persistent URL\n(unchecking will delete any saved URL)" }