Skip to content

Commit

Permalink
STEM version checking and test create hidden service
Browse files Browse the repository at this point in the history
  • Loading branch information
Smári McCarthy committed Nov 15, 2014
1 parent 8f35a5c commit 6b84f0c
Showing 1 changed file with 29 additions and 6 deletions.
35 changes: 29 additions & 6 deletions mailpile/crypto/tor.py
@@ -1,5 +1,7 @@
import stem.process
import stem.control
# Version check for STEM >= 1.3
assert(int(stem.__version__[0]) > 1 or (int(stem.__version__[0]) == 1 and int(stem.__version__[2]) >= 3))

import socks
import socket
Expand All @@ -15,7 +17,7 @@ def __new__(cls, *args, **kwargs):
cls._instance = super(Tor, cls).__new__(cls, *args, **kwargs)
return cls._instance

def __init__(self, config):
def __init__(self, config=None):
self.config = config
self.tor_process = None
self.original_socket = None
Expand All @@ -34,27 +36,39 @@ def start_tor(self):
def _print_bootstrap_lines(self, line):
pass

def _create_path(self, name):
if self.config:
os.path.join(self.config.workdir, "tor", name)
else:
return name

def stop_tor(self):
print "Stopping Tor"
self.tor_process.kill()

def create_hidden_service(self, name, port, target):
controller = stem.control.Controller.from_port(port=CONTROL_PORT)
path = os.path.join(self.config.workdir, "tor", name)
controller.authenticate()
path = self._create_path(name)
return controller.create_hidden_service(path, port, target)

def destroy_hidden_service(self, name):
controller = stem.control.Controller.from_port(port=CONTROL_PORT)
path = os.path.join(self.config.workdir, "tor", name)
controller.authenticate()
path = self._create_path(name)
controller.remove_hidden_service(name)

def get_hidden_service_conf(self):
controller = stem.control.Controller.from_port(port=CONTROL_PORT)
controller.authenticate()
return controller.get_hidden_service_conf()

def start_proxying_through_tor(self):
if self.original_socket:
print "We're (probably) already proxying through Tor"
return

self.original_socket = socket.socket

socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', SOCKS_PORT)
socket.socket = socks.socksocket

Expand Down Expand Up @@ -92,9 +106,18 @@ def stop_proxying_dns_through_tor(self):
t = Tor()
t.start_tor()
t.start_proxying_through_tor()

print "Your IP (torified): %s" % (urllib.urlopen(url).read().strip())

t.stop_proxying_through_tor()

print "Creating hidden service..."

t.create_hidden_service("test", 80, "localhost:3000")

print t.get_hidden_service_conf()

input("Hit enter to disable service")

t.destroy_hidden_service("meteor")

t.stop_tor()

0 comments on commit 6b84f0c

Please sign in to comment.