Browse Source

Merge branch 'tor' of cwtch.im/cwtch into master

tor
Sarah Jamie Lewis Gogs 1 year ago
parent
commit
44384d1cec
25 changed files with 91 additions and 27 deletions
  1. +4
    -2
      app/app.go
  2. +11
    -1
      app/cli/main.go
  3. +48
    -0
      connectivity/tor/tormanager.go
  4. +1
    -1
      model/group.go
  5. +1
    -1
      model/profile.go
  6. +1
    -1
      peer/connections/peerpeerconnection.go
  7. +2
    -2
      peer/cwtch_peer_test.go
  8. +1
    -1
      peer/fetch/peer_fetch_channel.go
  9. +1
    -1
      peer/fetch/peer_fetch_channel_test.go
  10. +1
    -1
      peer/listen/peer_listen_channel.go
  11. +1
    -1
      peer/listen/peer_listen_channel_test.go
  12. +1
    -1
      peer/peer/peer_channel.go
  13. +1
    -1
      peer/peer/peer_channel_test.go
  14. +1
    -1
      peer/send/peer_send_channel.go
  15. +1
    -1
      peer/send/peer_send_channel_test.go
  16. +1
    -1
      protocol/spam/spamguard.go
  17. +1
    -1
      protocol/spam/spamguard_test.go
  18. +1
    -1
      server/fetch/server_fetch_channel.go
  19. +1
    -1
      server/fetch/server_fetch_channel_test.go
  20. +1
    -1
      server/listen/server_listen_channel.go
  21. +1
    -1
      server/listen/server_listen_channel_test.go
  22. +1
    -1
      server/send/server_send_channel.go
  23. +1
    -1
      server/send/server_send_channel_test.go
  24. +3
    -3
      testing/cwtch_peer_server_intergration_test.go
  25. +4
    -0
      testing/quality.sh

+ 4
- 2
app/app.go View File

