[Pkg-privacy-commits] [onionshare] 33/256: Added support for stealth onion services in the GUI version

Ulrike Uhlig ulrike at moszumanska.debian.org
Fri May 26 12:53:07 UTC 2017


This is an automated email from the git hooks/post-receive script.

ulrike pushed a commit to branch master
in repository onionshare.

commit 286573bda576d1fc149e877206aa2360851a30e5
Author: Micah Lee <micah at micahflee.com>
Date:   Thu Dec 22 17:47:05 2016 -0800

    Added support for stealth onion services in the GUI version
---
 onionshare_gui/onionshare_gui.py | 11 +++++++++++
 onionshare_gui/options.py        | 25 ++++++++++++++++++++++++-
 onionshare_gui/server_status.py  | 19 +++++++++++++++++++
 resources/locale/en.json         |  5 ++++-
 4 files changed, 58 insertions(+), 2 deletions(-)

diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py
index a6b8101..db32a95 100644
--- a/onionshare_gui/onionshare_gui.py
+++ b/onionshare_gui/onionshare_gui.py
@@ -91,6 +91,7 @@ class OnionShareGui(QtWidgets.QMainWindow):
         self.stop_server_finished.connect(self.server_status.stop_server_finished)
         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.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)
@@ -154,6 +155,9 @@ class OnionShareGui(QtWidgets.QMainWindow):
         # pick an available local port for the http service to listen on
         self.app.choose_port()
 
+        # disable the stealth option
+        self.options.set_stealth_enabled(False)
+
         # start onionshare http service in new thread
         t = threading.Thread(target=web.start, args=(self.app.port, self.app.stay_open, self.app.transparent_torification))
         t.daemon = True
@@ -240,6 +244,7 @@ class OnionShareGui(QtWidgets.QMainWindow):
             web.stop(self.app.port)
         self.app.cleanup()
         self.filesize_warning.hide()
+        self.options.set_stealth_enabled(True)
         self.stop_server_finished.emit()
 
     @staticmethod
@@ -310,6 +315,12 @@ class OnionShareGui(QtWidgets.QMainWindow):
         """
         self.status_bar.showMessage(strings._('gui_copied_url', True), 2000)
 
+    def copy_hidservauth(self):
+        """
+        When the stealth onion service HidServAuth gets copied to the clipboard, display this in the status bar.
+        """
+        self.status_bar.showMessage(strings._('gui_copied_hidservauth', True), 2000)
+
     def clear_message(self):
         """
         Clear messages from the status bar.
diff --git a/onionshare_gui/options.py b/onionshare_gui/options.py
index 386ea85..74645fc 100644
--- a/onionshare_gui/options.py
+++ b/onionshare_gui/options.py
@@ -21,7 +21,7 @@ from PyQt5 import QtCore, QtWidgets
 
 from onionshare import strings, helpers
 
-class Options(QtWidgets.QHBoxLayout):
+class Options(QtWidgets.QVBoxLayout):
     """
     The extra onionshare options in the GUI.
     """
@@ -40,8 +40,15 @@ class Options(QtWidgets.QHBoxLayout):
         self.close_automatically.setText(strings._("close_on_finish", True))
         self.close_automatically.stateChanged.connect(self.stay_open_changed)
 
+        # stealth
+        self.stealth = QtWidgets.QCheckBox()
+        self.stealth.setCheckState(QtCore.Qt.Unchecked)
+        self.stealth.setText(strings._("create_stealth", True))
+        self.stealth.stateChanged.connect(self.stealth_changed)
+
         # add the widgets
         self.addWidget(self.close_automatically)
