49 lines
959 B
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
|
|
}
|