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  }