tcmd/tor-dam: Write some more documentation and clean up. - tordam - A library for peer discovery inside the Tor network HTML git clone https://git.parazyd.org/tordam DIR Log DIR Files DIR Refs DIR README DIR LICENSE --- DIR commit 7af2d65892ef925279b8d5b41b44015995433915 DIR parent 0d439d8aa0449fed236a0a5ff5ceedb9d69ff860 HTML Author: parazyd <parazyd@dyne.org> Date: Mon, 8 Mar 2021 01:11:43 +0100 cmd/tor-dam: Write some more documentation and clean up. Diffstat: M cmd/tor-dam/tor-dam.go | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) --- DIR diff --git a/cmd/tor-dam/tor-dam.go b/cmd/tor-dam/tor-dam.go t@@ -78,11 +78,14 @@ func loadED25519Seed(file string) (ed25519.PrivateKey, error) { return ed25519.NewKeyFromSeed(dec), nil } +// main here is the reference workflow of tor-dam's peer discovery. It's steps +// are commented and implement a generic way of using the tordam library. func main() { flag.Parse() var wg sync.WaitGroup var err error + // Generate the ed25519 keypair used for signing and validating if *generate { if err := generateED25519Keypair(*datadir); err != nil { log.Fatal(err) t@@ -90,13 +93,6 @@ func main() { os.Exit(0) } - // Validate given seeds - for _, i := range strings.Split(*seeds, ",") { - if err := tordam.ValidateOnionInternal(i); err != nil { - log.Fatalf("invalid seed %s (%v)", i, err) - } - } - // Assign portmap to tordam Cfg global and validate it tordam.Cfg.Portmap = strings.Split(*portmap, ",") if err := tordam.ValidatePortmap(tordam.Cfg.Portmap); err != nil { t@@ -142,16 +138,16 @@ func main() { log.Println("Our onion address is:", tordam.Onion) // Start the JSON-RPC server with announce endpoints. - // This is done in the library user rather than internally in the library + // This is done in the program rather than internally in the library // because it is more useful and easier to add additional JSON-RPC - // endpoints to the same server. + // endpoints to the same server if necessary. l, err := net.Listen(jrpc2.Network(tordam.Cfg.Listen.String()), tordam.Cfg.Listen.String()) if err != nil { log.Fatal(err) } defer l.Close() - // Endpoints are assigned here + // JSON-RPC endpoints are assigned here assigner := handler.ServiceMap{ // "ann" is the JSON-RPC endpoint for peer discovery/announcement "ann": handler.NewService(tordam.Ann{}), t@@ -166,6 +162,13 @@ func main() { wg.Wait() } + // Validate given seeds + for _, i := range strings.Split(*seeds, ",") { + if err := tordam.ValidateOnionInternal(i); err != nil { + log.Fatalf("invalid seed %s (%v)", i, err) + } + } + // Announce to initial seeds var succ int = 0 // Track of successful announces for _, i := range strings.Split(*seeds, ",") { t@@ -187,9 +190,8 @@ func main() { log.Printf("Successfully announced to %d peers.", succ) } - j, err := json.Marshal(tordam.Peers) - if err != nil { - log.Fatal(err) - } + // Marshal the global Peers map to JSON and print it out. + // Internally, the db is also saved (written to a file) in the datadir. + j, _ := json.Marshal(tordam.Peers) log.Println(string(j)) }