diff --git a/netstr/conn_test.go b/netstr/conn_test.go index 11faab6..7c3481f 100644 --- a/netstr/conn_test.go +++ b/netstr/conn_test.go @@ -2,7 +2,6 @@ package netstr import ( "context" - "github.com/asmogo/nws/protocol" "github.com/nbd-wtf/go-nostr" "runtime" "testing" @@ -14,21 +13,21 @@ import ( func TestNostrConnection_Read(t *testing.T) { tests := []struct { name string - event protocol.IncomingEvent + event nostr.IncomingEvent nc func() *NostrConnection wantN int wantErr bool }{ { name: "Read invalid relay", - event: protocol.IncomingEvent{Relay: nil}, + event: nostr.IncomingEvent{Relay: nil}, nc: func() *NostrConnection { ctx, cancelFunc := context.WithCancel(context.Background()) return &NostrConnection{ uuid: uuid.New(), ctx: ctx, cancel: cancelFunc, - subscriptionChan: make(chan protocol.IncomingEvent, 1), + subscriptionChan: make(chan nostr.IncomingEvent, 1), privateKey: "788de536151854213cc28dff9c3042e7897f0a1d59b391ddbbc1619d7e716e78", } }, @@ -37,7 +36,7 @@ func TestNostrConnection_Read(t *testing.T) { }, { name: "Read", - event: protocol.IncomingEvent{ + event: nostr.IncomingEvent{ Relay: &nostr.Relay{URL: "wss://relay.example.com"}, Event: &nostr.Event{ ID: "eventID", @@ -49,7 +48,7 @@ func TestNostrConnection_Read(t *testing.T) { uuid: uuid.New(), ctx: ctx, cancel: cancelFunc, - subscriptionChan: make(chan protocol.IncomingEvent, 1), + subscriptionChan: make(chan nostr.IncomingEvent, 1), privateKey: "788de536151854213cc28dff9c3042e7897f0a1d59b391ddbbc1619d7e716e78", } }, diff --git a/socks5/auth_test.go b/socks5/auth_test.go index f782f4a..962afbe 100644 --- a/socks5/auth_test.go +++ b/socks5/auth_test.go @@ -2,6 +2,7 @@ package socks5 import ( "bytes" + "github.com/nbd-wtf/go-nostr" "testing" ) @@ -10,7 +11,7 @@ func TestNoAuth(t *testing.T) { req.Write([]byte{1, NoAuth}) var resp bytes.Buffer - s, _ := New(&Config{}) + s, _ := New(&Config{}, &nostr.SimplePool{}) ctx, err := s.authenticate(&resp, req) if err != nil { t.Fatalf("err: %v", err) @@ -38,7 +39,7 @@ func TestPasswordAuth_Valid(t *testing.T) { cator := UserPassAuthenticator{Credentials: cred} - s, _ := New(&Config{AuthMethods: []Authenticator{cator}}) + s, _ := New(&Config{AuthMethods: []Authenticator{cator}}, &nostr.SimplePool{}) ctx, err := s.authenticate(&resp, req) if err != nil { @@ -74,7 +75,7 @@ func TestPasswordAuth_Invalid(t *testing.T) { "foo": "bar", } cator := UserPassAuthenticator{Credentials: cred} - s, _ := New(&Config{AuthMethods: []Authenticator{cator}}) + s, _ := New(&Config{AuthMethods: []Authenticator{cator}}, &nostr.SimplePool{}) ctx, err := s.authenticate(&resp, req) if err != UserAuthFailed { @@ -101,7 +102,7 @@ func TestNoSupportedAuth(t *testing.T) { } cator := UserPassAuthenticator{Credentials: cred} - s, _ := New(&Config{AuthMethods: []Authenticator{cator}}) + s, _ := New(&Config{AuthMethods: []Authenticator{cator}}, &nostr.SimplePool{}) ctx, err := s.authenticate(&resp, req) if err != NoSupportedAuth { diff --git a/socks5/request.go b/socks5/request.go index d5e60aa..b18dafc 100644 --- a/socks5/request.go +++ b/socks5/request.go @@ -1,7 +1,6 @@ package socks5 import ( - "bufio" "context" "fmt" "github.com/asmogo/nws/netstr" @@ -79,15 +78,6 @@ type Request struct { DestAddr *AddrSpec // AddrSpec of the actual destination (might be affected by rewrite) realDestAddr *AddrSpec - BufConn *bufio.Reader -} - -func (r Request) Buffer(c net.Conn) { - payload, err := r.BufConn.Peek(4096) - if err != nil { - panic(err) - } - c.Write(payload) } /* @@ -119,7 +109,6 @@ func NewRequest(bufConn io.Reader) (*Request, error) { Version: socks5Version, Command: header[1], DestAddr: dest, - BufConn: bufConn.(*bufio.Reader), } return request, nil } diff --git a/socks5/request_test.go b/socks5/request_test.go deleted file mode 100644 index 5465113..0000000 --- a/socks5/request_test.go +++ /dev/null @@ -1,169 +0,0 @@ -package socks5 - -import ( - "bytes" - "encoding/binary" - "io" - "log" - "net" - "os" - "strings" - "testing" -) - -type MockConn struct { - buf bytes.Buffer -} - -func (m *MockConn) Write(b []byte) (int, error) { - return m.buf.Write(b) -} - -func (m *MockConn) RemoteAddr() net.Addr { - return &net.TCPAddr{IP: []byte{127, 0, 0, 1}, Port: 65432} -} - -func TestRequest_Connect(t *testing.T) { - // Create a local listener - l, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - t.Fatalf("err: %v", err) - } - go func() { - conn, err := l.Accept() - if err != nil { - t.Fatalf("err: %v", err) - } - defer conn.Close() - - buf := make([]byte, 4) - if _, err := io.ReadAtLeast(conn, buf, 4); err != nil { - t.Fatalf("err: %v", err) - } - - if !bytes.Equal(buf, []byte("ping")) { - t.Fatalf("bad: %v", buf) - } - conn.Write([]byte("pong")) - }() - lAddr := l.Addr().(*net.TCPAddr) - - // Make server - s := &Server{config: &Config{ - Rules: PermitAll(), - Resolver: DNSResolver{}, - Logger: log.New(os.Stdout, "", log.LstdFlags), - }} - - // Create the connect request - buf := bytes.NewBuffer(nil) - buf.Write([]byte{5, 1, 0, 1, 127, 0, 0, 1}) - - port := []byte{0, 0} - binary.BigEndian.PutUint16(port, uint16(lAddr.Port)) - buf.Write(port) - - // Send a ping - buf.Write([]byte("ping")) - - // Handle the request - resp := &MockConn{} - req, err := NewRequest(buf) - if err != nil { - t.Fatalf("err: %v", err) - } - - if err := s.handleRequest(req, resp); err != nil { - t.Fatalf("err: %v", err) - } - - // Verify response - out := resp.buf.Bytes() - expected := []byte{ - 5, - 0, - 0, - 1, - 127, 0, 0, 1, - 0, 0, - 'p', 'o', 'n', 'g', - } - - // Ignore the port for both - out[8] = 0 - out[9] = 0 - - if !bytes.Equal(out, expected) { - t.Fatalf("bad: %v %v", out, expected) - } -} - -func TestRequest_Connect_RuleFail(t *testing.T) { - // Create a local listener - l, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - t.Fatalf("err: %v", err) - } - go func() { - conn, err := l.Accept() - if err != nil { - t.Fatalf("err: %v", err) - } - defer conn.Close() - - buf := make([]byte, 4) - if _, err := io.ReadAtLeast(conn, buf, 4); err != nil { - t.Fatalf("err: %v", err) - } - - if !bytes.Equal(buf, []byte("ping")) { - t.Fatalf("bad: %v", buf) - } - conn.Write([]byte("pong")) - }() - lAddr := l.Addr().(*net.TCPAddr) - - // Make server - s := &Server{config: &Config{ - Rules: PermitNone(), - Resolver: DNSResolver{}, - Logger: log.New(os.Stdout, "", log.LstdFlags), - }} - - // Create the connect request - buf := bytes.NewBuffer(nil) - buf.Write([]byte{5, 1, 0, 1, 127, 0, 0, 1}) - - port := []byte{0, 0} - binary.BigEndian.PutUint16(port, uint16(lAddr.Port)) - buf.Write(port) - - // Send a ping - buf.Write([]byte("ping")) - - // Handle the request - resp := &MockConn{} - req, err := NewRequest(buf) - if err != nil { - t.Fatalf("err: %v", err) - } - - if err := s.handleRequest(req, resp); !strings.Contains(err.Error(), "blocked by rules") { - t.Fatalf("err: %v", err) - } - - // Verify response - out := resp.buf.Bytes() - expected := []byte{ - 5, - 2, - 0, - 1, - 0, 0, 0, 0, - 0, 0, - } - - if !bytes.Equal(out, expected) { - t.Fatalf("bad: %v %v", out, expected) - } -} diff --git a/socks5/socks5_test.go b/socks5/socks5_test.go deleted file mode 100644 index 8cfbee0..0000000 --- a/socks5/socks5_test.go +++ /dev/null @@ -1,110 +0,0 @@ -package socks5 - -import ( - "bytes" - "encoding/binary" - "io" - "log" - "net" - "os" - "testing" - "time" -) - -func TestSOCKS5_Connect(t *testing.T) { - // Create a local listener - l, err := net.Listen("tcp", "127.0.0.1:0") - if err != nil { - t.Fatalf("err: %v", err) - } - go func() { - conn, err := l.Accept() - if err != nil { - t.Fatalf("err: %v", err) - } - defer conn.Close() - - buf := make([]byte, 4) - if _, err := io.ReadAtLeast(conn, buf, 4); err != nil { - t.Fatalf("err: %v", err) - } - - if !bytes.Equal(buf, []byte("ping")) { - t.Fatalf("bad: %v", buf) - } - conn.Write([]byte("pong")) - }() - lAddr := l.Addr().(*net.TCPAddr) - - // Create a socks server - creds := StaticCredentials{ - "foo": "bar", - } - cator := UserPassAuthenticator{Credentials: creds} - conf := &Config{ - AuthMethods: []Authenticator{cator}, - Logger: log.New(os.Stdout, "", log.LstdFlags), - } - serv, err := New(conf) - if err != nil { - t.Fatalf("err: %v", err) - } - - // Start listening - go func() { - if err := serv.ListenAndServe("tcp", "127.0.0.1:12365"); err != nil { - t.Fatalf("err: %v", err) - } - }() - time.Sleep(10 * time.Millisecond) - - // Get a local conn - conn, err := net.Dial("tcp", "127.0.0.1:12365") - if err != nil { - t.Fatalf("err: %v", err) - } - - // Connect, auth and connec to local - req := bytes.NewBuffer(nil) - req.Write([]byte{5}) - req.Write([]byte{2, NoAuth, UserPassAuth}) - req.Write([]byte{1, 3, 'f', 'o', 'o', 3, 'b', 'a', 'r'}) - req.Write([]byte{5, 1, 0, 1, 127, 0, 0, 1}) - - port := []byte{0, 0} - binary.BigEndian.PutUint16(port, uint16(lAddr.Port)) - req.Write(port) - - // Send a ping - req.Write([]byte("ping")) - - // Send all the bytes - conn.Write(req.Bytes()) - - // Verify response - expected := []byte{ - socks5Version, UserPassAuth, - 1, authSuccess, - 5, - 0, - 0, - 1, - 127, 0, 0, 1, - 0, 0, - 'p', 'o', 'n', 'g', - } - out := make([]byte, len(expected)) - - conn.SetDeadline(time.Now().Add(time.Second)) - if _, err := io.ReadAtLeast(conn, out, len(out)); err != nil { - t.Fatalf("err: %v", err) - } - - // Ignore the port - out[12] = 0 - out[13] = 0 - - if !bytes.Equal(out, expected) { - t.Fatalf("bad: %v", out) - } -}