tEnable passing the port mapping to damhs.py. - tordam - A library for peer discovery inside the Tor network
 (HTM) git clone https://git.parazyd.org/tordam
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 1af7f5d90c331d73e3c82dfe51d551e63aba05be
 (DIR) parent 3a9a28e936498bbc49d062d33a9edfa40323ae78
 (HTM) Author: parazyd <parazyd@dyne.org>
       Date:   Tue, 12 Dec 2017 18:04:30 +0100
       
       Enable passing the port mapping to damhs.py.
       
       dam-client implements this by using the TorPortMap constant from
       damlib/config.go
       
       Diffstat:
         M cmd/dam-client/main.go              |       5 +++--
         M pkg/damlib/config.go                |       7 +++++++
         M python/damhs.py                     |      34 +++++++++++++++----------------
       
       3 files changed, 26 insertions(+), 20 deletions(-)
       ---
 (DIR) diff --git a/cmd/dam-client/main.go b/cmd/dam-client/main.go
       t@@ -10,6 +10,7 @@ import (
                "log"
                "os"
                "os/exec"
       +        "strconv"
                "sync"
                "time"
        
       t@@ -28,7 +29,7 @@ func announce(dir string, vals map[string]string, privkey *rsa.PrivateKey) (bool
        
                if dir == "localhost" || dir == "127.0.0.1" {
                        // Modify the string if we are authenticating to ourself.
       -                dir += ":49371"
       +                dir += ":" + strconv.Itoa(lib.DirPort)
                }
        
                log.Println("Announcing keypair to:", dir)
       t@@ -116,7 +117,7 @@ func main() {
        
                // Start up the hidden service
                log.Println("Starting up the hidden service...")
       -        cmd := exec.Command("damhs.py", lib.PrivKeyPath)
       +        cmd := exec.Command("damhs.py", lib.PrivKeyPath, lib.TorPortMap)
                stdout, err := cmd.StdoutPipe()
                lib.CheckError(err)
        
 (DIR) diff --git a/pkg/damlib/config.go b/pkg/damlib/config.go
       t@@ -19,3 +19,10 @@ const WelcomeMsg = "Welcome to the DAM network!"
        
        // ProxyAddr is the address of our Tor SOCKS port.
        const ProxyAddr = "127.0.0.1:9050"
       +
       +// TorPortMap is a comma-separated string holding the mapping of ports
       +// to be opened by the Tor Hidden Service. Format is "remote:local".
       +const TorPortMap = "80:49371"
       +
       +// DirPort is the port where dam-dir will be listening.
       +const DirPort = 49371
 (DIR) diff --git a/python/damhs.py b/python/damhs.py
       t@@ -2,6 +2,11 @@
        # See LICENSE file for copyright and license details.
        """
        Controller daemon running the ephemeral hidden service.
       +
       +Usage: damhs.py <path_to_private.key> <portmap>
       +
       +<portmap> is a comma-separated string of at least one of the
       +following element: 80:49371 (80 is the remote, 49371 is local)
        """
        
        from sys import argv, stdout
       t@@ -9,24 +14,11 @@ from time import sleep
        from stem.control import Controller
        
        
       -# PORTMAP holds the port mapping of our ports. The key is the port that
       -# is accessible through Tor, and the value is the port opened locally for
       -# Tor to use.
       -PORTMAP = {
       -    80: 49371
       -}
       -
       -
       -def start_hs(ctl=None, ktype=None, kcont=None):
       +def start_hs(ctl=None, ktype=None, kcont=None, portmap=None):
            """
            Function starting our ephemeral hidden service
            """
       -    if not ktype or not kcont:
       -        assert False, 'No key data passed.'
       -    if not ctl:
       -        assert False, 'No controller passed.'
       -
       -    return ctl.create_ephemeral_hidden_service(PORTMAP, key_type=ktype,
       +    return ctl.create_ephemeral_hidden_service(portmap, key_type=ktype,
                                                       key_content=kcont,
                                                       await_publication=True)
        
       t@@ -35,8 +27,14 @@ def main():
            """
            Main loop
            """
       -    controller = Controller.from_port()
       -    controller.authenticate(password='topkek')
       +    ctl = Controller.from_port()
       +    ctl.authenticate(password='topkek')
       +
       +    portmap = {}
       +    ports = argv[2].split(',')
       +    for i in ports:
       +        tup = i.split(':')
       +        portmap[int(tup[0])] = int(tup[1])
        
            keyfile = argv[1]
            ktype = 'RSA1024'
       t@@ -45,7 +43,7 @@ def main():
            kcont = kcont.replace('-----BEGIN RSA PRIVATE KEY-----', '')
            kcont = kcont.replace('-----END RSA PRIVATE KEY-----', '')
        
       -    service = start_hs(ctl=controller, ktype=ktype, kcont=kcont)
       +    service = start_hs(ctl=ctl, ktype=ktype, kcont=kcont, portmap=portmap)
        
            stdout.write('Started HS at %s.onion\n' % service.service_id)
            stdout.flush()