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  }