diff --git a/adapters/nativo/nativo.go b/adapters/nativo/nativo.go index 6e595bbff83..14c01f26e9a 100644 --- a/adapters/nativo/nativo.go +++ b/adapters/nativo/nativo.go @@ -1,7 +1,6 @@ package nativo import ( - "encoding/json" "fmt" "net/http" @@ -9,6 +8,7 @@ import ( "github.com/prebid/prebid-server/v3/adapters" "github.com/prebid/prebid-server/v3/config" "github.com/prebid/prebid-server/v3/openrtb_ext" + "github.com/prebid/prebid-server/v3/util/jsonutil" ) type adapter struct { @@ -24,7 +24,7 @@ func Builder(bidderName openrtb_ext.BidderName, config config.Adapter, server co } func (a *adapter) MakeRequests(request *openrtb2.BidRequest, _ *adapters.ExtraRequestInfo) ([]*adapters.RequestData, []error) { - requestJSON, err := json.Marshal(request) + requestJSON, err := jsonutil.Marshal(request) if err != nil { return nil, []error{err} } @@ -54,7 +54,7 @@ func (a *adapter) MakeBids(request *openrtb2.BidRequest, externalRequest *adapte var bidResp openrtb2.BidResponse - if err := json.Unmarshal(response.Body, &bidResp); err != nil { + if err := jsonutil.Unmarshal(response.Body, &bidResp); err != nil { return nil, []error{err} } diff --git a/adapters/nativo/nativotest/exemplary/banner-app.json b/adapters/nativo/nativotest/exemplary/banner-app.json index 738d01bd9a4..ef7288d39eb 100644 --- a/adapters/nativo/nativotest/exemplary/banner-app.json +++ b/adapters/nativo/nativotest/exemplary/banner-app.json @@ -30,6 +30,11 @@ "banner": { "w": 320, "h": 50 + }, + "ext": { + "bidder": { + "placementId": 12345678 + } } } ] @@ -53,7 +58,12 @@ "w": 320, "h": 50 }, - "tagid": "ogTAGID" + "tagid": "ogTAGID", + "ext": { + "bidder": { + "placementId": 12345678 + } + } } ], "app": { diff --git a/adapters/nativo/nativotest/exemplary/banner-web.json b/adapters/nativo/nativotest/exemplary/banner-web.json index 58af89b202c..ce67bbd15f5 100644 --- a/adapters/nativo/nativotest/exemplary/banner-web.json +++ b/adapters/nativo/nativotest/exemplary/banner-web.json @@ -24,6 +24,11 @@ "banner": { "w":320, "h":50 + }, + "ext": { + "bidder": { + "placementId": 12345678 + } } } ] @@ -47,6 +52,11 @@ "banner": { "w":320, "h":50 + }, + "ext": { + "bidder": { + "placementId": 12345678 + } } } ], diff --git a/adapters/nativo/nativotest/exemplary/native-app.json b/adapters/nativo/nativotest/exemplary/native-app.json index 5f038958b76..ccd8c2287f9 100644 --- a/adapters/nativo/nativotest/exemplary/native-app.json +++ b/adapters/nativo/nativotest/exemplary/native-app.json @@ -30,6 +30,11 @@ "native": { "ver":"1.1", "request":"{\"adunit\":2,\"assets\":[{\"id\":3,\"img\":{\"h\":120,\"hmin\":0,\"type\":3,\"w\":180,\"wmin\":0},\"required\":1},{\"id\":0,\"required\":1,\"title\":{\"len\":25}},{\"data\":{\"len\":25,\"type\":1},\"id\":4,\"required\":1},{\"data\":{\"len\":140,\"type\":2},\"id\":6,\"required\":1}],\"context\":1,\"layout\":1,\"contextsubtype\":11,\"plcmtcnt\":1,\"plcmttype\":2,\"ver\":\"1.1\",\"ext\":{\"banner\":{\"w\":320,\"h\":50}}}" + }, + "ext": { + "bidder": { + "placementId": 12345678 + } } } ] @@ -53,7 +58,12 @@ "ver":"1.1", "request":"{\"adunit\":2,\"assets\":[{\"id\":3,\"img\":{\"h\":120,\"hmin\":0,\"type\":3,\"w\":180,\"wmin\":0},\"required\":1},{\"id\":0,\"required\":1,\"title\":{\"len\":25}},{\"data\":{\"len\":25,\"type\":1},\"id\":4,\"required\":1},{\"data\":{\"len\":140,\"type\":2},\"id\":6,\"required\":1}],\"context\":1,\"layout\":1,\"contextsubtype\":11,\"plcmtcnt\":1,\"plcmttype\":2,\"ver\":\"1.1\",\"ext\":{\"banner\":{\"w\":320,\"h\":50}}}" }, - "tagid": "ogTAGID" + "tagid": "ogTAGID", + "ext": { + "bidder": { + "placementId": 12345678 + } + } } ], "app": { diff --git a/adapters/nativo/nativotest/exemplary/native-web.json b/adapters/nativo/nativotest/exemplary/native-web.json index 598dc2abfc3..98e0ca38df2 100644 --- a/adapters/nativo/nativotest/exemplary/native-web.json +++ b/adapters/nativo/nativotest/exemplary/native-web.json @@ -24,6 +24,11 @@ "native": { "ver":"1.1", "request":"{\"adunit\":2,\"assets\":[{\"id\":3,\"img\":{\"h\":120,\"hmin\":0,\"type\":3,\"w\":180,\"wmin\":0},\"required\":1},{\"id\":0,\"required\":1,\"title\":{\"len\":25}},{\"data\":{\"len\":25,\"type\":1},\"id\":4,\"required\":1},{\"data\":{\"len\":140,\"type\":2},\"id\":6,\"required\":1}],\"context\":1,\"layout\":1,\"contextsubtype\":11,\"plcmtcnt\":1,\"plcmttype\":2,\"ver\":\"1.1\",\"ext\":{\"banner\":{\"w\":320,\"h\":50}}}" + }, + "ext": { + "bidder": { + "placementId": 12345678 + } } } ] @@ -47,6 +52,11 @@ "native": { "ver":"1.1", "request":"{\"adunit\":2,\"assets\":[{\"id\":3,\"img\":{\"h\":120,\"hmin\":0,\"type\":3,\"w\":180,\"wmin\":0},\"required\":1},{\"id\":0,\"required\":1,\"title\":{\"len\":25}},{\"data\":{\"len\":25,\"type\":1},\"id\":4,\"required\":1},{\"data\":{\"len\":140,\"type\":2},\"id\":6,\"required\":1}],\"context\":1,\"layout\":1,\"contextsubtype\":11,\"plcmtcnt\":1,\"plcmttype\":2,\"ver\":\"1.1\",\"ext\":{\"banner\":{\"w\":320,\"h\":50}}}" + }, + "ext": { + "bidder": { + "placementId": 12345678 + } } } ], diff --git a/adapters/nativo/nativotest/exemplary/video-app.json b/adapters/nativo/nativotest/exemplary/video-app.json index 596bf9bcaf0..10ff85a1ea8 100644 --- a/adapters/nativo/nativotest/exemplary/video-app.json +++ b/adapters/nativo/nativotest/exemplary/video-app.json @@ -35,6 +35,11 @@ "h": 480, "minduration": 120, "maxduration": 150 + }, + "ext": { + "bidder": { + "placementId": 12345678 + } } } ] @@ -63,7 +68,12 @@ "w": 640, "h": 480 }, - "tagid": "ogTAGID" + "tagid": "ogTAGID", + "ext": { + "bidder": { + "placementId": 12345678 + } + } } ], "app": { diff --git a/adapters/nativo/nativotest/exemplary/video-web.json b/adapters/nativo/nativotest/exemplary/video-web.json index 12e185ca158..a1043b21362 100644 --- a/adapters/nativo/nativotest/exemplary/video-web.json +++ b/adapters/nativo/nativotest/exemplary/video-web.json @@ -29,6 +29,11 @@ "h": 480, "minduration": 120, "maxduration": 150 + }, + "ext": { + "bidder": { + "placementId": 12345678 + } } } ] @@ -57,6 +62,11 @@ "maxduration": 150, "w": 640, "h": 480 + }, + "ext": { + "bidder": { + "placementId": 12345678 + } } } ], diff --git a/adapters/nativo/nativotest/supplemental/200-different-impID-response-from-nativo.json b/adapters/nativo/nativotest/supplemental/200-different-impID-response-from-nativo.json index 320d7f5e1b0..26b2936ca5a 100755 --- a/adapters/nativo/nativotest/supplemental/200-different-impID-response-from-nativo.json +++ b/adapters/nativo/nativotest/supplemental/200-different-impID-response-from-nativo.json @@ -13,7 +13,9 @@ ] }, "ext": { - "bidder": {} + "bidder": { + "placementId": "12345678" + } } } ] @@ -36,7 +38,9 @@ ] }, "ext": { - "bidder": {} + "bidder": { + "placementId": "12345678" + } } } ] diff --git a/adapters/nativo/nativotest/supplemental/400-response-from-nativo.json b/adapters/nativo/nativotest/supplemental/400-response-from-nativo.json index f5ebb6024cb..342ad1a243f 100755 --- a/adapters/nativo/nativotest/supplemental/400-response-from-nativo.json +++ b/adapters/nativo/nativotest/supplemental/400-response-from-nativo.json @@ -13,7 +13,9 @@ ] }, "ext": { - "bidder": {} + "bidder": { + "placementId": 12345678 + } } } ] @@ -36,7 +38,9 @@ ] }, "ext": { - "bidder": {} + "bidder": { + "placementId": 12345678 + } } } ] diff --git a/adapters/nativo/nativotest/supplemental/500-response-from-nativo.json b/adapters/nativo/nativotest/supplemental/500-response-from-nativo.json index cc58f18ecee..c111cf3edd8 100755 --- a/adapters/nativo/nativotest/supplemental/500-response-from-nativo.json +++ b/adapters/nativo/nativotest/supplemental/500-response-from-nativo.json @@ -13,7 +13,9 @@ ] }, "ext": { - "bidder": {} + "bidder": { + "placementId": 12345678 + } } } ] @@ -36,7 +38,9 @@ ] }, "ext": { - "bidder": {} + "bidder": { + "placementId": 12345678 + } } } ] diff --git a/adapters/nativo/params_test.go b/adapters/nativo/params_test.go new file mode 100644 index 00000000000..7d48bfd53c7 --- /dev/null +++ b/adapters/nativo/params_test.go @@ -0,0 +1,44 @@ +package nativo + +import ( + "encoding/json" + "testing" + + "github.com/prebid/prebid-server/v3/openrtb_ext" +) + +func TestValidParams(t *testing.T) { + validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params") + if err != nil { + t.Fatalf("Failed to fetch the json-schemas. %v", err) + } + + for _, validParam := range validParams { + if err := validator.Validate(openrtb_ext.BidderNativo, json.RawMessage(validParam)); err != nil { + t.Errorf("Schema rejected valid params: %s", validParam) + } + } +} + +func TestInvalidParams(t *testing.T) { + validator, err := openrtb_ext.NewBidderParamsValidator("../../static/bidder-params") + if err != nil { + t.Fatalf("Failed to fetch the json-schemas. %v", err) + } + + for _, invalidParam := range invalidParams { + if err := validator.Validate(openrtb_ext.BidderNativo, json.RawMessage(invalidParam)); err == nil { + t.Errorf("Schema allowed unexpected params: %s", invalidParam) + } + } +} + +var validParams = []string{ + `{"placementId": "12345678"}`, + `{"placementId": 12345678}`, + `{}`, +} + +var invalidParams = []string{ + `{"placementId": false}`, +} diff --git a/openrtb_ext/imp_nativo.go b/openrtb_ext/imp_nativo.go new file mode 100644 index 00000000000..4ad5d721c85 --- /dev/null +++ b/openrtb_ext/imp_nativo.go @@ -0,0 +1,7 @@ +package openrtb_ext + +import "github.com/prebid/prebid-server/v3/util/jsonutil" + +type ImpExtNativo struct { + PlacementID jsonutil.StringInt `json:"placementId"` +} diff --git a/static/bidder-params/nativo.json b/static/bidder-params/nativo.json index 0a8139a0838..fbe4685b555 100644 --- a/static/bidder-params/nativo.json +++ b/static/bidder-params/nativo.json @@ -3,5 +3,10 @@ "title": "Nativo Adapter Params", "description": "A schema which validates params accepted by the Nativo adapter", "type": "object", - "properties": {} + "properties": { + "placementId": { + "type": ["integer", "string"], + "description": "Placement ID" + } + } } \ No newline at end of file