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

This commit is contained in:
Sarah Jamie Lewis 2018-07-01 18:18:09 +00:00 committed by Gogs
commit 44384d1cec
25 changed files with 91 additions and 27 deletions

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()

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)
}

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,

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"

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"

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"
)

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)
}

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

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"
)

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

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"
)

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"
)

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"
)

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

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"
)

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"
)

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"
)

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

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"
)

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

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"
)

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"
)

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"
)

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)

View File

@ -10,3 +10,7 @@ echo ""
echo "Linting:"
go list ./... | xargs golint
echo "Time to format"
gofmt -l -s -w .