mirror of
https://github.com/pomerium/pomerium.git
synced 2025-04-30 02:46:30 +02:00
55 lines
1.8 KiB
Go
55 lines
1.8 KiB
Go
package cache
|
|
|
|
import (
|
|
"crypto/tls"
|
|
"crypto/x509"
|
|
"encoding/base64"
|
|
"fmt"
|
|
"io/ioutil"
|
|
|
|
"google.golang.org/grpc"
|
|
|
|
"github.com/pomerium/pomerium/config"
|
|
internal_databroker "github.com/pomerium/pomerium/internal/databroker"
|
|
"github.com/pomerium/pomerium/internal/log"
|
|
"github.com/pomerium/pomerium/pkg/cryptutil"
|
|
"github.com/pomerium/pomerium/pkg/grpc/databroker"
|
|
)
|
|
|
|
// A DataBrokerServer implements the data broker service interface.
|
|
type DataBrokerServer struct {
|
|
databroker.DataBrokerServiceServer
|
|
}
|
|
|
|
// NewDataBrokerServer creates a new databroker service server.
|
|
func NewDataBrokerServer(grpcServer *grpc.Server, opts config.Options) (*DataBrokerServer, error) {
|
|
key, err := base64.StdEncoding.DecodeString(opts.SharedKey)
|
|
if err != nil || len(key) != cryptutil.DefaultKeySize {
|
|
return nil, fmt.Errorf("shared key is required and must be %d bytes long", cryptutil.DefaultKeySize)
|
|
}
|
|
|
|
caCertPool := x509.NewCertPool()
|
|
if caCert, err := ioutil.ReadFile(opts.DataBrokerStorageCAFile); err == nil {
|
|
caCertPool.AppendCertsFromPEM(caCert)
|
|
} else {
|
|
log.Warn().Err(err).Msg("failed to read databroker CA file")
|
|
}
|
|
tlsConfig := &tls.Config{
|
|
RootCAs: caCertPool,
|
|
// nolint: gosec
|
|
InsecureSkipVerify: opts.DataBrokerStorageCertSkipVerify,
|
|
}
|
|
if opts.DataBrokerCertificate != nil {
|
|
tlsConfig.Certificates = []tls.Certificate{*opts.DataBrokerCertificate}
|
|
}
|
|
|
|
internalSrv := internal_databroker.New(
|
|
internal_databroker.WithSecret(key),
|
|
internal_databroker.WithStorageType(opts.DataBrokerStorageType),
|
|
internal_databroker.WithStorageConnectionString(opts.DataBrokerStorageConnectionString),
|
|
internal_databroker.WithStorageTLSConfig(tlsConfig),
|
|
)
|
|
srv := &DataBrokerServer{DataBrokerServiceServer: internalSrv}
|
|
databroker.RegisterDataBrokerServiceServer(grpcServer, srv)
|
|
return srv, nil
|
|
}
|