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