github.com/prebid/prebid-server@v0.275.0/experiment/adscert/inprocesssigner.go (about)

     1  package adscert
     2  
     3  import (
     4  	"crypto/rand"
     5  	"github.com/IABTechLab/adscert/pkg/adscert/api"
     6  	"github.com/IABTechLab/adscert/pkg/adscert/discovery"
     7  	"github.com/IABTechLab/adscert/pkg/adscert/signatory"
     8  	"github.com/benbjohnson/clock"
     9  	"github.com/prebid/prebid-server/config"
    10  	"time"
    11  )
    12  
    13  // inProcessSigner holds the signatory to add adsCert header to requests using in process go library
    14  type inProcessSigner struct {
    15  	signatory signatory.AuthenticatedConnectionsSignatory
    16  }
    17  
    18  // Sign adds adsCert header to requests using in process go library
    19  func (ips *inProcessSigner) Sign(destinationURL string, body []byte) (string, error) {
    20  	req := &api.AuthenticatedConnectionSignatureRequest{
    21  		RequestInfo: createRequestInfo(destinationURL, body),
    22  	}
    23  	signatureResponse, err := ips.signatory.SignAuthenticatedConnection(req)
    24  	if err != nil {
    25  		return "", err
    26  	}
    27  	return getSignatureMessage(signatureResponse)
    28  }
    29  
    30  func newInProcessSigner(inProcessSignerConfig config.AdsCertInProcess) (*inProcessSigner, error) {
    31  	return &inProcessSigner{
    32  		signatory: signatory.NewLocalAuthenticatedConnectionsSignatory(
    33  			inProcessSignerConfig.Origin,
    34  			rand.Reader,
    35  			clock.New(),
    36  			discovery.NewDefaultDnsResolver(),
    37  			discovery.NewDefaultDomainStore(),
    38  			time.Duration(inProcessSignerConfig.DNSCheckIntervalInSeconds)*time.Second,
    39  			time.Duration(inProcessSignerConfig.DNSRenewalIntervalInSeconds)*time.Second,
    40  			[]string{inProcessSignerConfig.PrivateKey}),
    41  	}, nil
    42  }