diff --git a/.drone.yml b/.drone.yml index 85e4fc2..6d36a6b 100644 --- a/.drone.yml +++ b/.drone.yml @@ -41,8 +41,6 @@ pipeline: branch: master event: [ push, pull_request ] commands: - - ./tor -f ./torrc - - sleep 15 - go test -race -v cwtch.im/cwtch/testing/ notify-email: image: drillster/drone-email diff --git a/go.mod b/go.mod index 4129905..f1d1e34 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,7 @@ go 1.14 require ( cwtch.im/tapir v0.2.0 - git.openprivacy.ca/openprivacy/connectivity v1.2.1 + git.openprivacy.ca/openprivacy/connectivity v1.2.2 git.openprivacy.ca/openprivacy/log v1.0.1 github.com/gtank/ristretto255 v0.1.2 github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect diff --git a/go.sum b/go.sum index e11d8b9..51dce80 100644 --- a/go.sum +++ b/go.sum @@ -4,6 +4,8 @@ git.openprivacy.ca/openprivacy/connectivity v1.2.0 h1:dbZ5CRl11vg3BNHdzRKSlDP8OU git.openprivacy.ca/openprivacy/connectivity v1.2.0/go.mod h1:B7vzuVmChJtSKoh0ezph5vu6DQ0gIk0zHUNG6IgXCcA= git.openprivacy.ca/openprivacy/connectivity v1.2.1 h1:oRL56TR9ZQnKkGkTIQ9wYbJ2IkOOsi/zLYExYiAS+sE= git.openprivacy.ca/openprivacy/connectivity v1.2.1/go.mod h1:B7vzuVmChJtSKoh0ezph5vu6DQ0gIk0zHUNG6IgXCcA= +git.openprivacy.ca/openprivacy/connectivity v1.2.2 h1:CeuZB469xHMHxygxZD559CkRUAGR7ct4oeSlsAHQmKo= +git.openprivacy.ca/openprivacy/connectivity v1.2.2/go.mod h1:B7vzuVmChJtSKoh0ezph5vu6DQ0gIk0zHUNG6IgXCcA= git.openprivacy.ca/openprivacy/log v1.0.0 h1:Rvqm1weUdR4AOnJ79b1upHCc9vC/QF1rhSD2Um7sr1Y= git.openprivacy.ca/openprivacy/log v1.0.0/go.mod h1:gGYK8xHtndRLDymFtmjkG26GaMQNgyhioNS82m812Iw= git.openprivacy.ca/openprivacy/log v1.0.1 h1:NWV5oBTatvlSzUE6wtB+UQCulgyMOtm4BXGd34evMys= diff --git a/server/app/main.go b/server/app/main.go index 6e8dd4a..518ac1d 100644 --- a/server/app/main.go +++ b/server/app/main.go @@ -8,7 +8,10 @@ import ( "fmt" "git.openprivacy.ca/openprivacy/connectivity/tor" "git.openprivacy.ca/openprivacy/log" + mrand "math/rand" + "crypto/rand" "os" + "time" ) const ( @@ -40,7 +43,20 @@ func main() { serverConfig := cwtchserver.LoadConfig(configDir, serverConfigFile) - acn, err := tor.NewTorACNWithAuth(".", "", 9051, tor.HashedPasswordAuthenticator{Password: "examplehashedpassword"}) + // we don't need real randomness for the port, just to avoid a possible conflict... + mrand.Seed(int64(time.Now().Nanosecond())) + controlPort := mrand.Intn(1000)+9052 + + // generate a random password + key := make([]byte, 64) + _, err := rand.Read(key) + if err != nil { + panic(err) + } + + os.MkdirAll("tordir/tor",0700) + tor.NewTorrc().WithHashedPassword(base64.StdEncoding.EncodeToString(key)).WithControlPort(controlPort).Build("./tordir/tor/torrc") + acn, err := tor.NewTorACNWithAuth("tordir", "", controlPort, tor.HashedPasswordAuthenticator{Password: base64.StdEncoding.EncodeToString(key)}) if err != nil { log.Errorf("\nError connecting to Tor: %v\n", err) os.Exit(1) diff --git a/testing/cwtch_peer_server_integration_test.go b/testing/cwtch_peer_server_integration_test.go index 7c99b94..3d2c855 100644 --- a/testing/cwtch_peer_server_integration_test.go +++ b/testing/cwtch_peer_server_integration_test.go @@ -1,6 +1,7 @@ package testing import ( + "crypto/rand" app2 "cwtch.im/cwtch/app" "cwtch.im/cwtch/app/utils" "cwtch.im/cwtch/event" @@ -10,11 +11,13 @@ import ( "cwtch.im/cwtch/peer" "cwtch.im/cwtch/protocol/connections" cwtchserver "cwtch.im/cwtch/server" + "encoding/base64" "encoding/json" "fmt" "git.openprivacy.ca/openprivacy/connectivity/tor" "git.openprivacy.ca/openprivacy/log" "golang.org/x/net/proxy" + mrand "math/rand" "os" "os/user" "path" @@ -115,11 +118,24 @@ func TestCwtchPeerIntegration(t *testing.T) { log.ExcludeFromPattern("event/eventmanager") log.ExcludeFromPattern("pipeBridge") log.ExcludeFromPattern("tapir") - os.RemoveAll("tor") - dataDir := path.Join(".", "tor") + os.Mkdir("tordir",0700) + dataDir := path.Join("tordir", "tor") os.MkdirAll(dataDir, 0700) - tor.GenerateTorrc("examplehashedpassword", "./tor/torrc") - acn, err := tor.NewTorACNWithAuth(".", "", 9051, tor.HashedPasswordAuthenticator{Password: "examplehashedpassword"}) + + // we don't need real randomness for the port, just to avoid a possible conflict... + mrand.Seed(int64(time.Now().Nanosecond())) + socksPort := mrand.Intn(1000)+9051 + controlPort := mrand.Intn(1000)+9052 + + // generate a random password + key := make([]byte, 64) + _, err := rand.Read(key) + if err != nil { + panic(err) + } + + tor.NewTorrc().WithSocksPort(socksPort).WithOnionTrafficOnly().WithHashedPassword(base64.StdEncoding.EncodeToString(key)).WithControlPort(controlPort).Build("tordir/tor/torrc") + acn, err := tor.NewTorACNWithAuth("./tordir", path.Join("..", "tor"), controlPort, tor.HashedPasswordAuthenticator{Password: base64.StdEncoding.EncodeToString(key)}) if err != nil { t.Fatalf("Could not start Tor: %v", err) }