Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.prebid.server.auction.model;
package org.prebid.server.auction;

import com.iab.openrtb.request.Eid;
import org.apache.commons.collections4.CollectionUtils;
Expand All @@ -13,28 +13,28 @@
import java.util.stream.Collectors;
import java.util.stream.Stream;

public final class EidPermissionHolder {
public class EidPermissionResolver {

private static final String WILDCARD_BIDDER = "*";

private static final ExtRequestPrebidDataEidPermissions DEFAULT_RULE = ExtRequestPrebidDataEidPermissions.builder()
.bidders(Collections.singletonList(WILDCARD_BIDDER))
.build();

private static final EidPermissionHolder EMPTY = new EidPermissionHolder(Collections.emptyList());
private static final EidPermissionResolver EMPTY = new EidPermissionResolver(Collections.emptyList());

private final List<ExtRequestPrebidDataEidPermissions> eidPermissions;

private EidPermissionHolder(List<ExtRequestPrebidDataEidPermissions> eidPermissions) {
private EidPermissionResolver(List<ExtRequestPrebidDataEidPermissions> eidPermissions) {
this.eidPermissions = new ArrayList<>(eidPermissions);
this.eidPermissions.add(DEFAULT_RULE);
}

public static EidPermissionHolder of(List<ExtRequestPrebidDataEidPermissions> eidPermissions) {
return new EidPermissionHolder(eidPermissions);
public static EidPermissionResolver of(List<ExtRequestPrebidDataEidPermissions> eidPermissions) {
return new EidPermissionResolver(eidPermissions);
}

public static EidPermissionHolder empty() {
public static EidPermissionResolver empty() {
return EMPTY;
}

Expand Down Expand Up @@ -74,7 +74,7 @@ private boolean isRuleMatched(Eid eid, ExtRequestPrebidDataEidPermissions eidPer
}

private boolean isBidderAllowed(String bidder, List<String> ruleBidders) {
return CollectionUtils.emptyIfNull(ruleBidders).stream()
return ruleBidders == null || ruleBidders.stream()
.anyMatch(allowedBidder -> StringUtils.equalsIgnoreCase(allowedBidder, bidder)
|| WILDCARD_BIDDER.equals(allowedBidder));
}
Expand Down
19 changes: 9 additions & 10 deletions src/main/java/org/prebid/server/auction/ExchangeService.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@
import org.prebid.server.auction.model.BidderPrivacyResult;
import org.prebid.server.auction.model.BidderRequest;
import org.prebid.server.auction.model.BidderResponse;
import org.prebid.server.auction.model.EidPermissionHolder;
import org.prebid.server.auction.model.MultiBidConfig;
import org.prebid.server.auction.model.StoredResponseResult;
import org.prebid.server.auction.model.TimeoutContext;
Expand Down Expand Up @@ -537,9 +536,9 @@ private Future<List<AuctionParticipation>> makeAuctionParticipation(
final ExtRequest requestExt = bidRequest.getExt();
final ExtRequestPrebid prebid = requestExt != null ? requestExt.getPrebid() : null;
final Map<String, ExtBidderConfigOrtb> biddersToConfigs = getBiddersToConfigs(prebid);
final EidPermissionHolder eidPermissionHolder = getEidPermissions(prebid);
final EidPermissionResolver eidPermissionResolver = getEidPermissions(prebid);
final Map<String, Pair<User, Device>> bidderToUserAndDevice =
prepareUsersAndDevices(bidders, context, aliases, biddersToConfigs, eidPermissionHolder);
prepareUsersAndDevices(bidders, context, aliases, biddersToConfigs, eidPermissionResolver);

return privacyEnforcementService.mask(context, bidderToUserAndDevice, aliases)
.map(bidderToPrivacyResult -> getAuctionParticipation(
Expand Down Expand Up @@ -577,12 +576,12 @@ private Map<String, ExtBidderConfigOrtb> getBiddersToConfigs(ExtRequestPrebid pr
return bidderToConfig;
}

private EidPermissionHolder getEidPermissions(ExtRequestPrebid prebid) {
private EidPermissionResolver getEidPermissions(ExtRequestPrebid prebid) {
return Optional.ofNullable(prebid)
.map(ExtRequestPrebid::getData)
.map(ExtRequestPrebidData::getEidPermissions)
.map(EidPermissionHolder::of)
.orElse(EidPermissionHolder.empty());
.map(EidPermissionResolver::of)
.orElse(EidPermissionResolver.empty());
}

private static List<String> firstPartyDataBidders(ExtRequest requestExt) {
Expand All @@ -596,7 +595,7 @@ private Map<String, Pair<User, Device>> prepareUsersAndDevices(
AuctionContext context,
BidderAliases aliases,
Map<String, ExtBidderConfigOrtb> biddersToConfigs,
EidPermissionHolder eidPermissionHolder) {
EidPermissionResolver eidPermissionResolver) {

final BidRequest bidRequest = context.getBidRequest();
final List<String> firstPartyDataBidders = firstPartyDataBidders(bidRequest.getExt());
Expand All @@ -608,7 +607,7 @@ private Map<String, Pair<User, Device>> prepareUsersAndDevices(
final boolean useFirstPartyData = firstPartyDataBidders == null || firstPartyDataBidders.stream()
.anyMatch(fpdBidder -> StringUtils.equalsIgnoreCase(fpdBidder, bidder));
final User preparedUser = prepareUser(
bidder, context, aliases, useFirstPartyData, fpdConfig, eidPermissionHolder);
bidder, context, aliases, useFirstPartyData, fpdConfig, eidPermissionResolver);
final Device preparedDevice = prepareDevice(
bidRequest.getDevice(), fpdConfig, useFirstPartyData);
bidderToUserAndDevice.put(bidder, Pair.of(preparedUser, preparedDevice));
Expand All @@ -621,13 +620,13 @@ private User prepareUser(String bidder,
BidderAliases aliases,
boolean useFirstPartyData,
ExtBidderConfigOrtb fpdConfig,
EidPermissionHolder eidPermissionHolder) {
EidPermissionResolver eidPermissionResolver) {

final User user = context.getBidRequest().getUser();
final ExtUser extUser = user != null ? user.getExt() : null;
final UpdateResult<String> buyerUidUpdateResult = uidUpdater.updateUid(bidder, context, aliases);
final List<Eid> userEids = extractUserEids(user);
final List<Eid> allowedUserEids = eidPermissionHolder.resolveAllowedEids(userEids, bidder);
final List<Eid> allowedUserEids = eidPermissionResolver.resolveAllowedEids(userEids, bidder);
final boolean shouldUpdateUserEids = allowedUserEids.size() != CollectionUtils.emptyIfNull(userEids).size();
final boolean shouldCleanExtPrebid = extUser != null && extUser.getPrebid() != null;
final boolean shouldCleanExtData = extUser != null && extUser.getData() != null && !useFirstPartyData;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,14 @@ class Eid {
it.matchMethod = PBSUtils.randomNumber
}
}

static Eid from(EidPermission eidPermission, List<Uid> uids = [Uid.defaultUid]) {
new Eid().tap {
it.source = eidPermission.source
it.uids = uids
it.inserter = eidPermission.inserter
it.matcher = eidPermission.matcher
it.matchMethod = eidPermission.matchMethod
}
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,39 @@
package org.prebid.server.functional.model.request.auction

import com.fasterxml.jackson.annotation.JsonProperty
import groovy.transform.ToString
import org.prebid.server.functional.model.bidder.BidderName
import org.prebid.server.functional.util.PBSUtils

import static org.prebid.server.functional.model.bidder.BidderName.GENERIC

@ToString(includeNames = true, ignoreNulls = true)
class EidPermission {

String source
List<BidderName> bidders
String inserter
String matcher
@JsonProperty("mm")
Integer matchMethod
List<BidderName> bidders = [GENERIC]

static EidPermission getDefaultEidPermission(List<BidderName> bidders = [GENERIC]) {
new EidPermission().tap {
it.source = PBSUtils.randomString
it.inserter = PBSUtils.randomString
it.matcher = PBSUtils.randomString
it.matchMethod = PBSUtils.randomNumber
it.bidders = bidders
}
}

static EidPermission from(Eid eid, List<BidderName> bidders = [GENERIC]) {
new EidPermission().tap {
it.source = eid.source
it.inserter = eid.inserter
it.matcher = eid.matcher
it.matchMethod = eid.matchMethod
it.bidders = bidders
}
}
}
Loading