Skip to content

Commit

Permalink
User.ext unmarshalling optimization
Browse files Browse the repository at this point in the history
  • Loading branch information
VeronikaSolovei9 committed Jul 21, 2023
1 parent aab31a3 commit bf4b27b
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 20 deletions.
39 changes: 31 additions & 8 deletions privacy/scrubber.go
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,15 @@ func NewScrubber() Scrubber {
}

func (scrubber) ScrubRequest(bidRequest *openrtb2.BidRequest, enforcement Enforcement) *openrtb2.BidRequest {
var userExtParsed map[string]json.RawMessage
userExtModified := false

if enforcement.UFPD || enforcement.Eids {
if len(bidRequest.User.Ext) != 0 {
json.Unmarshal(bidRequest.User.Ext, &userExtParsed)
}
}

if enforcement.UFPD {
// transmitUfpd covers user.ext.data, user.data, user.id, user.buyeruid, user.yob, user.gender, user.keywords, user.kwarray
// and device.{ifa, macsha1, macmd5, dpidsha1, dpidmd5, didsha1, didmd5}
Expand All @@ -97,23 +106,37 @@ func (scrubber) ScrubRequest(bidRequest *openrtb2.BidRequest, enforcement Enforc
}
if bidRequest.User != nil {
bidRequest.User.Data = nil
bidRequest.User.Ext = scrubExtIDs(bidRequest.User.Ext, "data")
bidRequest.User.ID = ""
bidRequest.User.BuyerUID = ""
bidRequest.User.Yob = 0
bidRequest.User.Gender = ""
bidRequest.User.Keywords = ""
bidRequest.User.KwArray = nil

_, hasField := userExtParsed["data"]
if hasField {
delete(userExtParsed, "data")
userExtModified = true
}
}
}
if enforcement.Eids {
//transmitEids covers user.eids and user.ext.eids
if bidRequest.User != nil {
bidRequest.User.EIDs = nil
bidRequest.User.Ext = scrubExtIDs(bidRequest.User.Ext, "eids")
_, hasField := userExtParsed["eids"]
if hasField {
delete(userExtParsed, "eids")
userExtModified = true
}
}
}

if userExtModified {
userExt, _ := json.Marshal(userExtParsed)
bidRequest.User.Ext = userExt
}

if enforcement.TID {
//remove source.tid and imp.ext.tid
if bidRequest.Source != nil {
Expand Down Expand Up @@ -268,15 +291,15 @@ func scrubGeoPrecision(geo *openrtb2.Geo) *openrtb2.Geo {
return &geoCopy
}

func scrubExtIDs(userExt json.RawMessage, fieldName string) json.RawMessage {
if len(userExt) == 0 {
return userExt
func scrubExtIDs(ext json.RawMessage, fieldName string) json.RawMessage {
if len(ext) == 0 {
return ext
}

var userExtParsed map[string]json.RawMessage
err := json.Unmarshal(userExt, &userExtParsed)
err := json.Unmarshal(ext, &userExtParsed)
if err != nil {
return userExt
return ext
}

_, hasField := userExtParsed[fieldName]
Expand All @@ -288,5 +311,5 @@ func scrubExtIDs(userExt json.RawMessage, fieldName string) json.RawMessage {
}
}

return userExt
return ext
}
51 changes: 39 additions & 12 deletions privacy/scrubber_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -317,13 +317,15 @@ func TestScrubRequest(t *testing.T) {
user.EIDs = []openrtb2.EID{{Source: "test"}}

testCases := []struct {
description string
enforcement Enforcement
expected *openrtb2.BidRequest
description string
enforcement Enforcement
userExtPresent bool
expected *openrtb2.BidRequest
}{
{
description: "enforce transmitUFPD",
enforcement: Enforcement{UFPD: true},
description: "enforce transmitUFPD with user.ext",
enforcement: Enforcement{UFPD: true},
userExtPresent: true,
expected: &openrtb2.BidRequest{
Imp: imps,
Source: source,
Expand All @@ -340,8 +342,27 @@ func TestScrubRequest(t *testing.T) {
},
},
{
description: "enforce transmitEids",
enforcement: Enforcement{Eids: true},
description: "enforce transmitUFPD without user.ext",
enforcement: Enforcement{UFPD: true},
userExtPresent: false,
expected: &openrtb2.BidRequest{
Imp: imps,
Source: source,
User: &openrtb2.User{
EIDs: []openrtb2.EID{{Source: "test"}},
Geo: user.Geo,
},
Device: &openrtb2.Device{
IP: "1.2.3.4",
IPv6: "2001:0db8:0000:0000:0000:ff00:0042:8329",
Geo: device.Geo,
},
},
},
{
description: "enforce transmitEids",
enforcement: Enforcement{Eids: true},
userExtPresent: true,
expected: &openrtb2.BidRequest{
Imp: imps,
Source: source,
Expand All @@ -358,8 +379,9 @@ func TestScrubRequest(t *testing.T) {
},
},
{
description: "enforce transmitTid",
enforcement: Enforcement{TID: true},
description: "enforce transmitTid",
enforcement: Enforcement{TID: true},
userExtPresent: true,
expected: &openrtb2.BidRequest{
Imp: []openrtb2.Imp{
{ID: "testId", Ext: json.RawMessage(`{"test":1}`)},
Expand All @@ -380,8 +402,9 @@ func TestScrubRequest(t *testing.T) {
},
},
{
description: "enforce precise Geo",
enforcement: Enforcement{PreciseGeo: true},
description: "enforce precise Geo",
enforcement: Enforcement{PreciseGeo: true},
userExtPresent: true,
expected: &openrtb2.BidRequest{
Imp: imps,
Source: source,
Expand Down Expand Up @@ -432,7 +455,11 @@ func TestScrubRequest(t *testing.T) {
User: getTestUser(),
Device: getTestDevice(),
}
bidRequest.User.Ext = json.RawMessage(`{"data": 1, "eids": 2}`)
if test.userExtPresent {
bidRequest.User.Ext = json.RawMessage(`{"data": 1, "eids": 2}`)
} else {
bidRequest.User.Ext = nil
}
bidRequest.User.EIDs = []openrtb2.EID{{Source: "test"}}

result := NewScrubber().ScrubRequest(bidRequest, test.enforcement)
Expand Down

0 comments on commit bf4b27b

Please sign in to comment.