From 942f297428240466866e71a9c93aaee0b85689b5 Mon Sep 17 00:00:00 2001 From: Micah Lee Date: Fri, 3 Sep 2021 14:25:11 -0700 Subject: Reveal/hide private key --- desktop/src/onionshare/resources/locale/en.json | 4 +- desktop/src/onionshare/tab/mode/__init__.py | 8 ++-- desktop/src/onionshare/tab/server_status.py | 58 +++++++++++++++++-------- 3 files changed, 47 insertions(+), 23 deletions(-) diff --git a/desktop/src/onionshare/resources/locale/en.json b/desktop/src/onionshare/resources/locale/en.json index 954ff51f..03694947 100644 --- a/desktop/src/onionshare/resources/locale/en.json +++ b/desktop/src/onionshare/resources/locale/en.json @@ -34,6 +34,8 @@ "gui_qr_code_dialog_title": "OnionShare QR Code", "gui_qr_label_url_title": "OnionShare Address", "gui_qr_label_auth_string_title": "Private Key", + "gui_reveal": "Reveal", + "gui_hide": "Hide", "gui_waiting_to_start": "Scheduled to start in {}. Click to cancel.", "gui_please_wait_no_button": "Starting…", "gui_please_wait": "Starting… Click to cancel.", @@ -214,4 +216,4 @@ "error_port_not_available": "OnionShare port not available", "history_receive_read_message_button": "Read Message", "error_tor_protocol_error": "There was an error with Tor: {}" -} +} \ No newline at end of file diff --git a/desktop/src/onionshare/tab/mode/__init__.py b/desktop/src/onionshare/tab/mode/__init__.py index 1e7121bb..d4f2c23a 100644 --- a/desktop/src/onionshare/tab/mode/__init__.py +++ b/desktop/src/onionshare/tab/mode/__init__.py @@ -252,11 +252,9 @@ class Mode(QtWidgets.QWidget): not self.server_status.local_only and not self.app.onion.supports_stealth and not self.settings.get("general", "public") - ): - self.stop_server() - self.start_server_error( - strings._("gui_server_doesnt_support_stealth") - ) + ): + self.stop_server() + self.start_server_error(strings._("gui_server_doesnt_support_stealth")) else: self.common.log("Mode", "start_server", "Starting an onion thread") self.obtain_onion_early = obtain_onion_early diff --git a/desktop/src/onionshare/tab/server_status.py b/desktop/src/onionshare/tab/server_status.py index 2fc816a8..115acfd5 100644 --- a/desktop/src/onionshare/tab/server_status.py +++ b/desktop/src/onionshare/tab/server_status.py @@ -85,7 +85,6 @@ class ServerStatus(QtWidgets.QWidget): # URL sharing instructions, above the URL and Copy Address/QR Code buttons self.url_instructions = QtWidgets.QLabel() self.url_instructions.setWordWrap(True) - self.url_instructions.setMinimumHeight(50) # The URL label itself self.url = QtWidgets.QLabel() @@ -116,14 +115,11 @@ class ServerStatus(QtWidgets.QWidget): self.common.gui.css["server_status_url_buttons"] ) - # Client Auth sharing instructions, above the + # Client Auth sharing instructions, above the # Copy Private Key/QR Code buttons self.client_auth_instructions = QtWidgets.QLabel() self.client_auth_instructions.setWordWrap(True) - self.client_auth_instructions.setMinimumHeight(50) - self.client_auth_instructions.setText( - strings._("gui_client_auth_instructions") - ) + self.client_auth_instructions.setText(strings._("gui_client_auth_instructions")) # The private key itself self.private_key = QtWidgets.QLabel() @@ -131,9 +127,8 @@ class ServerStatus(QtWidgets.QWidget): self.private_key.setWordWrap(True) self.private_key.setMinimumSize(self.private_key.sizeHint()) self.private_key.setStyleSheet(self.common.gui.css["server_status_url"]) - self.private_key.setTextInteractionFlags( - Qt.TextSelectableByMouse | Qt.TextSelectableByKeyboard - ) + self.private_key.setTextInteractionFlags(Qt.NoTextInteraction) + self.private_key_hidden = True # Copy ClientAuth button self.copy_client_auth_button = QtWidgets.QPushButton( @@ -156,6 +151,16 @@ class ServerStatus(QtWidgets.QWidget): self.common.gui.css["server_status_url_buttons"] ) + # ClientAuth reveal/hide toggle button + self.client_auth_toggle_button = QtWidgets.QPushButton(strings._("gui_reveal")) + self.client_auth_toggle_button.hide() + self.client_auth_toggle_button.clicked.connect( + self.client_auth_toggle_button_clicked + ) + self.client_auth_toggle_button.setStyleSheet( + self.common.gui.css["server_status_url_buttons"] + ) + # URL instructions layout url_buttons_layout = QtWidgets.QHBoxLayout() url_buttons_layout.addWidget(self.copy_url_button) @@ -172,6 +177,7 @@ class ServerStatus(QtWidgets.QWidget): client_auth_buttons_layout = QtWidgets.QHBoxLayout() client_auth_buttons_layout.addWidget(self.copy_client_auth_button) client_auth_buttons_layout.addWidget(self.show_client_auth_qr_code_button) + client_auth_buttons_layout.addWidget(self.client_auth_toggle_button) client_auth_buttons_layout.addStretch() client_auth_layout = QtWidgets.QVBoxLayout() @@ -285,9 +291,7 @@ class ServerStatus(QtWidgets.QWidget): self.url_description.setToolTip(strings._("gui_url_label_stay_open")) if self.settings.get("general", "public"): - self.url_instructions.setText( - strings._("gui_url_instructions_public_mode") - ) + self.url_instructions.setText(strings._("gui_url_instructions_public_mode")) else: self.url_instructions.setText(strings._("gui_url_instructions")) self.url_instructions.show() @@ -303,10 +307,18 @@ class ServerStatus(QtWidgets.QWidget): self.show_client_auth_qr_code_button.hide() else: self.client_auth_instructions.show() - self.private_key.setText(self.app.auth_string) + if self.private_key_hidden: + self.private_key.setText("*" * len(self.app.auth_string)) + self.private_key.setTextInteractionFlags(Qt.NoTextInteraction) + else: + self.private_key.setText(self.app.auth_string) + self.private_key.setTextInteractionFlags( + Qt.TextSelectableByMouse | Qt.TextSelectableByKeyboard + ) self.private_key.show() self.copy_client_auth_button.show() self.show_client_auth_qr_code_button.show() + self.client_auth_toggle_button.show() def update(self): """ @@ -338,6 +350,7 @@ class ServerStatus(QtWidgets.QWidget): self.client_auth_instructions.hide() self.copy_client_auth_button.hide() self.show_client_auth_qr_code_button.hide() + self.client_auth_toggle_button.hide() self.mode_settings_widget.update_ui() @@ -486,9 +499,7 @@ class ServerStatus(QtWidgets.QWidget): Show a QR code of the onion URL. """ self.qr_code_dialog = QRCodeDialog( - self.common, - strings._("gui_qr_label_url_title"), - self.get_url() + self.common, strings._("gui_qr_label_url_title"), self.get_url() ) def show_client_auth_qr_code_button_clicked(self): @@ -498,9 +509,22 @@ class ServerStatus(QtWidgets.QWidget): self.qr_code_dialog = QRCodeDialog( self.common, strings._("gui_qr_label_auth_string_title"), - self.app.auth_string + self.app.auth_string, ) + def client_auth_toggle_button_clicked(self): + """ + ClientAuth reveal/hide toggle button clicked + """ + if self.private_key_hidden: + self.private_key_hidden = False + self.client_auth_toggle_button.setText(strings._("gui_hide")) + else: + self.private_key_hidden = True + self.client_auth_toggle_button.setText(strings._("gui_reveal")) + + self.show_url() + def start_server(self): """ Start the server. -- cgit v1.2.3-54-g00ecf