From 7781f2f1dc1cc93179e99202d49479dbeebb29f9 Mon Sep 17 00:00:00 2001 From: Ad Generation Date: Wed, 23 Sep 2020 00:32:49 +0900 Subject: [PATCH 1/2] WIP: feat: add ADGeneration Cookie sync --- adapters/adgeneration/usersync.go | 12 ++++++++++++ adapters/adgeneration/usersync_test.go | 25 +++++++++++++++++++++++++ config/config.go | 3 ++- usersync/usersyncers/syncer.go | 2 ++ 4 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 adapters/adgeneration/usersync.go create mode 100644 adapters/adgeneration/usersync_test.go diff --git a/adapters/adgeneration/usersync.go b/adapters/adgeneration/usersync.go new file mode 100644 index 00000000000..844c33da649 --- /dev/null +++ b/adapters/adgeneration/usersync.go @@ -0,0 +1,12 @@ +package adgeneration + +import ( + "text/template" + + "github.com/prebid/prebid-server/adapters" + "github.com/prebid/prebid-server/usersync" +) + +func NewAdgenerationSyncer(temp *template.Template) usersync.Usersyncer { + return adapters.NewSyncer("adgeneration", 0, temp, adapters.SyncTypeRedirect) +} diff --git a/adapters/adgeneration/usersync_test.go b/adapters/adgeneration/usersync_test.go new file mode 100644 index 00000000000..f0528a530a9 --- /dev/null +++ b/adapters/adgeneration/usersync_test.go @@ -0,0 +1,25 @@ +package adgeneration + +import ( + "testing" + "text/template" + + "github.com/prebid/prebid-server/privacy" + "github.com/stretchr/testify/assert" +) + +func TestAdgenerationSyncer(t *testing.T) { + syncURL := "https://d.socdm.com/cookie?redirect_url=https%3A%2F%2Fprebid.adnxs.com%2Fpbs%2Fv1%2Fsetuid%3Fbidder%3Dadnxs%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%24UID" + syncURLTemplate := template.Must( + template.New("sync-template").Parse(syncURL), + ) + + syncer := NewAdgenerationSyncer(syncURLTemplate) + syncInfo, err := syncer.GetUsersyncInfo(privacy.Policies{}) + + assert.NoError(t, err) + assert.Equal(t, "https://d.socdm.com/cookie?redirect_url=https%3A%2F%2Fprebid.adnxs.com%2Fpbs%2Fv1%2Fsetuid%3Fbidder%3Dadnxs%26gdpr%3D%26gdpr_consent%3D%26uid%3D%24UID", syncInfo.URL) + assert.Equal(t, "redirect", syncInfo.Type) + assert.EqualValues(t, 0, syncer.GDPRVendorID()) + assert.Equal(t, false, syncInfo.SupportCORS) +} diff --git a/config/config.go b/config/config.go index dd660992d89..e831d7a4108 100755 --- a/config/config.go +++ b/config/config.go @@ -677,7 +677,8 @@ func (cfg *Configuration) setDerivedDefaults() { externalURL := cfg.ExternalURL setDefaultUsersync(cfg.Adapters, openrtb_ext.Bidder33Across, "https://ic.tynt.com/r/d?m=xch&rt=html&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&ru="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3D33across%26uid%3D33XUSERID33X&id=zzz000000000002zzz") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderAdform, "https://cm.adform.net/cookie?redirect_url="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dadform%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%24UID") - // openrtb_ext.BidderAdgeneration doesn't have a good default. + // WIP + setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderAdgeneration, "https://d.socdm.com/cookie?redirect_url="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fgdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%24UID") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderAdkernel, "https://sync.adkernel.com/user-sync?t=image&gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&r="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dadkernel%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%7BUID%7D") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderAdkernelAdn, "https://tag.adkernel.com/syncr?gdpr={{.GDPR}}&gdpr_consent={{.GDPRConsent}}&us_privacy={{.USPrivacy}}&r="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3DadkernelAdn%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%7BUID%7D") setDefaultUsersync(cfg.Adapters, openrtb_ext.BidderAdpone, "https://usersync.adpone.com/csync?redir="+url.QueryEscape(externalURL)+"%2Fsetuid%3Fbidder%3Dadpone%26gdpr%3D{{.GDPR}}%26gdpr_consent%3D{{.GDPRConsent}}%26uid%3D%7Buid%7D") diff --git a/usersync/usersyncers/syncer.go b/usersync/usersyncers/syncer.go index 5a7e306f736..19f6495de81 100755 --- a/usersync/usersyncers/syncer.go +++ b/usersync/usersyncers/syncer.go @@ -7,6 +7,7 @@ import ( "github.com/golang/glog" ttx "github.com/prebid/prebid-server/adapters/33across" "github.com/prebid/prebid-server/adapters/adform" + "github.com/prebid/prebid-server/adapters/adgeneration" "github.com/prebid/prebid-server/adapters/adkernel" "github.com/prebid/prebid-server/adapters/adkernelAdn" "github.com/prebid/prebid-server/adapters/adman" @@ -87,6 +88,7 @@ func NewSyncerMap(cfg *config.Configuration) map[openrtb_ext.BidderName]usersync insertIntoMap(cfg, syncers, openrtb_ext.Bidder33Across, ttx.New33AcrossSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderAdform, adform.NewAdformSyncer) + insertIntoMap(cfg, syncers, openrtb_ext.BidderAdgeneration, adgeneration.NewAdgenerationSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderAdkernel, adkernel.NewAdkernelSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderAdkernelAdn, adkernelAdn.NewAdkernelAdnSyncer) insertIntoMap(cfg, syncers, openrtb_ext.BidderAdman, adman.NewAdmanSyncer) From 9e29b79345c99b326b75d650e96a975235d8fdb8 Mon Sep 17 00:00:00 2001 From: Ad Generation Date: Wed, 7 Oct 2020 17:59:29 +0900 Subject: [PATCH 2/2] add: add buyerUID params. --- adapters/adgeneration/adgeneration.go | 3 +++ adapters/adgeneration/adgeneration_test.go | 5 +++-- .../adgenerationtest/exemplary/single-banner.json | 8 +++++++- .../adgenerationtest/supplemental/204-bid-response.json | 8 +++++++- .../adgenerationtest/supplemental/400-bid-response.json | 8 +++++++- .../adgenerationtest/supplemental/invalid-adg-param.json | 3 +++ .../adgenerationtest/supplemental/no-bid-response.json | 8 +++++++- 7 files changed, 37 insertions(+), 6 deletions(-) diff --git a/adapters/adgeneration/adgeneration.go b/adapters/adgeneration/adgeneration.go index 054fa7f6df3..b6bc36f4773 100644 --- a/adapters/adgeneration/adgeneration.go +++ b/adapters/adgeneration/adgeneration.go @@ -111,6 +111,9 @@ func (adg *AdgenerationAdapter) getRawQuery(id string, request *openrtb.BidReque if request.Site != nil && request.Site.Page != "" { v.Set("tp", request.Site.Page) } + if request.User != nil && request.User.BuyerUID != "" { + v.Add("xuid", request.User.BuyerUID) + } return &v } diff --git a/adapters/adgeneration/adgeneration_test.go b/adapters/adgeneration/adgeneration_test.go index 3c795ea28a8..a99b5971b26 100644 --- a/adapters/adgeneration/adgeneration_test.go +++ b/adapters/adgeneration/adgeneration_test.go @@ -26,7 +26,7 @@ func TestgetRequestUri(t *testing.T) { }, Device: &openrtb.Device{UA: "testUA", IP: "testIP"}, Site: &openrtb.Site{Page: "https://supership.com"}, - User: &openrtb.User{BuyerUID: "buyerID"}, + User: &openrtb.User{BuyerUID: "buyerUID"}, } successRequest := &openrtb.BidRequest{ ID: "test-success-bid-request", @@ -35,7 +35,7 @@ func TestgetRequestUri(t *testing.T) { }, Device: &openrtb.Device{UA: "testUA", IP: "testIP"}, Site: &openrtb.Site{Page: "https://supership.com"}, - User: &openrtb.User{BuyerUID: "buyerID"}, + User: &openrtb.User{BuyerUID: "buyerUID"}, } numRequests := len(failedRequest.Imp) @@ -74,6 +74,7 @@ func TestgetRequestUri(t *testing.T) { "adapterver": bidder.version, "size": getSizes(&successRequest.Imp[index]), "tp": successRequest.Site.Name, + "xuid": successRequest.User.BuyerUID, } for key, expectedValue := range expectQueries { actualValue := rawQuery.Get(key) diff --git a/adapters/adgeneration/adgenerationtest/exemplary/single-banner.json b/adapters/adgeneration/adgenerationtest/exemplary/single-banner.json index 10bf1c4a0c0..94a1fb5c88e 100644 --- a/adapters/adgeneration/adgenerationtest/exemplary/single-banner.json +++ b/adapters/adgeneration/adgenerationtest/exemplary/single-banner.json @@ -4,6 +4,9 @@ "site": { "page": "http://example.com/test.html" }, + "user": { + "buyeruid": "buyerUID" + }, "imp": [ { "id": "some-impression-id", @@ -31,6 +34,9 @@ "site": { "page": "http://example.com/test.html" }, + "user": { + "buyeruid": "buyerUID" + }, "imp": [ { "id": "some-impression-id", @@ -52,7 +58,7 @@ "tmax": 500 }, "expectedRequest":{ - "uri": "https://d.socdm.com/adsv/v1?adapterver=1.0.1¤cy=JPY&hb=true&id=58278&posall=SSPLOC&sdkname=prebidserver&sdktype=0&size=300%C3%97250&t=json3&tp=http%3A%2F%2Fexample.com%2Ftest.html", + "uri": "https://d.socdm.com/adsv/v1?adapterver=1.0.1¤cy=JPY&hb=true&id=58278&posall=SSPLOC&sdkname=prebidserver&sdktype=0&size=300%C3%97250&t=json3&tp=http%3A%2F%2Fexample.com%2Ftest.html&xuid=buyerUID", "headers": { "Accept": [ "application/json" diff --git a/adapters/adgeneration/adgenerationtest/supplemental/204-bid-response.json b/adapters/adgeneration/adgenerationtest/supplemental/204-bid-response.json index bc469a1e3a9..7aac81bf3af 100644 --- a/adapters/adgeneration/adgenerationtest/supplemental/204-bid-response.json +++ b/adapters/adgeneration/adgenerationtest/supplemental/204-bid-response.json @@ -4,6 +4,9 @@ "site": { "page": "http://example.com/test.html" }, + "user": { + "buyeruid": "buyerUID" + }, "imp": [ { "id": "some-impression-id", @@ -31,6 +34,9 @@ "site": { "page": "http://example.com/test.html" }, + "user": { + "buyeruid": "buyerUID" + }, "imp": [ { "id": "some-impression-id", @@ -52,7 +58,7 @@ "tmax": 500 }, "expectedRequest":{ - "uri": "https://d.socdm.com/adsv/v1?adapterver=1.0.1¤cy=JPY&hb=true&id=58278&posall=SSPLOC&sdkname=prebidserver&sdktype=0&size=300%C3%97250&t=json3&tp=http%3A%2F%2Fexample.com%2Ftest.html", + "uri": "https://d.socdm.com/adsv/v1?adapterver=1.0.1¤cy=JPY&hb=true&id=58278&posall=SSPLOC&sdkname=prebidserver&sdktype=0&size=300%C3%97250&t=json3&tp=http%3A%2F%2Fexample.com%2Ftest.html&xuid=buyerUID", "headers": { "Accept": [ "application/json" diff --git a/adapters/adgeneration/adgenerationtest/supplemental/400-bid-response.json b/adapters/adgeneration/adgenerationtest/supplemental/400-bid-response.json index 6ac92d9a38b..0a4c2e311df 100644 --- a/adapters/adgeneration/adgenerationtest/supplemental/400-bid-response.json +++ b/adapters/adgeneration/adgenerationtest/supplemental/400-bid-response.json @@ -4,6 +4,9 @@ "site": { "page": "http://example.com/test.html" }, + "user": { + "buyeruid": "buyerUID" + }, "imp": [ { "id": "some-impression-id", @@ -31,6 +34,9 @@ "site": { "page": "http://example.com/test.html" }, + "user": { + "buyeruid": "buyerUID" + }, "imp": [ { "id": "some-impression-id", @@ -52,7 +58,7 @@ "tmax": 500 }, "expectedRequest":{ - "uri": "https://d.socdm.com/adsv/v1?adapterver=1.0.1¤cy=JPY&hb=true&id=58278&posall=SSPLOC&sdkname=prebidserver&sdktype=0&size=300%C3%97250&t=json3&tp=http%3A%2F%2Fexample.com%2Ftest.html", + "uri": "https://d.socdm.com/adsv/v1?adapterver=1.0.1¤cy=JPY&hb=true&id=58278&posall=SSPLOC&sdkname=prebidserver&sdktype=0&size=300%C3%97250&t=json3&tp=http%3A%2F%2Fexample.com%2Ftest.html&xuid=buyerUID", "headers": { "Accept": [ "application/json" diff --git a/adapters/adgeneration/adgenerationtest/supplemental/invalid-adg-param.json b/adapters/adgeneration/adgenerationtest/supplemental/invalid-adg-param.json index 4353ceaf687..28591ab2b77 100644 --- a/adapters/adgeneration/adgenerationtest/supplemental/invalid-adg-param.json +++ b/adapters/adgeneration/adgenerationtest/supplemental/invalid-adg-param.json @@ -4,6 +4,9 @@ "site": { "page": "http://example.com/test.html" }, + "user": { + "buyeruid": "buyerUID" + }, "imp": [ { "id": "some-impression-id", diff --git a/adapters/adgeneration/adgenerationtest/supplemental/no-bid-response.json b/adapters/adgeneration/adgenerationtest/supplemental/no-bid-response.json index a0abb66d039..fdb9dfeb30b 100644 --- a/adapters/adgeneration/adgenerationtest/supplemental/no-bid-response.json +++ b/adapters/adgeneration/adgenerationtest/supplemental/no-bid-response.json @@ -4,6 +4,9 @@ "site": { "page": "http://example.com/test.html" }, + "user": { + "buyeruid": "buyerUID" + }, "imp": [ { "id": "some-impression-id", @@ -31,6 +34,9 @@ "site": { "page": "http://example.com/test.html" }, + "user": { + "buyeruid": "buyerUID" + }, "imp": [ { "id": "some-impression-id", @@ -52,7 +58,7 @@ "tmax": 500 }, "expectedRequest":{ - "uri": "https://d.socdm.com/adsv/v1?adapterver=1.0.1¤cy=JPY&hb=true&id=58278&posall=SSPLOC&sdkname=prebidserver&sdktype=0&size=300%C3%97250&t=json3&tp=http%3A%2F%2Fexample.com%2Ftest.html", + "uri": "https://d.socdm.com/adsv/v1?adapterver=1.0.1¤cy=JPY&hb=true&id=58278&posall=SSPLOC&sdkname=prebidserver&sdktype=0&size=300%C3%97250&t=json3&tp=http%3A%2F%2Fexample.com%2Ftest.html&xuid=buyerUID", "headers": { "Accept": [ "application/json"