[Pkg-anonymity-tools] [onionshare] 46/140: waits for hidden service before displaying URL. fixes #116
Ulrike Uhlig
u-guest at moszumanska.debian.org
Mon Sep 29 20:33:46 UTC 2014
This is an automated email from the git hooks/post-receive script.
u-guest pushed a commit to branch master
in repository onionshare.
commit 846b10b75558b023fd198fd89e8a0c4d1e3e4a69
Author: Micah Lee <micah at micahflee.com>
Date: Fri Aug 29 14:32:19 2014 -0700
waits for hidden service before displaying URL. fixes #116
---
onionshare/onionshare.py | 41 +++++++++++++++++++++++++++++++++++-----
onionshare/strings.json | 4 ++++
onionshare/web.py | 8 +++++++-
onionshare_gui/onionshare_gui.py | 8 ++------
stdeb.cfg | 2 +-
5 files changed, 50 insertions(+), 13 deletions(-)
diff --git a/onionshare/onionshare.py b/onionshare/onionshare.py
index f9367e4..da1aba0 100644
--- a/onionshare/onionshare.py
+++ b/onionshare/onionshare.py
@@ -1,5 +1,5 @@
# -*- coding: utf-8 -*-
-import os, sys, subprocess, time, argparse, inspect, shutil, socket
+import os, sys, subprocess, time, argparse, inspect, shutil, socks, socket, threading
from stem.control import Controller
from stem import SocketError
@@ -94,6 +94,24 @@ class OnionShare(object):
hostname_file = '{0}/hostname'.format(hidserv_dir)
self.onion_host = open(hostname_file, 'r').read().strip()
+ def wait_for_hs(self):
+ print strings._('wait_for_hs')
+
+ ready = False
+ while not ready:
+ try:
+ sys.stdout.write('{0} '.format(strings._('wait_for_hs_trying')))
+ sys.stdout.flush()
+
+ s = socks.socksocket()
+ s.setproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', 9150)
+ s.connect((self.onion_host, 80))
+ ready = True
+ sys.stdout.write('{0}\n'.format(strings._('wait_for_hs_yup')))
+ except TypeError as e:
+ sys.stdout.write('{0}\n'.format(strings._('wait_for_hs_nope')))
+ sys.stdout.flush()
+
def tails_root():
# if running in Tails and as root, do only the things that require root
if helpers.get_platform() == 'Tails' and helpers.is_root():
@@ -165,17 +183,30 @@ def main():
except TailsError as e:
sys.exit(e.args[0])
- # startup
+ # prepare files to share
web.set_file_info(filenames)
app.cleanup_filenames.append(web.zip_filename)
+
+ # start onionshare service in new thread
+ t = threading.Thread(target=web.start, args=(app.port, app.stay_open))
+ t.daemon = True
+ t.start()
+
+ # wait for hs
+ app.wait_for_hs()
print strings._("give_this_url")
print 'http://{0}/{1}'.format(app.onion_host, web.slug)
print ''
print strings._("ctrlc_to_stop")
- # start the web server
- web.start(app.port, app.stay_open)
- print '\n'
+ # wait for app to close
+ running = True
+ while running:
+ try:
+ time.sleep(0.5)
+ except KeyboardInterrupt:
+ running = False
+ web.stop()
# shutdown
app.cleanup()
diff --git a/onionshare/strings.json b/onionshare/strings.json
index eb5be01..f1c0287 100644
--- a/onionshare/strings.json
+++ b/onionshare/strings.json
@@ -2,6 +2,10 @@
"calculating_sha1": "Calculating SHA1 checksum.",
"connecting_ctrlport": "Connecting to Tor control port to set up hidden service on port {0}.",
"cant_connect_ctrlport": "Cannot connect to Tor control port on port {0}. Is Tor running?",
+ "wait_for_hs": "Waiting for hidden service to be ready:",
+ "wait_for_hs_trying": "Trying...",
+ "wait_for_hs_nope": "Not ready yet.",
+ "wait_for_hs_yup": "Ready!",
"give_this_url": "Give this URL to the person you're sending the file to:",
"ctrlc_to_stop": "Press Ctrl-C to stop server",
"not_a_file": "{0} is not a file.",
diff --git a/onionshare/web.py b/onionshare/web.py
index f8449fd..4a2cef0 100644
--- a/onionshare/web.py
+++ b/onionshare/web.py
@@ -1,4 +1,4 @@
-import Queue, mimetypes, platform, os, sys, zipfile
+import Queue, mimetypes, platform, os, sys, zipfile, urllib2
from flask import Flask, Response, request, render_template_string, abort
import strings, helpers
@@ -187,3 +187,9 @@ def start(port, stay_open=False, gui_mode=False):
set_gui_mode(gui_mode)
app.run(port=port)
+def stop():
+ # to stop flask, load http://127.0.0.1:<port>/<shutdown_slug>/shutdown
+ try:
+ urllib2.urlopen('http://127.0.0.1:{0}/{1}/shutdown'.format(app.port, shutdown_slug)).read()
+ except:
+ pass
diff --git a/onionshare_gui/onionshare_gui.py b/onionshare_gui/onionshare_gui.py
index 578746f..f33d89d 100644
--- a/onionshare_gui/onionshare_gui.py
+++ b/onionshare_gui/onionshare_gui.py
@@ -1,5 +1,5 @@
from __future__ import division
-import os, sys, subprocess, inspect, platform, argparse, threading, time, math, inspect, platform, urllib2
+import os, sys, subprocess, inspect, platform, argparse, threading, time, math, inspect, platform
from PyQt4 import QtCore, QtGui
import common
@@ -101,11 +101,7 @@ class OnionShareGui(QtGui.QWidget):
t.start()
def stop_server(self):
- # to stop flask, load http://127.0.0.1:<port>/<shutdown_slug>/shutdown
- try:
- urllib2.urlopen('http://127.0.0.1:{0}/{1}/shutdown'.format(self.app.port, web.shutdown_slug)).read()
- except:
- pass
+ web.stop()
self.app.cleanup()
self.stop_server_finished.emit()
diff --git a/stdeb.cfg b/stdeb.cfg
index 0895703..3264722 100644
--- a/stdeb.cfg
+++ b/stdeb.cfg
@@ -1,4 +1,4 @@
[DEFAULT]
Package: onionshare
-Depends: python-flask, python-stem
+Depends: python-flask, python-stem, python-socksipy
Suite: trusty
--
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