From a1e5b587a2e842da2a0bc5b21e9eaadcb2fe2a12 Mon Sep 17 00:00:00 2001 From: Richard Ramos Date: Thu, 25 Aug 2022 16:36:04 -0400 Subject: [PATCH] feat: add flag to set wss port --- waku.go | 9 ++++++++- waku/node.go | 14 ++++++++++++-- waku/options.go | 3 ++- waku/v2/node/wakuoptions.go | 5 +++++ 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/waku.go b/waku.go index 211e1206..3736a6e8 100644 --- a/waku.go +++ b/waku.go @@ -44,7 +44,14 @@ func main() { Aliases: []string{"ws-port"}, Value: 60001, Usage: "Libp2p TCP listening port for websocket connection (0 for random)", - Destination: &options.Websocket.Port, + Destination: &options.Websocket.WSPort, + }, + &cli.IntFlag{ + Name: "websocket-secure-port", + Aliases: []string{"wss-port"}, + Value: 6443, + Usage: "Libp2p TCP listening port for secure websocket connection (0 for random, binding to 443 requires root access)", + Destination: &options.Websocket.WSSPort, }, &cli.StringFlag{ Name: "websocket-address", diff --git a/waku/node.go b/waku/node.go index c6f5c784..63200c1a 100644 --- a/waku/node.go +++ b/waku/node.go @@ -26,9 +26,11 @@ import ( "github.com/libp2p/go-libp2p-core/discovery" "github.com/libp2p/go-libp2p-core/peer" "github.com/libp2p/go-libp2p/config" + "github.com/libp2p/go-libp2p/p2p/transport/tcp" "github.com/libp2p/go-libp2p-peerstore/pstoreds" pubsub "github.com/libp2p/go-libp2p-pubsub" + ws "github.com/libp2p/go-libp2p/p2p/transport/websocket" "github.com/multiformats/go-multiaddr" rendezvous "github.com/status-im/go-waku-rendezvous" "github.com/status-im/go-waku/logging" @@ -152,11 +154,11 @@ func Execute(options Options) { } if options.Websocket.Enable { - nodeOpts = append(nodeOpts, node.WithWebsockets(options.Websocket.Address, options.Websocket.Port)) + nodeOpts = append(nodeOpts, node.WithWebsockets(options.Websocket.Address, options.Websocket.WSPort)) } if options.Websocket.Secure { - nodeOpts = append(nodeOpts, node.WithSecureWebsockets(options.Websocket.Address, options.Websocket.Port, options.Websocket.CertPath, options.Websocket.KeyPath)) + nodeOpts = append(nodeOpts, node.WithSecureWebsockets(options.Websocket.Address, options.Websocket.WSSPort, options.Websocket.CertPath, options.Websocket.KeyPath)) } if options.ShowAddresses { @@ -487,6 +489,14 @@ func printListeningAddresses(ctx context.Context, nodeOpts []node.WakuNodeOption libp2p.ListenAddrs(params.MultiAddresses()...), ) + if options.Websocket.Secure { + transports := libp2p.ChainOptions( + libp2p.Transport(tcp.NewTCPTransport), + libp2p.Transport(ws.New, ws.WithTLSConfig(params.TLSConfig())), + ) + libp2pOpts = append(libp2pOpts, transports) + } + addrFactory := params.AddressFactory() if addrFactory != nil { libp2pOpts = append(libp2pOpts, libp2p.AddrsFactory(addrFactory)) diff --git a/waku/options.go b/waku/options.go index fe8aa56b..4dc87e4f 100644 --- a/waku/options.go +++ b/waku/options.go @@ -138,7 +138,8 @@ type RESTServerOptions struct { // support type WSOptions struct { Enable bool - Port int + WSPort int + WSSPort int Address string Secure bool KeyPath string diff --git a/waku/v2/node/wakuoptions.go b/waku/v2/node/wakuoptions.go index da471ebc..83faa5bf 100644 --- a/waku/v2/node/wakuoptions.go +++ b/waku/v2/node/wakuoptions.go @@ -121,6 +121,11 @@ func (w WakuNodeParameters) Identity() config.Option { return libp2p.Identity(*w.GetPrivKey()) } +// TLSConfig returns the TLS config used for setting up secure websockets +func (w WakuNodeParameters) TLSConfig() *tls.Config { + return w.tlsConfig +} + // AddressFactory returns the address factory used by the node's host func (w WakuNodeParameters) AddressFactory() basichost.AddrsFactory { return w.addressFactory