github.com/letsencrypt/boulder@v0.20251208.0/test/inmem/nonce/nonce.go (about) 1 package inmemnonce 2 3 import ( 4 "context" 5 6 "github.com/go-jose/go-jose/v4" 7 "google.golang.org/grpc" 8 "google.golang.org/protobuf/types/known/emptypb" 9 10 "github.com/letsencrypt/boulder/nonce" 11 noncepb "github.com/letsencrypt/boulder/nonce/proto" 12 ) 13 14 // NonceService implements noncepb.NonceServiceClient for tests. 15 type NonceService struct { 16 noncepb.NonceServiceClient 17 Impl *nonce.NonceService 18 } 19 20 var _ noncepb.NonceServiceClient = &NonceService{} 21 22 func (ns *NonceService) Nonce(ctx context.Context, req *emptypb.Empty, opts ...grpc.CallOption) (*noncepb.NonceMessage, error) { 23 return ns.Impl.Nonce(ctx, req) 24 } 25 26 func (ns *NonceService) Redeem(ctx context.Context, req *noncepb.NonceMessage, opts ...grpc.CallOption) (*noncepb.ValidMessage, error) { 27 return ns.Impl.Redeem(ctx, req) 28 } 29 30 // AsSource returns a wrapper type that implements jose.NonceSource using this 31 // inmemory service. This is useful so that tests can get nonces for signing 32 // their JWS that will be accepted by the test WFE configured using this service. 33 func (ns *NonceService) AsSource() jose.NonceSource { 34 return nonceServiceAdapter{ns} 35 } 36 37 // nonceServiceAdapter changes the gRPC nonce service interface to the one 38 // required by jose. Used only for tests. 39 type nonceServiceAdapter struct { 40 noncepb.NonceServiceClient 41 } 42 43 // Nonce returns a nonce, implementing the jose.NonceSource interface 44 func (nsa nonceServiceAdapter) Nonce() (string, error) { 45 resp, err := nsa.NonceServiceClient.Nonce(context.Background(), &emptypb.Empty{}) 46 if err != nil { 47 return "", err 48 } 49 return resp.Nonce, nil 50 } 51 52 var _ jose.NonceSource = nonceServiceAdapter{}