91 lines
2.6 KiB
Go
91 lines
2.6 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"flag"
|
|
|
|
"google.golang.org/grpc/health"
|
|
healthpb "google.golang.org/grpc/health/grpc_health_v1"
|
|
|
|
"github.com/letsencrypt/boulder/cmd"
|
|
corepb "github.com/letsencrypt/boulder/core/proto"
|
|
bgrpc "github.com/letsencrypt/boulder/grpc"
|
|
"github.com/letsencrypt/boulder/nonce"
|
|
noncepb "github.com/letsencrypt/boulder/nonce/proto"
|
|
)
|
|
|
|
type config struct {
|
|
NonceService struct {
|
|
cmd.ServiceConfig
|
|
Syslog cmd.SyslogConfig
|
|
MaxUsed int
|
|
NoncePrefix string
|
|
}
|
|
}
|
|
|
|
type nonceServer struct {
|
|
noncepb.UnimplementedNonceServiceServer
|
|
inner *nonce.NonceService
|
|
}
|
|
|
|
func (ns *nonceServer) Redeem(ctx context.Context, msg *noncepb.NonceMessage) (*noncepb.ValidMessage, error) {
|
|
return &noncepb.ValidMessage{Valid: ns.inner.Valid(msg.Nonce)}, nil
|
|
}
|
|
|
|
func (ns *nonceServer) Nonce(_ context.Context, _ *corepb.Empty) (*noncepb.NonceMessage, error) {
|
|
nonce, err := ns.inner.Nonce()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &noncepb.NonceMessage{Nonce: nonce}, nil
|
|
}
|
|
|
|
func main() {
|
|
grpcAddr := flag.String("addr", "", "gRPC listen address override")
|
|
debugAddr := flag.String("debug-addr", "", "Debug server address override")
|
|
prefixOverride := flag.String("prefix", "", "Override the configured nonce prefix")
|
|
configFile := flag.String("config", "", "File path to the configuration file for this service")
|
|
flag.Parse()
|
|
|
|
var c config
|
|
err := cmd.ReadConfigFile(*configFile, &c)
|
|
cmd.FailOnError(err, "Reading JSON config file into config structure")
|
|
|
|
if *grpcAddr != "" {
|
|
c.NonceService.GRPC.Address = *grpcAddr
|
|
}
|
|
if *debugAddr != "" {
|
|
c.NonceService.DebugAddr = *debugAddr
|
|
}
|
|
if *prefixOverride != "" {
|
|
c.NonceService.NoncePrefix = *prefixOverride
|
|
}
|
|
|
|
scope, logger := cmd.StatsAndLogging(c.NonceService.Syslog, c.NonceService.DebugAddr)
|
|
defer logger.AuditPanic()
|
|
logger.Info(cmd.VersionString())
|
|
|
|
ns, err := nonce.NewNonceService(scope, c.NonceService.MaxUsed, c.NonceService.NoncePrefix)
|
|
cmd.FailOnError(err, "Failed to initialize nonce service")
|
|
|
|
tlsConfig, err := c.NonceService.TLS.Load()
|
|
cmd.FailOnError(err, "tlsConfig config")
|
|
|
|
nonceServer := &nonceServer{inner: ns}
|
|
|
|
serverMetrics := bgrpc.NewServerMetrics(scope)
|
|
grpcSrv, l, err := bgrpc.NewServer(c.NonceService.GRPC, tlsConfig, serverMetrics, cmd.Clock())
|
|
cmd.FailOnError(err, "Unable to setup nonce service gRPC server")
|
|
noncepb.RegisterNonceServiceServer(grpcSrv, nonceServer)
|
|
hs := health.NewServer()
|
|
healthpb.RegisterHealthServer(grpcSrv, hs)
|
|
|
|
go cmd.CatchSignals(logger, func() {
|
|
hs.Shutdown()
|
|
grpcSrv.GracefulStop()
|
|
})
|
|
|
|
err = cmd.FilterShutdownErrors(grpcSrv.Serve(l))
|
|
cmd.FailOnError(err, "Nonce service gRPC server failed")
|
|
}
|