github.com/prebid/prebid-server@v0.275.0/experiment/adscert/remotesigner.go (about) 1 package adscert 2 3 import ( 4 "fmt" 5 "github.com/IABTechLab/adscert/pkg/adscert/api" 6 "github.com/IABTechLab/adscert/pkg/adscert/signatory" 7 "github.com/prebid/prebid-server/config" 8 "google.golang.org/grpc" 9 "google.golang.org/grpc/credentials/insecure" 10 "time" 11 ) 12 13 // remoteSigner holds the signatory to add adsCert header to requests using remote signing server 14 type remoteSigner struct { 15 signatory signatory.AuthenticatedConnectionsSignatory 16 } 17 18 // Sign adds adsCert header to requests using remote signing server 19 func (rs *remoteSigner) Sign(destinationURL string, body []byte) (string, error) { 20 signatureResponse, err := rs.signatory.SignAuthenticatedConnection( 21 &api.AuthenticatedConnectionSignatureRequest{ 22 RequestInfo: createRequestInfo(destinationURL, []byte(body)), 23 }) 24 if err != nil { 25 return "", err 26 } 27 return getSignatureMessage(signatureResponse) 28 } 29 30 func newRemoteSigner(remoteSignerConfig config.AdsCertRemote) (*remoteSigner, error) { 31 // Establish the gRPC connection that the client will use to connect to the 32 // signatory server. Secure connections are not implemented at this time. 33 opts := []grpc.DialOption{grpc.WithTransportCredentials(insecure.NewCredentials())} 34 conn, err := grpc.Dial(remoteSignerConfig.Url, opts...) 35 if err != nil { 36 return nil, fmt.Errorf("failed to dial remote signer: %v", err) 37 } 38 39 clientOpts := &signatory.AuthenticatedConnectionsSignatoryClientOptions{ 40 Timeout: time.Duration(remoteSignerConfig.SigningTimeoutMs) * time.Millisecond} 41 signatoryClient := signatory.NewAuthenticatedConnectionsSignatoryClient(conn, clientOpts) 42 return &remoteSigner{signatory: signatoryClient}, nil 43 44 }