[Pkg-anonymity-tools] [onionshare] 05/57: Don't disable existing hidden services

Ulrike Uhlig u-guest at moszumanska.debian.org
Tue May 19 18:18:53 UTC 2015


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

u-guest pushed a commit to annotated tag 0.7
in repository onionshare.

commit 0302dca77f8e9797c8a31ce3296baa4b2a4e7669
Author: The Dod <unclezzzen at gmail.com>
Date:   Mon Oct 13 11:36:10 2014 +0700

    Don't disable existing hidden services
    
    Still not perfect: can't seem to remove our temporary hs
    (master branch doesn't do that either, but that's no excuse ;) )
    probably something I don't understand re stem and hidden services
---
 onionshare/onionshare.py | 65 ++++++++++++++++++++++++++++++++++--------------
 1 file changed, 46 insertions(+), 19 deletions(-)

diff --git a/onionshare/onionshare.py b/onionshare/onionshare.py
index 5c0acde..c81048b 100644
--- a/onionshare/onionshare.py
+++ b/onionshare/onionshare.py
@@ -28,9 +28,20 @@ import strings, helpers, web
 class NoTor(Exception): pass
 class TailsError(Exception): pass
 
+def hsdic2list(dic):
+    "Convert what we get from get_conf_map to what we need for set_options"
+    return [
+        pair for pairs in [
+            [('HiddenServiceDir',vals[0]),('HiddenServicePort',vals[1])]
+            for vals in zip(dic['HiddenServiceDir'],dic['HiddenServicePort'])
+        ] for pair in pairs
+    ]
+
 class OnionShare(object):
     def __init__(self, debug=False, local_only=False, stay_open=False):
         self.port = None
+        self.controller = None
+        self.original_hs = None
 
         # debug mode
         if debug:
@@ -45,7 +56,13 @@ class OnionShare(object):
         # files and dirs to delete on shutdown
         self.cleanup_filenames = []
 
+
     def cleanup(self):
+        if self.controller:
+            if self.original_hs:
+                # This doesn't seem to remove soon-to-be-stale hs. Why???
+                self.controller.set_options(hsdic2list(self.original_hs))
+            self.controller.close()
         for filename in self.cleanup_filenames:
             if os.path.isfile(filename):
                 os.remove(filename)
@@ -91,23 +108,33 @@ class OnionShare(object):
                 self.cleanup_filenames.append(hidserv_dir)
 
                 # connect to the tor controlport
-                controller = False
+                self.controller = None
                 tor_control_ports = [9051, 9151]
                 for tor_control_port in tor_control_ports:
                     try:
-                        controller = Controller.from_port(port=tor_control_port)
+                        self.controller = Controller.from_port(port=tor_control_port)
                         break
                     except SocketError:
                         pass
-                if not controller:
+                if not self.controller:
                     raise NoTor(strings._("cant_connect_ctrlport").format(tor_control_ports))
                 controller.authenticate()
 
                 # set up hidden service
-                controller.set_options([
-                    ('HiddenServiceDir', hidserv_dir),
-                    ('HiddenServicePort', '80 127.0.0.1:{0}'.format(self.port))
-                ])
+                self.original_hs = self.controller.get_conf_map('HiddenServiceOptions') or {
+                    'HiddenServiceDir': [], 'HiddenServicePort': []
+                }
+                print hsdic2list(self.original_hs)
+                new_hs = self.original_hs.copy()
+                if not hidserv_dir in new_hs['HiddenServiceDir']:
+                    # Unless another instance has opened
+                    # the same persistent_hs_dir already
+                    new_hs['HiddenServiceDir'].append(hidserv_dir)
+                    new_hs['HiddenServicePort'].append(
+                        '80 127.0.0.1:{0}'.format(self.port))
+
+                self.controller.set_options(hsdic2list(new_hs))
+                print self.controller.get_conf_map('HiddenServiceOptions')
 
                 # figure out the .onion hostname
                 hostname_file = '{0}/hostname'.format(hidserv_dir)
@@ -249,18 +276,18 @@ def main():
     t.daemon = True
     t.start()
 
-    # wait for hs
-    ready = app.wait_for_hs()
-    if not ready:
-        sys.exit()
-
-    print strings._("give_this_url")
-    print 'http://{0}/{1}'.format(app.onion_host, web.slug)
-    print ''
-    print strings._("ctrlc_to_stop")
-
-    # wait for app to close
-    try:
+    try: # Trap Ctrl-C
+        # wait for hs
+        ready = app.wait_for_hs()
+        if not ready:
+            sys.exit()
+    
+        print strings._("give_this_url")
+        print 'http://{0}/{1}'.format(app.onion_host, web.slug)
+        print ''
+        print strings._("ctrlc_to_stop")
+    
+        # wait for app to close
         while True:
             time.sleep(0.5)
     except KeyboardInterrupt:

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/collab-maint/onionshare.git



More information about the Pkg-anonymity-tools mailing list