github.com/prebid/prebid-server@v0.275.0/experiment/adscert/signer.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/logger" 7 "github.com/IABTechLab/adscert/pkg/adscert/signatory" 8 "github.com/prebid/prebid-server/config" 9 ) 10 11 const SignHeader = "X-Ads-Cert-Auth" 12 13 // Signer represents interface to access request Ads Cert signing functionality 14 type Signer interface { 15 Sign(destinationURL string, body []byte) (string, error) 16 } 17 18 type NilSigner struct { 19 } 20 21 func (ns *NilSigner) Sign(destinationURL string, body []byte) (string, error) { 22 return "", nil 23 } 24 25 func NewAdCertsSigner(experimentAdCertsConfig config.ExperimentAdsCert) (Signer, error) { 26 logger.SetLoggerImpl(&SignerLogger{}) 27 if experimentAdCertsConfig.Mode == config.AdCertsSignerModeInprocess { 28 return newInProcessSigner(experimentAdCertsConfig.InProcess) 29 } 30 if experimentAdCertsConfig.Mode == config.AdCertsSignerModeRemote { 31 return newRemoteSigner(experimentAdCertsConfig.Remote) 32 } 33 return &NilSigner{}, nil 34 } 35 36 func createRequestInfo(destinationURL string, body []byte) *api.RequestInfo { 37 // The RequestInfo proto contains details about the individual ad request 38 // being signed. A SetRequestInfo helper function derives a hash of the 39 // destination URL and body, setting these value on the RequestInfo message. 40 reqInfo := &api.RequestInfo{} 41 signatory.SetRequestInfo(reqInfo, destinationURL, body) 42 return reqInfo 43 } 44 45 func getSignatureMessage(signatureResponse *api.AuthenticatedConnectionSignatureResponse) (string, error) { 46 if signatureResponse.GetSignatureOperationStatus() == api.SignatureOperationStatus_SIGNATURE_OPERATION_STATUS_OK { 47 signatureMessage := signatureResponse.RequestInfo.SignatureInfo[0].SignatureMessage 48 return signatureMessage, nil 49 } 50 return "", fmt.Errorf("error signing request: %s", signatureResponse.GetSignatureOperationStatus()) 51 }