loopd: add TLS config to listenerCfg struct

As a preparation to be able to listen on a TLS enabled listener, we add
a TLS config parameter to the listener setup functions.
pull/286/head
Oliver Gugger 4 years ago
parent d3ede8d9e9
commit 17e0165d4c
No known key found for this signature in database
GPG Key ID: 8E4256593F177720

@ -2,6 +2,7 @@ package loopd
import ( import (
"context" "context"
"crypto/tls"
"errors" "errors"
"fmt" "fmt"
"net" "net"
@ -29,11 +30,13 @@ var (
// listenerCfg holds closures used to retrieve listeners for the gRPC services. // listenerCfg holds closures used to retrieve listeners for the gRPC services.
type listenerCfg struct { type listenerCfg struct {
// grpcListener returns a listener to use for the gRPC server. // grpcListener returns a TLS listener to use for the gRPC server, based
grpcListener func() (net.Listener, error) // on the passed TLS configuration.
grpcListener func(*tls.Config) (net.Listener, error)
// restListener returns a listener to use for the REST proxy. // restListener returns a TLS listener to use for the REST proxy, based
restListener func() (net.Listener, error) // on the passed TLS configuration.
restListener func(*tls.Config) (net.Listener, error)
// getLnd returns a grpc connection to an lnd instance. // getLnd returns a grpc connection to an lnd instance.
getLnd func(lndclient.Network, *lndConfig) (*lndclient.GrpcLndServices, getLnd func(lndclient.Network, *lndConfig) (*lndclient.GrpcLndServices,
@ -175,7 +178,7 @@ func (d *Daemon) startWebServers() error {
// Next, start the gRPC server listening for HTTP/2 connections. // Next, start the gRPC server listening for HTTP/2 connections.
log.Infof("Starting gRPC listener") log.Infof("Starting gRPC listener")
d.grpcListener, err = d.listenerCfg.grpcListener() d.grpcListener, err = d.listenerCfg.grpcListener(nil)
if err != nil { if err != nil {
return fmt.Errorf("RPC server unable to listen on %s: %v", return fmt.Errorf("RPC server unable to listen on %s: %v",
d.cfg.RPCListen, err) d.cfg.RPCListen, err)
@ -213,7 +216,7 @@ func (d *Daemon) startWebServers() error {
return err return err
} }
d.restListener, err = d.listenerCfg.restListener() d.restListener, err = d.listenerCfg.restListener(nil)
if err != nil { if err != nil {
return fmt.Errorf("REST proxy unable to listen on %s: %v", return fmt.Errorf("REST proxy unable to listen on %s: %v",
d.cfg.RESTListen, err) d.cfg.RESTListen, err)

@ -2,6 +2,7 @@ package loopd
import ( import (
"context" "context"
"crypto/tls"
"fmt" "fmt"
"net" "net"
"os" "os"
@ -51,22 +52,32 @@ type RPCConfig struct {
// and RPCConfig. // and RPCConfig.
func newListenerCfg(config *Config, rpcCfg RPCConfig) *listenerCfg { func newListenerCfg(config *Config, rpcCfg RPCConfig) *listenerCfg {
return &listenerCfg{ return &listenerCfg{
grpcListener: func() (net.Listener, error) { grpcListener: func(tlsCfg *tls.Config) (net.Listener, error) {
// If a custom RPC listener is set, we will listen on // If a custom RPC listener is set, we will listen on
// it instead of the regular tcp socket. // it instead of the regular tcp socket.
if rpcCfg.RPCListener != nil { if rpcCfg.RPCListener != nil {
return rpcCfg.RPCListener, nil return rpcCfg.RPCListener, nil
} }
return net.Listen("tcp", config.RPCListen) listener, err := net.Listen("tcp", config.RPCListen)
if err != nil {
return nil, err
}
return tls.NewListener(listener, tlsCfg), nil
}, },
restListener: func() (net.Listener, error) { restListener: func(tlsCfg *tls.Config) (net.Listener, error) {
// If a custom RPC listener is set, we disable REST. // If a custom RPC listener is set, we disable REST.
if rpcCfg.RPCListener != nil { if rpcCfg.RPCListener != nil {
return nil, nil return nil, nil
} }
return net.Listen("tcp", config.RESTListen) listener, err := net.Listen("tcp", config.RESTListen)
if err != nil {
return nil, err
}
return tls.NewListener(listener, tlsCfg), nil
}, },
getLnd: func(network lndclient.Network, cfg *lndConfig) ( getLnd: func(network lndclient.Network, cfg *lndConfig) (
*lndclient.GrpcLndServices, error) { *lndclient.GrpcLndServices, error) {

Loading…
Cancel
Save