itRemove functionality for writing peers.json. - tordam - A library for peer discovery inside the Tor network Err parazyd.org 70 hgit clone https://git.parazyd.org/tordam URL:https://git.parazyd.org/tordam parazyd.org 70 1Log /git/tordam/log.gph parazyd.org 70 1Files /git/tordam/files.gph parazyd.org 70 1Refs /git/tordam/refs.gph parazyd.org 70 1README /git/tordam/file/README.md.gph parazyd.org 70 1LICENSE /git/tordam/file/LICENSE.gph parazyd.org 70 i--- Err parazyd.org 70 1commit a22b27bfe6cbfa02cc14b7eeaae4b90fe389eeb9 /git/tordam/commit/a22b27bfe6cbfa02cc14b7eeaae4b90fe389eeb9.gph parazyd.org 70 1parent 96c148ef56eaa2f1d8bc5314568ea9d4ce265922 /git/tordam/commit/96c148ef56eaa2f1d8bc5314568ea9d4ce265922.gph parazyd.org 70 hAuthor: parazyd URL:mailto:parazyd@dyne.org parazyd.org 70 iDate: Sun, 21 Mar 2021 11:06:16 +0100 Err parazyd.org 70 i Err parazyd.org 70 iRemove functionality for writing peers.json. Err parazyd.org 70 i Err parazyd.org 70 iThis should be done externally, and not in the library. Err parazyd.org 70 i Err parazyd.org 70 iDiffstat: Err parazyd.org 70 i M announce_test.go | 2 -- Err parazyd.org 70 i M cmd/tor-dam/tor-dam.go | 1 - Err parazyd.org 70 i M config.go | 12 ------------ Err parazyd.org 70 i D database.go | 51 ------------------------------- Err parazyd.org 70 i M peer_announce.go | 5 +---- Err parazyd.org 70 i M rpc_announce.go | 4 ---- Err parazyd.org 70 i Err parazyd.org 70 i6 files changed, 1 insertion(+), 74 deletions(-) Err parazyd.org 70 i--- Err parazyd.org 70 1diff --git a/announce_test.go b/announce_test.go /git/tordam/file/announce_test.go.gph parazyd.org 70 it@@ -23,7 +23,6 @@ import ( Err parazyd.org 70 i "crypto/rand" Err parazyd.org 70 i "encoding/base64" Err parazyd.org 70 i "os" Err parazyd.org 70 i- "path/filepath" Err parazyd.org 70 i "testing" Err parazyd.org 70 i ) Err parazyd.org 70 i Err parazyd.org 70 it@@ -34,7 +33,6 @@ func TestAnnounce(t *testing.T) { Err parazyd.org 70 i } Err parazyd.org 70 i Err parazyd.org 70 i Cfg.Datadir = os.TempDir() Err parazyd.org 70 i- defer os.Remove(filepath.Join(Cfg.Datadir, dbFile)) Err parazyd.org 70 i Err parazyd.org 70 i vals := []string{ Err parazyd.org 70 i "p7qaewjgnvnaeihhyybmoofd5avh665kr3awoxlh5rt6ox743kjdr6qd.onion:666", Err parazyd.org 70 1diff --git a/cmd/tor-dam/tor-dam.go b/cmd/tor-dam/tor-dam.go /git/tordam/file/cmd/tor-dam/tor-dam.go.gph parazyd.org 70 it@@ -205,7 +205,6 @@ func main() { Err parazyd.org 70 i } Err parazyd.org 70 i Err parazyd.org 70 i // Marshal the global Peers map to JSON and print it out. Err parazyd.org 70 i- // Internally, the db is also saved (written to a file) in the datadir. Err parazyd.org 70 i j, _ := json.Marshal(tordam.Peers) Err parazyd.org 70 i log.Println(string(j)) Err parazyd.org 70 i } Err parazyd.org 70 1diff --git a/config.go b/config.go /git/tordam/file/config.go.gph parazyd.org 70 it@@ -18,11 +18,8 @@ Err parazyd.org 70 i package tordam Err parazyd.org 70 i Err parazyd.org 70 i import ( Err parazyd.org 70 i- "context" Err parazyd.org 70 i "crypto/ed25519" Err parazyd.org 70 i "net" Err parazyd.org 70 i- Err parazyd.org 70 i- "golang.org/x/sync/semaphore" Err parazyd.org 70 i ) Err parazyd.org 70 i Err parazyd.org 70 i // Config is the configuration structure, to be filled by library user. Err parazyd.org 70 it@@ -45,12 +42,3 @@ var Cfg = Config{} Err parazyd.org 70 i Err parazyd.org 70 i // Peers is the global map of peers Err parazyd.org 70 i var Peers = map[string]Peer{} Err parazyd.org 70 i- Err parazyd.org 70 i-// dbSem is the internal semaphore for writing the peer db Err parazyd.org 70 i-var dbSem = semaphore.NewWeighted(1) Err parazyd.org 70 i- Err parazyd.org 70 i-// dbSemCtx is the context for dbSem Err parazyd.org 70 i-var dbSemCtx = context.Background() Err parazyd.org 70 i- Err parazyd.org 70 i-// dbFile is the filename for the Peers JSON database Err parazyd.org 70 i-var dbFile = "peers.json" Err parazyd.org 70 1diff --git a/database.go b/database.go /git/tordam/file/database.go.gph parazyd.org 70 it@@ -1,51 +0,0 @@ Err parazyd.org 70 i-// Copyright (c) 2017-2021 Ivan Jelincic Err parazyd.org 70 i-// Err parazyd.org 70 i-// This file is part of tordam Err parazyd.org 70 i-// Err parazyd.org 70 i-// This program is free software: you can redistribute it and/or modify Err parazyd.org 70 i-// it under the terms of the GNU Affero General Public License as published by Err parazyd.org 70 i-// the Free Software Foundation, either version 3 of the License, or Err parazyd.org 70 i-// (at your option) any later version. Err parazyd.org 70 i-// Err parazyd.org 70 i-// This program is distributed in the hope that it will be useful, Err parazyd.org 70 i-// but WITHOUT ANY WARRANTY; without even the implied warranty of Err parazyd.org 70 i-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Err parazyd.org 70 i-// GNU Affero General Public License for more details. Err parazyd.org 70 i-// Err parazyd.org 70 i-// You should have received a copy of the GNU Affero General Public License Err parazyd.org 70 i-// along with this program. If not, see . Err parazyd.org 70 i- Err parazyd.org 70 i-package tordam Err parazyd.org 70 i- Err parazyd.org 70 i-import ( Err parazyd.org 70 i- "encoding/json" Err parazyd.org 70 i- "io/ioutil" Err parazyd.org 70 i- "log" Err parazyd.org 70 i-) Err parazyd.org 70 i- Err parazyd.org 70 i-// WritePeersDB marshals the Peers global to JSON and writes to given file. Err parazyd.org 70 i-// Please note that this should be probably used in conjunction with some sort Err parazyd.org 70 i-// of semaphore. Err parazyd.org 70 i-func WritePeersDB(file string) error { Err parazyd.org 70 i- j, err := json.Marshal(Peers) Err parazyd.org 70 i- if err != nil { Err parazyd.org 70 i- return err Err parazyd.org 70 i- } Err parazyd.org 70 i- return ioutil.WriteFile(file, j, 0600) Err parazyd.org 70 i-} Err parazyd.org 70 i- Err parazyd.org 70 i-// writePeersDBWithSem is an internal function to call WritePeersDB safely Err parazyd.org 70 i-// using an internal semaphore. Programs using this library should probably Err parazyd.org 70 i-// implement something similar if they want to write Peers to a file. Err parazyd.org 70 i-func writePeersDBWithSem(file string) { Err parazyd.org 70 i- if err := dbSem.Acquire(dbSemCtx, 1); err != nil { Err parazyd.org 70 i- log.Println("warning: failed to acquire sem for writing:", err) Err parazyd.org 70 i- return Err parazyd.org 70 i- } Err parazyd.org 70 i- go func() { Err parazyd.org 70 i- if err := WritePeersDB(file); err != nil { Err parazyd.org 70 i- log.Println("warning: failed to write peers db:", err) Err parazyd.org 70 i- } Err parazyd.org 70 i- dbSem.Release(1) Err parazyd.org 70 i- }() Err parazyd.org 70 i-} Err parazyd.org 70 1diff --git a/peer_announce.go b/peer_announce.go /git/tordam/file/peer_announce.go.gph parazyd.org 70 it@@ -22,7 +22,6 @@ import ( Err parazyd.org 70 i "crypto/ed25519" Err parazyd.org 70 i "encoding/base64" Err parazyd.org 70 i "log" Err parazyd.org 70 i- "path/filepath" Err parazyd.org 70 i "strings" Err parazyd.org 70 i Err parazyd.org 70 i "github.com/creachadair/jrpc2" Err parazyd.org 70 it@@ -96,8 +95,7 @@ func Announce(onionaddr string) error { Err parazyd.org 70 i // AppendPeers appends given []string peers to the global Peers map. Usually Err parazyd.org 70 i // received by validating ourself to a peer and them replying with a list of Err parazyd.org 70 i // their valid peers. If a peer is not in format of "unlikelyname.onion:port", Err parazyd.org 70 i-// they will not be appended. When done, the function also writes the Peers Err parazyd.org 70 i-// struct as a JSON file in the Datadir. Err parazyd.org 70 i+// they will not be appended. Err parazyd.org 70 i // As a placeholder, this function can return an error, but it has no reason Err parazyd.org 70 i // to do so right now. Err parazyd.org 70 i func AppendPeers(p []string) error { Err parazyd.org 70 it@@ -112,6 +110,5 @@ func AppendPeers(p []string) error { Err parazyd.org 70 i Peers[i] = Peer{} Err parazyd.org 70 i } Err parazyd.org 70 i Err parazyd.org 70 i- writePeersDBWithSem(filepath.Join(Cfg.Datadir, dbFile)) Err parazyd.org 70 i return nil Err parazyd.org 70 i } Err parazyd.org 70 1diff --git a/rpc_announce.go b/rpc_announce.go /git/tordam/file/rpc_announce.go.gph parazyd.org 70 it@@ -22,7 +22,6 @@ import ( Err parazyd.org 70 i "crypto/ed25519" Err parazyd.org 70 i "encoding/base64" Err parazyd.org 70 i "errors" Err parazyd.org 70 i- "path/filepath" Err parazyd.org 70 i "strings" Err parazyd.org 70 i "time" Err parazyd.org 70 i ) Err parazyd.org 70 it@@ -123,7 +122,6 @@ func (Ann) Init(ctx context.Context, vals []string) ([]string, error) { Err parazyd.org 70 i peer.Trusted = 0 Err parazyd.org 70 i Peers[onion] = peer Err parazyd.org 70 i Err parazyd.org 70 i- writePeersDBWithSem(filepath.Join(Cfg.Datadir, dbFile)) Err parazyd.org 70 i return []string{nonce, newrevoke}, nil Err parazyd.org 70 i } Err parazyd.org 70 i Err parazyd.org 70 it@@ -196,8 +194,6 @@ func (Ann) Validate(ctx context.Context, vals []string) ([]string, error) { Err parazyd.org 70 i peer.LastSeen = time.Now().Unix() Err parazyd.org 70 i Peers[onion] = peer Err parazyd.org 70 i Err parazyd.org 70 i- writePeersDBWithSem(filepath.Join(Cfg.Datadir, dbFile)) Err parazyd.org 70 i- Err parazyd.org 70 i rpcInfo("ann.Validate", "sending back list of peers to", onion) Err parazyd.org 70 i return ret, nil Err parazyd.org 70 i } Err parazyd.org 70 .