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 }