Skip to content
44 changes: 15 additions & 29 deletions src/main/java/org/prebid/server/auction/ExchangeService.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.prebid.server.auction;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.iab.openrtb.request.App;
Expand Down Expand Up @@ -56,7 +55,6 @@
import org.prebid.server.bidder.model.Price;
import org.prebid.server.cookie.UidsCookie;
import org.prebid.server.exception.InvalidRequestException;
import org.prebid.server.exception.PreBidException;
import org.prebid.server.execution.timeout.Timeout;
import org.prebid.server.execution.timeout.TimeoutFactory;
import org.prebid.server.floors.PriceFloorAdjuster;
Expand All @@ -79,8 +77,6 @@
import org.prebid.server.proto.openrtb.ext.request.ExtApp;
import org.prebid.server.proto.openrtb.ext.request.ExtBidderConfigOrtb;
import org.prebid.server.proto.openrtb.ext.request.ExtDooh;
import org.prebid.server.proto.openrtb.ext.request.ExtImpPrebid;
import org.prebid.server.proto.openrtb.ext.request.ExtImpPrebidFloors;
import org.prebid.server.proto.openrtb.ext.request.ExtRequest;
import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebid;
import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebidBidderConfig;
Expand Down Expand Up @@ -126,6 +122,8 @@ public class ExchangeService {
private static final Integer DEFAULT_MULTIBID_LIMIT_MAX = 9;
private static final String EID_ALLOWED_FOR_ALL_BIDDERS = "*";
private static final BigDecimal THOUSAND = BigDecimal.valueOf(1000);
private static final Set<String> BIDDER_FIELDS_EXCEPTION_LIST = Set.of(
"adunitcode", "storedrequest", "options", "is_rewarded_inventory");

private final double logSamplingRate;
private final BidderCatalog bidderCatalog;
Expand Down Expand Up @@ -870,7 +868,7 @@ private Imp prepareImp(Imp imp,
return imp.toBuilder()
.bidfloor(adjustedPrice.getValue())
.bidfloorcur(adjustedPrice.getCurrency())
.ext(prepareImpExt(bidder, imp.getExt(), adjustedPrice.getValue(), transmitTid, useFirstPartyData))
.ext(prepareImpExt(bidder, imp.getExt(), transmitTid, useFirstPartyData))
.build();
}

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

private ObjectNode prepareImpExt(String bidder,
ObjectNode impExt,
BigDecimal adjustedFloor,
boolean transmitTid,
boolean useFirstPartyData) {
final JsonNode bidderNode = bidderParamsFromImpExt(impExt).get(bidder);
final JsonNode impExtPrebid = prepareImpExt(impExt.get(PREBID_EXT), adjustedFloor);
final JsonNode impExtPrebid = cleanUpImpExtPrebid(impExt.get(PREBID_EXT));
Optional.ofNullable(impExtPrebid).ifPresentOrElse(
ext -> impExt.set(PREBID_EXT, ext),
() -> impExt.remove(PREBID_EXT));
Expand All @@ -901,33 +898,22 @@ private ObjectNode prepareImpExt(String bidder,
return fpdResolver.resolveImpExt(impExt, useFirstPartyData);
}

private JsonNode prepareImpExt(JsonNode extImpPrebidNode, BigDecimal adjustedFloor) {
if (extImpPrebidNode.size() <= 1) {
private JsonNode cleanUpImpExtPrebid(JsonNode extImpPrebid) {
if (extImpPrebid.size() <= 1) {
return null;
}

final ExtImpPrebid extImpPrebid = extImpPrebid(extImpPrebidNode);
final ExtImpPrebidFloors floors = extImpPrebid.getFloors();
final ExtImpPrebidFloors updatedFloors = floors != null
? ExtImpPrebidFloors.of(floors.getFloorRule(),
floors.getFloorRuleValue(),
adjustedFloor,
floors.getFloorMin(),
floors.getFloorMinCur())
: null;

return mapper.mapper().valueToTree(extImpPrebid(extImpPrebidNode).toBuilder()
.floors(updatedFloors)
.bidder(null)
.build());
}
final Iterator<String> fieldsIterator = extImpPrebid.fieldNames();
final ObjectNode modifiedExtImpPrebid = extImpPrebid.deepCopy();

private ExtImpPrebid extImpPrebid(JsonNode extImpPrebid) {
try {
return mapper.mapper().treeToValue(extImpPrebid, ExtImpPrebid.class);
} catch (JsonProcessingException e) {
throw new PreBidException("Error decoding imp.ext.prebid: " + e.getMessage(), e);
while (fieldsIterator.hasNext()) {
final String fieldName = fieldsIterator.next();
if (!BIDDER_FIELDS_EXCEPTION_LIST.contains(fieldName)) {
modifiedExtImpPrebid.remove(fieldName);
}
}

return modifiedExtImpPrebid;
}

private App prepareApp(App app, ObjectNode fpdApp, boolean useFirstPartyData) {
Expand Down
48 changes: 2 additions & 46 deletions src/main/java/org/prebid/server/bidder/rubicon/RubiconBidder.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.prebid.server.bidder.rubicon;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.ArrayNode;
Expand Down Expand Up @@ -52,7 +51,6 @@
import org.prebid.server.bidder.rubicon.proto.request.RubiconExtPrebidBiddersBidder;
import org.prebid.server.bidder.rubicon.proto.request.RubiconExtPrebidBiddersBidderDebug;
import org.prebid.server.bidder.rubicon.proto.request.RubiconImpExt;
import org.prebid.server.bidder.rubicon.proto.request.RubiconImpExtPrebid;
import org.prebid.server.bidder.rubicon.proto.request.RubiconImpExtRp;
import org.prebid.server.bidder.rubicon.proto.request.RubiconImpExtRpRtb;
import org.prebid.server.bidder.rubicon.proto.request.RubiconImpExtRpTrack;
Expand Down Expand Up @@ -89,7 +87,6 @@
import org.prebid.server.proto.openrtb.ext.request.ExtDevice;
import org.prebid.server.proto.openrtb.ext.request.ExtImpContextDataAdserver;
import org.prebid.server.proto.openrtb.ext.request.ExtImpPrebid;
import org.prebid.server.proto.openrtb.ext.request.ExtImpPrebidFloors;
import org.prebid.server.proto.openrtb.ext.request.ExtPublisher;
import org.prebid.server.proto.openrtb.ext.request.ExtRegs;
import org.prebid.server.proto.openrtb.ext.request.ExtRegsDsa;
Expand Down Expand Up @@ -507,16 +504,7 @@ private Imp makeImp(Imp imp,
final Imp.ImpBuilder builder = imp.toBuilder()
.metric(makeMetrics(imp))
.ext(mapper.mapper().valueToTree(
makeImpExt(
imp,
bidRequest,
extImpRubicon,
resolvedFormats,
site,
app,
extRequest,
ipfCurrency,
priceFloorResult)));
makeImpExt(imp, extImpRubicon, resolvedFormats, site, app, extRequest)));

final BigDecimal resolvedBidFloor = ipfFloor != null
? convertToXAPICurrency(ipfFloor, ipfCurrency, imp, bidRequest)
Expand Down Expand Up @@ -672,18 +660,11 @@ private BigDecimal convertBidFloorCurrency(BigDecimal bidFloor,
}

private RubiconImpExt makeImpExt(Imp imp,
BidRequest bidRequest,
ExtImpRubicon rubiconImpExt,
Set<ImpMediaType> formats,
Site site,
App app,
ExtRequest extRequest,
String ipfResolvedCurrency,
PriceFloorResult priceFloorResult) {

final RubiconImpExtPrebid rubiconImpExtPrebid = priceFloorResult != null
? makeRubiconExtPrebid(priceFloorResult, ipfResolvedCurrency, imp, bidRequest)
: null;
ExtRequest extRequest) {

final RubiconImpExtRpRtb rubiconImpExtRpRtb = CollectionUtils.isNotEmpty(formats)
? RubiconImpExtRpRtb.of(formats)
Expand All @@ -702,7 +683,6 @@ private RubiconImpExt makeImpExt(Imp imp,
.gpid(getGpid(imp.getExt()))
.skadn(getSkadn(imp.getExt()))
.tid(getTid(imp.getExt()))
.prebid(rubiconImpExtPrebid)
.build();
}

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

private RubiconImpExtPrebid makeRubiconExtPrebid(PriceFloorResult priceFloorResult,
String currency,
Imp imp,
BidRequest bidRequest) {
final ObjectNode impExt = imp.getExt();
final ExtImpPrebid extImpPrebid = extImpPrebid(impExt.get(PREBID_EXT));
final ExtImpPrebidFloors floors = extImpPrebid != null ? extImpPrebid.getFloors() : null;

return RubiconImpExtPrebid.of(ExtImpPrebidFloors.of(
priceFloorResult.getFloorRule(),
convertToXAPICurrency(priceFloorResult.getFloorRuleValue(), currency, imp, bidRequest),
convertToXAPICurrency(priceFloorResult.getFloorValue(), currency, imp, bidRequest),
floors != null ? floors.getFloorMin() : null,
floors != null ? floors.getFloorMinCur() : null));
}

private ExtImpPrebid extImpPrebid(JsonNode extImpPrebid) {
try {
return mapper.mapper().treeToValue(extImpPrebid, ExtImpPrebid.class);
} catch (JsonProcessingException e) {
throw new PreBidException("Error decoding imp.ext.prebid: " + e.getMessage(), e);
}
}

private void mergeFirstPartyDataFromSite(Site site, ObjectNode result) {
// merge OPENRTB.site.ext.data.* to every impression – XAPI.imp[].ext.rp.target.*
final ExtSite siteExt = site != null ? site.getExt() : null;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,10 @@ public class ExtImpPrebid {
* Defines the contract for bidrequest.imp[i].ext.prebid.imp
*/
ObjectNode imp;

/**
* Defines the contract for bidrequest.imp[i].ext.prebid.adunitcode
*/
@JsonProperty("adunitcode")
String adUnitCode;
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ class ImpExtPrebid {
ImpExtPrebidFloors floors
Map passThrough
Map<BidderName, Imp> imp
String adUnitCode
PrebidOptions options


static ImpExtPrebid getDefaultImpExtPrebid() {
new ImpExtPrebid().tap {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ class Prebid {
List<MultiBid> multibid
Pbs pbs
Server server
Map<BidderName, Map<String, Integer>> bidderParams
Map bidderParams
ExtPrebidFloors floors
Map passThrough
Events events
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package org.prebid.server.functional.model.request.auction

import com.fasterxml.jackson.databind.PropertyNamingStrategies
import com.fasterxml.jackson.databind.annotation.JsonNaming
import groovy.transform.ToString

@ToString(includeNames = true, ignoreNulls = true)
@JsonNaming(PropertyNamingStrategies.LowerCaseStrategy)
class PrebidOptions {

Boolean echoVideoAttrs
}
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package org.prebid.server.functional.model.request.auction

import groovy.transform.EqualsAndHashCode
import groovy.transform.ToString

@ToString(includeNames = true)
@EqualsAndHashCode
class PrebidStoredRequest {

String id
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package org.prebid.server.functional.model.response.auction

import com.fasterxml.jackson.databind.PropertyNamingStrategies
import com.fasterxml.jackson.databind.annotation.JsonNaming
import org.prebid.server.functional.model.request.auction.Video

@JsonNaming(PropertyNamingStrategies.LowerCaseStrategy)
class Prebid {
Expand All @@ -13,4 +14,5 @@ class Prebid {
Events events
Meta meta
Map passThrough
Video storedRequestAttributes
}
Loading
Loading