@@ -8,7 +8,8 @@ import (

// Application is a facade over a cwtchPeer that provides some wrapping logic.
type Application struct {
Peer peer.CwtchPeerInterface
Peer peer.CwtchPeerInterface
TorManager *tor.Manager
}

// NewProfile creates a new cwtchPeer with a given name.
@@ -42,10 +43,11 @@ func (app *Application) SetProfile(filename string, password string) error {
app.Peer = profile
if err == nil {

_, err := tor.NewTorManager(9050, 9051)
tm, err := tor.NewTorManager(9050, 9051)
if err != nil {
return err
}
app.TorManager = tm

go func() {
err := app.Peer.Listen()


+ 11
- 1
app/cli/main.go View File

@@ -10,6 +10,7 @@ import (

"bytes"
"golang.org/x/crypto/ssh/terminal"
"os"
"syscall"
)

@@ -428,7 +429,16 @@ func main() {
}
}
if profilefile != "" {
app.Peer.Save(profilefile)
if app.Peer != nil {
app.Peer.Save(profilefile)
}
}
}

if app.TorManager != nil {
fmt.Println("Shutting down Tor process...")
app.TorManager.Shutdown()
}
os.Exit(0)

}

+ 48
- 0
connectivity/tor/tormanager.go View File

@@ -4,9 +4,14 @@ import (
"errors"
"fmt"
"github.com/yawning/bulb"
"log"
"net"
"net/http"
"net/url"
"os"
"os/exec"
"os/user"
"path"
"strings"
"time"
)
@@ -15,6 +20,7 @@ import (
type Manager struct {
socksPort int
controlPort int
process *exec.Cmd
}

// NewTorManager Instantiates a new connection manager, returns non-nil error if it fails to connect to a tor daemon on the given ports.
@@ -23,6 +29,39 @@ func NewTorManager(socksPort int, controlPort int) (*Manager, error) {
torManager.socksPort = socksPort
torManager.controlPort = controlPort
err := torManager.TestConnection()

if err != nil {

usr, err := user.Current()
if err != nil {
return nil, err
}

torrc := path.Join(usr.HomeDir, ".cwtch", "torrc")
if _, err := os.Stat(torrc); os.IsNotExist(err) {

os.MkdirAll(path.Join(usr.HomeDir, ".cwtch"), 0700)

file, err := os.Create(torrc)
if err != nil {
return nil, err
}
fmt.Fprintf(file, "SOCKSPort %d\nControlPort %d\n", socksPort, controlPort)
file.Close()
}

cmd := exec.Command("tor", "-f", torrc)
err = cmd.Start()
if err != nil {
return nil, err
}
fmt.Printf("\nWaiting to connect to Tor Proxy...\n")
time.Sleep(time.Second * 5)
torManager.process = cmd
err = torManager.TestConnection()
return torManager, err
}

return torManager, err
}

@@ -35,6 +74,15 @@ const (
proxyStatusTimeout
)

// Shutdown kills the managed Tor Process
func (tm *Manager) Shutdown() {
if tm.process != nil {
if err := tm.process.Process.Kill(); err != nil {
log.Fatal("failed to kill process: ", err)
}
}
}

// Detect whether a proxy is connectable and is a Tor proxy
func checkTorProxy(proxyAddress string) proxyStatus {
// A trick to do this without making an outward connection is,


+ 1
- 1
model/group.go View File

@@ -5,8 +5,8 @@ import (
"cwtch.im/cwtch/protocol"
"errors"
"fmt"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/utils"
"github.com/golang/protobuf/proto"
"golang.org/x/crypto/nacl/secretbox"
"io"
"sync"


+ 1
- 1
model/profile.go View File

@@ -6,8 +6,8 @@ import (
"cwtch.im/cwtch/protocol"
"encoding/asn1"
"errors"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/utils"
"github.com/golang/protobuf/proto"
"golang.org/x/crypto/ed25519"
"io"
"sync"


+ 1
- 1
peer/connections/peerpeerconnection.go View File

@@ -1,13 +1,13 @@
package connections

import (
"cwtch.im/cwtch/model"
"cwtch.im/cwtch/peer/peer"
"cwtch.im/cwtch/protocol"
"git.openprivacy.ca/openprivacy/libricochet-go"
"git.openprivacy.ca/openprivacy/libricochet-go/channels"
"git.openprivacy.ca/openprivacy/libricochet-go/connection"
"git.openprivacy.ca/openprivacy/libricochet-go/identity"
"cwtch.im/cwtch/model"
"log"
"time"
)


+ 2
- 2
peer/cwtch_peer_test.go View File

@@ -6,10 +6,10 @@ import (

func TestCwtchPeerGenerate(t *testing.T) {

alice := NewCwtchPeer("alice","testpass")
alice := NewCwtchPeer("alice", "testpass")
alice.Save("./test_profile")

aliceLoaded, err := LoadCwtchPeer("./test_profile","testpass")
aliceLoaded, err := LoadCwtchPeer("./test_profile", "testpass")
if err != nil || aliceLoaded.GetProfile().Name != "alice" {
t.Errorf("something went wrong saving and loading profiles %v %v", err, aliceLoaded)
}


+ 1
- 1
peer/fetch/peer_fetch_channel.go View File

@@ -3,10 +3,10 @@ package fetch
import (
"cwtch.im/cwtch/protocol"
"errors"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/channels"
"git.openprivacy.ca/openprivacy/libricochet-go/utils"
"git.openprivacy.ca/openprivacy/libricochet-go/wire/control"
"github.com/golang/protobuf/proto"
)

// CwtchPeerFetchChannel is the peer implementation of the im.cwtch.server.fetch


+ 1
- 1
peer/fetch/peer_fetch_channel_test.go View File

@@ -2,9 +2,9 @@ package fetch

import (
"cwtch.im/cwtch/protocol"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/channels"
"git.openprivacy.ca/openprivacy/libricochet-go/wire/control"
"github.com/golang/protobuf/proto"
"testing"
"time"
)


+ 1
- 1
peer/listen/peer_listen_channel.go View File

@@ -3,10 +3,10 @@ package listen
import (
"cwtch.im/cwtch/protocol"
"errors"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/channels"
"git.openprivacy.ca/openprivacy/libricochet-go/utils"
"git.openprivacy.ca/openprivacy/libricochet-go/wire/control"
"github.com/golang/protobuf/proto"
)

// CwtchPeerListenChannel is the peer implementation of im.cwtch.server.listen


+ 1
- 1
peer/listen/peer_listen_channel_test.go View File

@@ -2,9 +2,9 @@ package listen

import (
"cwtch.im/cwtch/protocol"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/channels"
"git.openprivacy.ca/openprivacy/libricochet-go/wire/control"
"github.com/golang/protobuf/proto"
"testing"
"time"
)


+ 1
- 1
peer/peer/peer_channel.go View File

@@ -2,10 +2,10 @@ package peer

import (
"cwtch.im/cwtch/protocol"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/channels"
"git.openprivacy.ca/openprivacy/libricochet-go/utils"
"git.openprivacy.ca/openprivacy/libricochet-go/wire/control"
"github.com/golang/protobuf/proto"
"log"
)



+ 1
- 1
peer/peer/peer_channel_test.go View File

@@ -2,9 +2,9 @@ package peer

import (
"cwtch.im/cwtch/protocol"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/channels"
"git.openprivacy.ca/openprivacy/libricochet-go/wire/control"
"github.com/golang/protobuf/proto"
"testing"
)



+ 1
- 1
peer/send/peer_send_channel.go View File

@@ -4,10 +4,10 @@ import (
"cwtch.im/cwtch/protocol"
"cwtch.im/cwtch/protocol/spam"
"errors"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/channels"
"git.openprivacy.ca/openprivacy/libricochet-go/utils"
"git.openprivacy.ca/openprivacy/libricochet-go/wire/control"
"github.com/golang/protobuf/proto"
)

// CwtchPeerSendChannel is the peer implementation of im.cwtch.server.send


+ 1
- 1
peer/send/peer_send_channel_test.go View File

@@ -3,9 +3,9 @@ package send
import (
"cwtch.im/cwtch/protocol"
"cwtch.im/cwtch/protocol/spam"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/channels"
"git.openprivacy.ca/openprivacy/libricochet-go/wire/control"
"github.com/golang/protobuf/proto"
"testing"
)



+ 1
- 1
protocol/spam/spamguard.go View File

@@ -4,9 +4,9 @@ import (
"crypto/rand"
"crypto/sha256"
"cwtch.im/cwtch/protocol"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/utils"
"git.openprivacy.ca/openprivacy/libricochet-go/wire/control"
"github.com/golang/protobuf/proto"
"io"
//"fmt"
)


+ 1
- 1
protocol/spam/spamguard_test.go View File

@@ -2,8 +2,8 @@ package spam

import (
"cwtch.im/cwtch/protocol"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/wire/control"
"github.com/golang/protobuf/proto"
"testing"
)



+ 1
- 1
server/fetch/server_fetch_channel.go View File

@@ -3,10 +3,10 @@ package fetch
import (
"cwtch.im/cwtch/protocol"
"errors"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/channels"
"git.openprivacy.ca/openprivacy/libricochet-go/utils"
"git.openprivacy.ca/openprivacy/libricochet-go/wire/control"
"github.com/golang/protobuf/proto"
)

// CwtchServerFetchChannel implements the ChannelHandler interface for a channel of


+ 1
- 1
server/fetch/server_fetch_channel_test.go View File

@@ -2,9 +2,9 @@ package fetch

import (
"cwtch.im/cwtch/protocol"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/channels"
"git.openprivacy.ca/openprivacy/libricochet-go/wire/control"
"github.com/golang/protobuf/proto"
"testing"
)



+ 1
- 1
server/listen/server_listen_channel.go View File

@@ -3,10 +3,10 @@ package listen
import (
"cwtch.im/cwtch/protocol"
"errors"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/channels"
"git.openprivacy.ca/openprivacy/libricochet-go/utils"
"git.openprivacy.ca/openprivacy/libricochet-go/wire/control"
"github.com/golang/protobuf/proto"
)

// CwtchServerListenChannel implements the ChannelHandler interface for a channel of


+ 1
- 1
server/listen/server_listen_channel_test.go View File

@@ -2,9 +2,9 @@ package listen

import (
"cwtch.im/cwtch/protocol"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/channels"
"git.openprivacy.ca/openprivacy/libricochet-go/wire/control"
"github.com/golang/protobuf/proto"
"testing"
)



+ 1
- 1
server/send/server_send_channel.go View File

@@ -4,9 +4,9 @@ import (
"cwtch.im/cwtch/protocol"
"cwtch.im/cwtch/protocol/spam"
"errors"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/channels"
"git.openprivacy.ca/openprivacy/libricochet-go/wire/control"
"github.com/golang/protobuf/proto"
"log"
)



+ 1
- 1
server/send/server_send_channel_test.go View File

@@ -3,9 +3,9 @@ package send
import (
"cwtch.im/cwtch/protocol"
"cwtch.im/cwtch/protocol/spam"
"github.com/golang/protobuf/proto"
"git.openprivacy.ca/openprivacy/libricochet-go/channels"
"git.openprivacy.ca/openprivacy/libricochet-go/wire/control"
"github.com/golang/protobuf/proto"
"testing"
)



+ 3
- 3
testing/cwtch_peer_server_intergration_test.go View File

@@ -143,17 +143,17 @@ func TestCwtchPeerIntegration(t *testing.T) {
// ***** Peer setup *****

fmt.Println("Creating Alice...")
alice := peer.NewCwtchPeer("Alice","alicepass")
alice := peer.NewCwtchPeer("Alice", "alicepass")
go alice.Listen()
fmt.Println("Alice created:", alice.GetProfile().Onion)

fmt.Println("Creating Bob...")
bob := peer.NewCwtchPeer("Bob","bobpass")
bob := peer.NewCwtchPeer("Bob", "bobpass")
go bob.Listen()
fmt.Println("Bob created:", bob.GetProfile().Onion)

fmt.Println("Creating Carol...")
carol := peer.NewCwtchPeer("Carol","carolpass")
carol := peer.NewCwtchPeer("Carol", "carolpass")
go carol.Listen()
fmt.Println("Carol created:", carol.GetProfile().Onion)



+ 4
- 0
testing/quality.sh View File

@@ -10,3 +10,7 @@ echo ""
echo "Linting:"

go list ./... | xargs golint


echo "Time to format"
gofmt -l -s -w .

Loading…
Cancel
Save