Skip to content

Commit 32bffd1

Browse files
Add adUnitCode to the imp.ext.prebid exception list (#3610)
1 parent 26dce4d commit 32bffd1

File tree

16 files changed

+395
-455
lines changed

16 files changed

+395
-455
lines changed

src/main/java/org/prebid/server/auction/ExchangeService.java

Lines changed: 15 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.prebid.server.auction;
22

3-
import com.fasterxml.jackson.core.JsonProcessingException;
43
import com.fasterxml.jackson.databind.JsonNode;
54
import com.fasterxml.jackson.databind.node.ObjectNode;
65
import com.iab.openrtb.request.App;
@@ -56,7 +55,6 @@
5655
import org.prebid.server.bidder.model.Price;
5756
import org.prebid.server.cookie.UidsCookie;
5857
import org.prebid.server.exception.InvalidRequestException;
59-
import org.prebid.server.exception.PreBidException;
6058
import org.prebid.server.execution.timeout.Timeout;
6159
import org.prebid.server.execution.timeout.TimeoutFactory;
6260
import org.prebid.server.floors.PriceFloorAdjuster;
@@ -79,8 +77,6 @@
7977
import org.prebid.server.proto.openrtb.ext.request.ExtApp;
8078
import org.prebid.server.proto.openrtb.ext.request.ExtBidderConfigOrtb;
8179
import org.prebid.server.proto.openrtb.ext.request.ExtDooh;
82-
import org.prebid.server.proto.openrtb.ext.request.ExtImpPrebid;
83-
import org.prebid.server.proto.openrtb.ext.request.ExtImpPrebidFloors;
8480
import org.prebid.server.proto.openrtb.ext.request.ExtRequest;
8581
import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebid;
8682
import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebidBidderConfig;
@@ -126,6 +122,8 @@ public class ExchangeService {
126122
private static final Integer DEFAULT_MULTIBID_LIMIT_MAX = 9;
127123
private static final String EID_ALLOWED_FOR_ALL_BIDDERS = "*";
128124
private static final BigDecimal THOUSAND = BigDecimal.valueOf(1000);
125+
private static final Set<String> BIDDER_FIELDS_EXCEPTION_LIST = Set.of(
126+
"adunitcode", "storedrequest", "options", "is_rewarded_inventory");
129127

130128
private final double logSamplingRate;
131129
private final BidderCatalog bidderCatalog;
@@ -870,7 +868,7 @@ private Imp prepareImp(Imp imp,
870868
return imp.toBuilder()
871869
.bidfloor(adjustedPrice.getValue())
872870
.bidfloorcur(adjustedPrice.getCurrency())
873-
.ext(prepareImpExt(bidder, imp.getExt(), adjustedPrice.getValue(), transmitTid, useFirstPartyData))
871+
.ext(prepareImpExt(bidder, imp.getExt(), transmitTid, useFirstPartyData))
874872
.build();
875873
}
876874

@@ -885,11 +883,10 @@ private Price resolveBidPrice(Imp imp,
885883

886884
private ObjectNode prepareImpExt(String bidder,
887885
ObjectNode impExt,
888-
BigDecimal adjustedFloor,
889886
boolean transmitTid,
890887
boolean useFirstPartyData) {
891888
final JsonNode bidderNode = bidderParamsFromImpExt(impExt).get(bidder);
892-
final JsonNode impExtPrebid = prepareImpExt(impExt.get(PREBID_EXT), adjustedFloor);
889+
final JsonNode impExtPrebid = cleanUpImpExtPrebid(impExt.get(PREBID_EXT));
893890
Optional.ofNullable(impExtPrebid).ifPresentOrElse(
894891
ext -> impExt.set(PREBID_EXT, ext),
895892
() -> impExt.remove(PREBID_EXT));
@@ -901,33 +898,22 @@ private ObjectNode prepareImpExt(String bidder,
901898
return fpdResolver.resolveImpExt(impExt, useFirstPartyData);
902899
}
903900

904-
private JsonNode prepareImpExt(JsonNode extImpPrebidNode, BigDecimal adjustedFloor) {
905-
if (extImpPrebidNode.size() <= 1) {
901+
private JsonNode cleanUpImpExtPrebid(JsonNode extImpPrebid) {
902+
if (extImpPrebid.size() <= 1) {
906903
return null;
907904
}
908905

909-
final ExtImpPrebid extImpPrebid = extImpPrebid(extImpPrebidNode);
910-
final ExtImpPrebidFloors floors = extImpPrebid.getFloors();
911-
final ExtImpPrebidFloors updatedFloors = floors != null
912-
? ExtImpPrebidFloors.of(floors.getFloorRule(),
913-
floors.getFloorRuleValue(),
914-
adjustedFloor,
915-
floors.getFloorMin(),
916-
floors.getFloorMinCur())
917-
: null;
918-
919-
return mapper.mapper().valueToTree(extImpPrebid(extImpPrebidNode).toBuilder()
920-
.floors(updatedFloors)
921-
.bidder(null)
922-
.build());
923-
}
906+
final Iterator<String> fieldsIterator = extImpPrebid.fieldNames();
907+
final ObjectNode modifiedExtImpPrebid = extImpPrebid.deepCopy();
924908

925-
private ExtImpPrebid extImpPrebid(JsonNode extImpPrebid) {
926-
try {
927-
return mapper.mapper().treeToValue(extImpPrebid, ExtImpPrebid.class);
928-
} catch (JsonProcessingException e) {
929-
throw new PreBidException("Error decoding imp.ext.prebid: " + e.getMessage(), e);
909+
while (fieldsIterator.hasNext()) {
910+
final String fieldName = fieldsIterator.next();
911+
if (!BIDDER_FIELDS_EXCEPTION_LIST.contains(fieldName)) {
912+
modifiedExtImpPrebid.remove(fieldName);
913+
}
930914
}
915+
916+
return modifiedExtImpPrebid;
931917
}
932918

933919
private App prepareApp(App app, ObjectNode fpdApp, boolean useFirstPartyData) {

src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java

Lines changed: 2 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.prebid.server.bidder.rubicon;
22

3-
import com.fasterxml.jackson.core.JsonProcessingException;
43
import com.fasterxml.jackson.core.type.TypeReference;
54
import com.fasterxml.jackson.databind.JsonNode;
65
import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -52,7 +51,6 @@
5251
import org.prebid.server.bidder.rubicon.proto.request.RubiconExtPrebidBiddersBidder;
5352
import org.prebid.server.bidder.rubicon.proto.request.RubiconExtPrebidBiddersBidderDebug;
5453
import org.prebid.server.bidder.rubicon.proto.request.RubiconImpExt;
55-
import org.prebid.server.bidder.rubicon.proto.request.RubiconImpExtPrebid;
5654
import org.prebid.server.bidder.rubicon.proto.request.RubiconImpExtRp;
5755
import org.prebid.server.bidder.rubicon.proto.request.RubiconImpExtRpRtb;
5856
import org.prebid.server.bidder.rubicon.proto.request.RubiconImpExtRpTrack;
@@ -89,7 +87,6 @@
8987
import org.prebid.server.proto.openrtb.ext.request.ExtDevice;
9088
import org.prebid.server.proto.openrtb.ext.request.ExtImpContextDataAdserver;
9189
import org.prebid.server.proto.openrtb.ext.request.ExtImpPrebid;
92-
import org.prebid.server.proto.openrtb.ext.request.ExtImpPrebidFloors;
9390
import org.prebid.server.proto.openrtb.ext.request.ExtPublisher;
9491
import org.prebid.server.proto.openrtb.ext.request.ExtRegs;
9592
import org.prebid.server.proto.openrtb.ext.request.ExtRegsDsa;
@@ -507,16 +504,7 @@ private Imp makeImp(Imp imp,
507504
final Imp.ImpBuilder builder = imp.toBuilder()
508505
.metric(makeMetrics(imp))
509506
.ext(mapper.mapper().valueToTree(
510-
makeImpExt(
511-
imp,
512-
bidRequest,
513-
extImpRubicon,
514-
resolvedFormats,
515-
site,
516-
app,
517-
extRequest,
518-
ipfCurrency,
519-
priceFloorResult)));
507+
makeImpExt(imp, extImpRubicon, resolvedFormats, site, app, extRequest)));
520508

521509
final BigDecimal resolvedBidFloor = ipfFloor != null
522510
? convertToXAPICurrency(ipfFloor, ipfCurrency, imp, bidRequest)
@@ -672,18 +660,11 @@ private BigDecimal convertBidFloorCurrency(BigDecimal bidFloor,
672660
}
673661

674662
private RubiconImpExt makeImpExt(Imp imp,
675-
BidRequest bidRequest,
676663
ExtImpRubicon rubiconImpExt,
677664
Set<ImpMediaType> formats,
678665
Site site,
679666
App app,
680-
ExtRequest extRequest,
681-
String ipfResolvedCurrency,
682-
PriceFloorResult priceFloorResult) {
683-
684-
final RubiconImpExtPrebid rubiconImpExtPrebid = priceFloorResult != null
685-
? makeRubiconExtPrebid(priceFloorResult, ipfResolvedCurrency, imp, bidRequest)
686-
: null;
667+
ExtRequest extRequest) {
687668

688669
final RubiconImpExtRpRtb rubiconImpExtRpRtb = CollectionUtils.isNotEmpty(formats)
689670
? RubiconImpExtRpRtb.of(formats)
@@ -702,7 +683,6 @@ private RubiconImpExt makeImpExt(Imp imp,
702683
.gpid(getGpid(imp.getExt()))
703684
.skadn(getSkadn(imp.getExt()))
704685
.tid(getTid(imp.getExt()))
705-
.prebid(rubiconImpExtPrebid)
706686
.build();
707687
}
708688

@@ -722,30 +702,6 @@ private JsonNode makeTarget(Imp imp, ExtImpRubicon rubiconImpExt, Site site, App
722702
return result;
723703
}
724704

725-
private RubiconImpExtPrebid makeRubiconExtPrebid(PriceFloorResult priceFloorResult,
726-
String currency,
727-
Imp imp,
728-
BidRequest bidRequest) {
729-
final ObjectNode impExt = imp.getExt();
730-
final ExtImpPrebid extImpPrebid = extImpPrebid(impExt.get(PREBID_EXT));
731-
final ExtImpPrebidFloors floors = extImpPrebid != null ? extImpPrebid.getFloors() : null;
732-
733-
return RubiconImpExtPrebid.of(ExtImpPrebidFloors.of(
734-
priceFloorResult.getFloorRule(),
735-
convertToXAPICurrency(priceFloorResult.getFloorRuleValue(), currency, imp, bidRequest),
736-
convertToXAPICurrency(priceFloorResult.getFloorValue(), currency, imp, bidRequest),
737-
floors != null ? floors.getFloorMin() : null,
738-
floors != null ? floors.getFloorMinCur() : null));
739-
}
740-
741-
private ExtImpPrebid extImpPrebid(JsonNode extImpPrebid) {
742-
try {
743-
return mapper.mapper().treeToValue(extImpPrebid, ExtImpPrebid.class);
744-
} catch (JsonProcessingException e) {
745-
throw new PreBidException("Error decoding imp.ext.prebid: " + e.getMessage(), e);
746-
}
747-
}
748-
749705
private void mergeFirstPartyDataFromSite(Site site, ObjectNode result) {
750706
// merge OPENRTB.site.ext.data.* to every impression – XAPI.imp[].ext.rp.target.*
751707
final ExtSite siteExt = site != null ? site.getExt() : null;

src/main/java/org/prebid/server/proto/openrtb/ext/request/ExtImpPrebid.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,10 @@ public class ExtImpPrebid {
6161
* Defines the contract for bidrequest.imp[i].ext.prebid.imp
6262
*/
6363
ObjectNode imp;
64+
65+
/**
66+
* Defines the contract for bidrequest.imp[i].ext.prebid.adunitcode
67+
*/
68+
@JsonProperty("adunitcode")
69+
String adUnitCode;
6470
}

src/test/groovy/org/prebid/server/functional/model/request/auction/ImpExtPrebid.groovy

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@ class ImpExtPrebid {
1919
ImpExtPrebidFloors floors
2020
Map passThrough
2121
Map<BidderName, Imp> imp
22+
String adUnitCode
23+
PrebidOptions options
24+
2225

2326
static ImpExtPrebid getDefaultImpExtPrebid() {
2427
new ImpExtPrebid().tap {

src/test/groovy/org/prebid/server/functional/model/request/auction/Prebid.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class Prebid {
2929
List<MultiBid> multibid
3030
Pbs pbs
3131
Server server
32-
Map<BidderName, Map<String, Integer>> bidderParams
32+
Map bidderParams
3333
ExtPrebidFloors floors
3434
Map passThrough
3535
Events events
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.prebid.server.functional.model.request.auction
2+
3+
import com.fasterxml.jackson.databind.PropertyNamingStrategies
4+
import com.fasterxml.jackson.databind.annotation.JsonNaming
5+
import groovy.transform.ToString
6+
7+
@ToString(includeNames = true, ignoreNulls = true)
8+
@JsonNaming(PropertyNamingStrategies.LowerCaseStrategy)
9+
class PrebidOptions {
10+
11+
Boolean echoVideoAttrs
12+
}

src/test/groovy/org/prebid/server/functional/model/request/auction/PrebidStoredRequest.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package org.prebid.server.functional.model.request.auction
22

3+
import groovy.transform.EqualsAndHashCode
34
import groovy.transform.ToString
45

56
@ToString(includeNames = true)
7+
@EqualsAndHashCode
68
class PrebidStoredRequest {
79

810
String id

src/test/groovy/org/prebid/server/functional/model/response/auction/Prebid.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package org.prebid.server.functional.model.response.auction
22

33
import com.fasterxml.jackson.databind.PropertyNamingStrategies
44
import com.fasterxml.jackson.databind.annotation.JsonNaming
5+
import org.prebid.server.functional.model.request.auction.Video
56

67
@JsonNaming(PropertyNamingStrategies.LowerCaseStrategy)
78
class Prebid {
@@ -13,4 +14,5 @@ class Prebid {
1314
Events events
1415
Meta meta
1516
Map passThrough
17+
Video storedRequestAttributes
1618
}

0 commit comments

Comments
 (0)