From ae291f907a9cf0742934b11472731d3e7e9fd58f Mon Sep 17 00:00:00 2001 From: Andrea Tumbarello Date: Tue, 23 Jan 2024 07:44:49 +0100 Subject: [PATCH] AIDEM: Added use to macros library (#3403) Co-authored-by: Giovanni Sollazzo Co-authored-by: AndreaC <67786179+darkstarac@users.noreply.github.com> Co-authored-by: darkstar Co-authored-by: AndreaT --- adapters/aidem/aidem.go | 50 +++++++++++++++++-- adapters/aidem/aidem_test.go | 4 +- .../aidemtest/exemplary/multi-format.json | 2 +- .../exemplary/multi-imps-multi-bid.json | 2 +- .../exemplary/multi-imps-single-bid.json | 2 +- .../aidem/aidemtest/exemplary/no-bid.json | 2 +- .../aidemtest/exemplary/optional-params.json | 2 +- .../aidemtest/exemplary/simple-banner.json | 2 +- .../aidemtest/exemplary/simple-video.json | 2 +- ...valid-req-400-status-code-bad-request.json | 2 +- ...nvalid-res-200-status-code-empty-bids.json | 2 +- .../invalid-resp-multi-imp-type.json | 2 +- ...valid-req-200-bid-response-from-aidem.json | 2 +- .../valid-req-204-response-from-aidem.json | 2 +- openrtb_ext/imp_aidem.go | 8 +-- static/bidder-info/aidem.yaml | 4 +- 16 files changed, 65 insertions(+), 25 deletions(-) diff --git a/adapters/aidem/aidem.go b/adapters/aidem/aidem.go index dc8d42a07ed..79238c1b234 100644 --- a/adapters/aidem/aidem.go +++ b/adapters/aidem/aidem.go @@ -4,16 +4,18 @@ import ( "encoding/json" "fmt" "net/http" + "text/template" "github.com/prebid/openrtb/v19/openrtb2" "github.com/prebid/prebid-server/v2/adapters" "github.com/prebid/prebid-server/v2/config" "github.com/prebid/prebid-server/v2/errortypes" + "github.com/prebid/prebid-server/v2/macros" "github.com/prebid/prebid-server/v2/openrtb_ext" ) type adapter struct { - endpoint string + EndpointTemplate *template.Template } func (a *adapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) { @@ -23,12 +25,22 @@ func (a *adapter) MakeRequests(request *openrtb2.BidRequest, reqInfo *adapters.E return nil, []error{err} } + impExt, err := getImpressionExt(&request.Imp[0]) + if err != nil { + return nil, []error{err} + } + + url, err := a.buildEndpointURL(impExt) + if err != nil { + return nil, []error{err} + } + headers := http.Header{} headers.Add("Content-Type", "application/json;charset=utf-8") return []*adapters.RequestData{{ Method: "POST", - Uri: a.endpoint, + Uri: url, Body: reqJson, Headers: headers, }}, nil @@ -81,9 +93,15 @@ func (a *adapter) MakeBids(internalRequest *openrtb2.BidRequest, externalRequest // Builder builds a new instance of the AIDEM adapter for the given bidder with the given config. func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server config.Server) (adapters.Bidder, error) { - return &adapter{ - endpoint: config.Endpoint, - }, nil + urlTemplate, err := template.New("endpointTemplate").Parse(config.Endpoint) + if err != nil { + return nil, fmt.Errorf("unable to parse endpoint url template: %v", err) + } + + bidder := &adapter{ + EndpointTemplate: urlTemplate, + } + return bidder, nil } func getMediaTypeForBid(bid openrtb2.Bid) (openrtb_ext.BidType, error) { @@ -100,3 +118,25 @@ func getMediaTypeForBid(bid openrtb2.Bid) (openrtb_ext.BidType, error) { return "", fmt.Errorf("Unable to fetch mediaType in multi-format: %s", bid.ImpID) } } + +func getImpressionExt(imp *openrtb2.Imp) (*openrtb_ext.ExtImpAidem, error) { + var bidderExt adapters.ExtImpBidder + if err := json.Unmarshal(imp.Ext, &bidderExt); err != nil { + return nil, &errortypes.BadInput{ + Message: err.Error(), + } + } + var AIDEMExt openrtb_ext.ExtImpAidem + if err := json.Unmarshal(bidderExt.Bidder, &AIDEMExt); err != nil { + return nil, &errortypes.BadInput{ + Message: err.Error(), + } + } + return &AIDEMExt, nil +} + +// Builds enpoint url based on adapter-specific pub settings from imp.ext +func (a *adapter) buildEndpointURL(params *openrtb_ext.ExtImpAidem) (string, error) { + endpointParams := macros.EndpointTemplateParams{PublisherID: params.PublisherId} + return macros.ResolveMacros(a.EndpointTemplate, endpointParams) +} diff --git a/adapters/aidem/aidem_test.go b/adapters/aidem/aidem_test.go index 8cf6e3d16a2..558b1c040de 100644 --- a/adapters/aidem/aidem_test.go +++ b/adapters/aidem/aidem_test.go @@ -12,7 +12,7 @@ import ( func TestJsonSamples(t *testing.T) { bidder, buildErr := Builder(openrtb_ext.BidderAidem, config.Adapter{ - Endpoint: "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request", + Endpoint: "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request?billing_id={{.PublisherID}}", }, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"}) if buildErr != nil { @@ -26,5 +26,5 @@ func TestEndpointTemplateMalformed(t *testing.T) { _, buildErr := Builder(openrtb_ext.BidderAidem, config.Adapter{ Endpoint: "{{Malformed}}"}, config.Server{ExternalUrl: "http://hosturl.com", GvlID: 1, DataCenter: "2"}) - assert.Nil(t, buildErr) + assert.Error(t, buildErr) } diff --git a/adapters/aidem/aidemtest/exemplary/multi-format.json b/adapters/aidem/aidemtest/exemplary/multi-format.json index 0c940d4ba59..bc0c467b646 100644 --- a/adapters/aidem/aidemtest/exemplary/multi-format.json +++ b/adapters/aidem/aidemtest/exemplary/multi-format.json @@ -35,7 +35,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request", + "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request?billing_id=1234", "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/aidem/aidemtest/exemplary/multi-imps-multi-bid.json b/adapters/aidem/aidemtest/exemplary/multi-imps-multi-bid.json index 5c2b36948f7..68c87ee11be 100644 --- a/adapters/aidem/aidemtest/exemplary/multi-imps-multi-bid.json +++ b/adapters/aidem/aidemtest/exemplary/multi-imps-multi-bid.json @@ -41,7 +41,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request", + "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request?billing_id=1234", "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/aidem/aidemtest/exemplary/multi-imps-single-bid.json b/adapters/aidem/aidemtest/exemplary/multi-imps-single-bid.json index 9eae7101a90..e628323ad33 100644 --- a/adapters/aidem/aidemtest/exemplary/multi-imps-single-bid.json +++ b/adapters/aidem/aidemtest/exemplary/multi-imps-single-bid.json @@ -41,7 +41,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request", + "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request?billing_id=1234", "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/aidem/aidemtest/exemplary/no-bid.json b/adapters/aidem/aidemtest/exemplary/no-bid.json index 7418425f10b..c67a205ef58 100644 --- a/adapters/aidem/aidemtest/exemplary/no-bid.json +++ b/adapters/aidem/aidemtest/exemplary/no-bid.json @@ -24,7 +24,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request", + "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request?billing_id=1234", "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/aidem/aidemtest/exemplary/optional-params.json b/adapters/aidem/aidemtest/exemplary/optional-params.json index 69511fb595c..856e0c5cdf1 100644 --- a/adapters/aidem/aidemtest/exemplary/optional-params.json +++ b/adapters/aidem/aidemtest/exemplary/optional-params.json @@ -25,7 +25,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request", + "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request?billing_id=1234", "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/aidem/aidemtest/exemplary/simple-banner.json b/adapters/aidem/aidemtest/exemplary/simple-banner.json index 73db297ee42..d39ac30e459 100644 --- a/adapters/aidem/aidemtest/exemplary/simple-banner.json +++ b/adapters/aidem/aidemtest/exemplary/simple-banner.json @@ -24,7 +24,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request", + "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request?billing_id=1234", "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/aidem/aidemtest/exemplary/simple-video.json b/adapters/aidem/aidemtest/exemplary/simple-video.json index 0daaffaa8cf..94eb98cd8a1 100644 --- a/adapters/aidem/aidemtest/exemplary/simple-video.json +++ b/adapters/aidem/aidemtest/exemplary/simple-video.json @@ -27,7 +27,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request", + "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request?billing_id=1234", "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/aidem/aidemtest/supplemental/invalid-req-400-status-code-bad-request.json b/adapters/aidem/aidemtest/supplemental/invalid-req-400-status-code-bad-request.json index 3dea13ef7c9..e0a1f6e9837 100644 --- a/adapters/aidem/aidemtest/supplemental/invalid-req-400-status-code-bad-request.json +++ b/adapters/aidem/aidemtest/supplemental/invalid-req-400-status-code-bad-request.json @@ -41,7 +41,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request", + "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request?billing_id=1234", "body": { "id": "some-request-id", "imp": [ diff --git a/adapters/aidem/aidemtest/supplemental/invalid-res-200-status-code-empty-bids.json b/adapters/aidem/aidemtest/supplemental/invalid-res-200-status-code-empty-bids.json index dd64125f467..33b412b46e3 100644 --- a/adapters/aidem/aidemtest/supplemental/invalid-res-200-status-code-empty-bids.json +++ b/adapters/aidem/aidemtest/supplemental/invalid-res-200-status-code-empty-bids.json @@ -41,7 +41,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request", + "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request?billing_id=1234", "body": { "id": "some-request-id", "imp": [ diff --git a/adapters/aidem/aidemtest/supplemental/invalid-resp-multi-imp-type.json b/adapters/aidem/aidemtest/supplemental/invalid-resp-multi-imp-type.json index 95f97d31f72..0c390f6595d 100644 --- a/adapters/aidem/aidemtest/supplemental/invalid-resp-multi-imp-type.json +++ b/adapters/aidem/aidemtest/supplemental/invalid-resp-multi-imp-type.json @@ -57,7 +57,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request", + "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request?billing_id=1234", "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/aidem/aidemtest/supplemental/valid-req-200-bid-response-from-aidem.json b/adapters/aidem/aidemtest/supplemental/valid-req-200-bid-response-from-aidem.json index cbd534cd91c..16cb98baf21 100644 --- a/adapters/aidem/aidemtest/supplemental/valid-req-200-bid-response-from-aidem.json +++ b/adapters/aidem/aidemtest/supplemental/valid-req-200-bid-response-from-aidem.json @@ -44,7 +44,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request", + "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request?billing_id=1234", "body": { "id": "test-request-id", "imp": [ diff --git a/adapters/aidem/aidemtest/supplemental/valid-req-204-response-from-aidem.json b/adapters/aidem/aidemtest/supplemental/valid-req-204-response-from-aidem.json index ddd4e5a7735..d51c6da9932 100644 --- a/adapters/aidem/aidemtest/supplemental/valid-req-204-response-from-aidem.json +++ b/adapters/aidem/aidemtest/supplemental/valid-req-204-response-from-aidem.json @@ -28,7 +28,7 @@ "httpCalls": [ { "expectedRequest": { - "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request", + "uri": "https://fakezero.aidemsrv.com/ortb/v2.6/bid/request?billing_id=1234", "body": { "app": { "bundle": "com.example.app" diff --git a/openrtb_ext/imp_aidem.go b/openrtb_ext/imp_aidem.go index 59457f1eb4a..3fe00b404ff 100644 --- a/openrtb_ext/imp_aidem.go +++ b/openrtb_ext/imp_aidem.go @@ -1,8 +1,8 @@ package openrtb_ext -type ImpExtFoo struct { - SiteID string `json:"siteId"` - PublisherID string `json:"publisherId"` - PlacementID string `json:"placementId"` +type ExtImpAidem struct { + PlacementId string `json:"placementId"` + SiteId string `json:"siteId"` + PublisherId string `json:"publisherId"` RateLimit string `json:"rateLimit"` } diff --git a/static/bidder-info/aidem.yaml b/static/bidder-info/aidem.yaml index 35ea898aa8a..70f63526879 100644 --- a/static/bidder-info/aidem.yaml +++ b/static/bidder-info/aidem.yaml @@ -1,4 +1,4 @@ -endpoint: "https://zero.aidemsrv.com/ortb/v2.6/bid/request" +endpoint: "https://zero.aidemsrv.com/ortb/v2.6/bid/request?billing_id={{.PublisherID}}" maintainer: email: prebid@aidem.com modifyingVastXmlAllowed: true @@ -15,5 +15,5 @@ capabilities: - native userSync: redirect: - url: https://gum.aidemsrv.com/prebid_sync?gdpr={{.GDPR}}&consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redirect={{.RedirectURL}} + url: https://gum.aidemsrv.com/prebid_sync?gdpr={{.GDPR}}&consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&redirect={{.RedirectURL}}&gpp={{.GPP}}&gpp_sid={{.GPPSID}} userMacro: "$UID"