evcc-io/util/cloud/client.go

49 lines
959 B
Go

package cloud
import (
"crypto/tls"
"crypto/x509"
"fmt"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials"
)
var Host = "cloud.evcc.io:8080"
var (
conn *grpc.ClientConn
)
func loadTLSCredentials() (*tls.Config, error) {
certPool := x509.NewCertPool()
if !certPool.AppendCertsFromPEM(caPEM()) {
return nil, fmt.Errorf("failed to add CA certificate")
}
// create the credentials and return it
config := &tls.Config{
RootCAs: certPool,
}
return config, nil
}
func Connection(uri string) (*grpc.ClientConn, error) {
var err error
if conn == nil {
var tlsConfig *tls.Config
if tlsConfig, err = loadTLSCredentials(); err != nil {
return nil, fmt.Errorf("cannot load TLS credentials: %w", err)
}
transportOption := grpc.WithInsecure()
if tlsConfig != nil {
transportOption = grpc.WithTransportCredentials(credentials.NewTLS(tlsConfig))
}
conn, err = grpc.Dial(uri, transportOption)
}
return conn, err
}