+        self.addWidget(self.stealth)
 
     def stay_open_changed(self, state):
         """
@@ -53,3 +60,19 @@ class Options(QtWidgets.QHBoxLayout):
         else:
             self.web.set_stay_open(True)
             self.app.stay_open = True
+
+    def stealth_changed(self, state):
+        """
+        When the 'stealth' checkbox is toggled, let the onionshare app know.
+        """
+        if state == 2:
+            self.app.stealth = True
+        else:
+            self.app.stealth = False
+
+    def set_stealth_enabled(self, enabled):
+        """
+        You cannot toggle stealth after an onion service has started. This method
+        disables and re-enabled the stealth checkbox.
+        """
+        self.stealth.setEnabled(enabled)
diff --git a/onionshare_gui/server_status.py b/onionshare_gui/server_status.py
index ee4c5d3..20c29a0 100644
--- a/onionshare_gui/server_status.py
+++ b/onionshare_gui/server_status.py
@@ -29,6 +29,7 @@ class ServerStatus(QtWidgets.QVBoxLayout):
     server_started = QtCore.pyqtSignal()
     server_stopped = QtCore.pyqtSignal()
     url_copied = QtCore.pyqtSignal()
+    hidservauth_copied = QtCore.pyqtSignal()
 
     STATUS_STOPPED = 0
     STATUS_WORKING = 1
@@ -63,9 +64,12 @@ class ServerStatus(QtWidgets.QVBoxLayout):
         self.url_label.setAlignment(QtCore.Qt.AlignCenter)
         self.copy_url_button = QtWidgets.QPushButton(strings._('gui_copy_url', True))
         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)
         url_layout = QtWidgets.QHBoxLayout()
         url_layout.addWidget(self.url_label)
         url_layout.addWidget(self.copy_url_button)
+        url_layout.addWidget(self.copy_hidservauth_button)
 
         # add the widgets
         self.addLayout(server_layout)
@@ -91,12 +95,18 @@ class ServerStatus(QtWidgets.QVBoxLayout):
             self.url_label.show()
             self.copy_url_button.show()
 
+            if self.app.stealth:
+                self.copy_hidservauth_button.show()
+            else:
+                self.copy_hidservauth_button.hide()
+
             # resize parent widget
             p = self.parentWidget()
             p.resize(p.sizeHint())
         else:
             self.url_label.hide()
             self.copy_url_button.hide()
+            self.copy_hidservauth_button.hide()
 
         # button
         if self.file_selection.get_num_files() == 0:
@@ -163,3 +173,12 @@ class ServerStatus(QtWidgets.QVBoxLayout):
         clipboard.setText(url)
 
         self.url_copied.emit()
+
+    def copy_hidservauth(self):
+        """
+        Copy the HidServAuth line to the clipboard.
+        """
+        clipboard = self.qtapp.clipboard()
+        clipboard.setText(self.app.auth_string)
+
+        self.hidservauth_copied.emit()
diff --git a/resources/locale/en.json b/resources/locale/en.json
index 1fc1e7a..41a398a 100644
--- a/resources/locale/en.json
+++ b/resources/locale/en.json
@@ -35,9 +35,11 @@
     "gui_start_server": "Start Sharing",
     "gui_stop_server": "Stop Sharing",
     "gui_copy_url": "Copy URL",
+    "gui_copy_hidservauth": "Copy HidServAuth",
     "gui_downloads": "Downloads:",
     "gui_canceled": "Canceled",
     "gui_copied_url": "Copied URL to clipboard",
+    "gui_copied_hidservauth": "Copied HidServAuth line to clipboard",
     "gui_starting_server1": "Starting Tor onion service...",
     "gui_starting_server2": "Crunching files...",
     "gui_starting_server3": "Waiting for Tor onion service...",
@@ -54,5 +56,6 @@
     "gui_quit_warning_dont_quit": "Don't Quit",
     "error_rate_limit": "An attacker might be trying to guess your URL. To prevent this, OnionShare has automatically stopped the server. To share the files you must start it again and share the new URL.",
     "zip_progress_bar_format": "Crunching files: %p%",
-    "error_stealth_not_supported": "Your versions of tor or stem are too old. You need to upgrade them to create stealth onion services."
+    "error_stealth_not_supported": "Your versions of tor or stem are too old. You need to upgrade them to create stealth onion services.",
+    "create_stealth": "Create stealth onion service (advanced)"
 }

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-privacy/packages/onionshare.git



More information about the Pkg-privacy-commits mailing list