Skip to content

Commit e49d0ff

Browse files
committed
Simplification refactoring
1 parent 9a711eb commit e49d0ff

4 files changed

Lines changed: 236 additions & 128 deletions

File tree

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

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
import org.prebid.server.auction.model.BidderPrivacyResult;
4444
import org.prebid.server.auction.model.BidderRequest;
4545
import org.prebid.server.auction.model.BidderResponse;
46-
import org.prebid.server.auction.model.EidPermissionIndex;
46+
import org.prebid.server.auction.model.EidPermissionHolder;
4747
import org.prebid.server.auction.model.MultiBidConfig;
4848
import org.prebid.server.auction.model.StoredResponseResult;
4949
import org.prebid.server.auction.model.TimeoutContext;
@@ -540,9 +540,9 @@ private Future<List<AuctionParticipation>> makeAuctionParticipation(
540540
final ExtRequest requestExt = bidRequest.getExt();
541541
final ExtRequestPrebid prebid = requestExt == null ? null : requestExt.getPrebid();
542542
final Map<String, ExtBidderConfigOrtb> biddersToConfigs = getBiddersToConfigs(prebid);
543-
final EidPermissionIndex eidPermissionIndex = getEidPermissions(prebid);
543+
final EidPermissionHolder eidPermissionHolder = getEidPermissions(prebid);
544544
final Map<String, Pair<User, Device>> bidderToUserAndDevice =
545-
prepareUsersAndDevices(bidders, context, aliases, biddersToConfigs, eidPermissionIndex);
545+
prepareUsersAndDevices(bidders, context, aliases, biddersToConfigs, eidPermissionHolder);
546546

547547
return privacyEnforcementService.mask(context, bidderToUserAndDevice, aliases)
548548
.map(bidderToPrivacyResult -> getAuctionParticipation(
@@ -580,12 +580,11 @@ private Map<String, ExtBidderConfigOrtb> getBiddersToConfigs(ExtRequestPrebid pr
580580
return bidderToConfig;
581581
}
582582

583-
private EidPermissionIndex getEidPermissions(ExtRequestPrebid prebid) {
583+
private EidPermissionHolder getEidPermissions(ExtRequestPrebid prebid) {
584584
return Optional.ofNullable(prebid)
585585
.map(ExtRequestPrebid::getData)
586586
.map(ExtRequestPrebidData::getEidPermissions)
587-
.map(CollectionUtils::emptyIfNull)
588-
.map(EidPermissionIndex::build)
587+
.map(EidPermissionHolder::new)
589588
.orElse(null);
590589
}
591590

@@ -600,7 +599,7 @@ private Map<String, Pair<User, Device>> prepareUsersAndDevices(
600599
AuctionContext context,
601600
BidderAliases aliases,
602601
Map<String, ExtBidderConfigOrtb> biddersToConfigs,
603-
EidPermissionIndex eidPermissionIndex) {
602+
EidPermissionHolder eidPermissionHolder) {
604603

605604
final BidRequest bidRequest = context.getBidRequest();
606605
final List<String> firstPartyDataBidders = firstPartyDataBidders(bidRequest.getExt());
@@ -612,7 +611,7 @@ private Map<String, Pair<User, Device>> prepareUsersAndDevices(
612611
final boolean useFirstPartyData = firstPartyDataBidders == null || firstPartyDataBidders.stream()
613612
.anyMatch(fpdBidder -> StringUtils.equalsIgnoreCase(fpdBidder, bidder));
614613
final User preparedUser = prepareUser(
615-
bidder, context, aliases, useFirstPartyData, fpdConfig, eidPermissionIndex);
614+
bidder, context, aliases, useFirstPartyData, fpdConfig, eidPermissionHolder);
616615
final Device preparedDevice = prepareDevice(
617616
bidRequest.getDevice(), fpdConfig, useFirstPartyData);
618617
bidderToUserAndDevice.put(bidder, Pair.of(preparedUser, preparedDevice));
@@ -625,13 +624,13 @@ private User prepareUser(String bidder,
625624
BidderAliases aliases,
626625
boolean useFirstPartyData,
627626
ExtBidderConfigOrtb fpdConfig,
628-
EidPermissionIndex eidPermissionIndex) {
627+
EidPermissionHolder eidPermissionHolder) {
629628

630629
final User user = context.getBidRequest().getUser();
631630
final ExtUser extUser = user != null ? user.getExt() : null;
632631
final UpdateResult<String> buyerUidUpdateResult = uidUpdater.updateUid(bidder, context, aliases);
633632
final List<Eid> userEids = extractUserEids(user);
634-
final List<Eid> allowedUserEids = resolveAllowedEids(userEids, bidder, eidPermissionIndex);
633+
final List<Eid> allowedUserEids = resolveAllowedEids(userEids, bidder, eidPermissionHolder);
635634
final boolean shouldUpdateUserEids = allowedUserEids.size() != CollectionUtils.emptyIfNull(userEids).size();
636635
final boolean shouldCleanExtPrebid = extUser != null && extUser.getPrebid() != null;
637636
final boolean shouldCleanExtData = extUser != null && extUser.getData() != null && !useFirstPartyData;
@@ -671,17 +670,17 @@ private List<Eid> extractUserEids(User user) {
671670
return user != null ? user.getEids() : null;
672671
}
673672

674-
private List<Eid> resolveAllowedEids(List<Eid> userEids, String bidder, EidPermissionIndex eidPermissionIndex) {
673+
private List<Eid> resolveAllowedEids(List<Eid> userEids, String bidder, EidPermissionHolder eidPermissionHolder) {
675674
return CollectionUtils.emptyIfNull(userEids)
676675
.stream()
677-
.filter(userEid -> isUserEidAllowed(userEid, eidPermissionIndex, bidder))
676+
.filter(userEid -> isUserEidAllowed(userEid, eidPermissionHolder, bidder))
678677
.toList();
679678
}
680679

681680
private boolean isUserEidAllowed(Eid eid,
682-
EidPermissionIndex eidPermissionIndex,
681+
EidPermissionHolder eidPermissionHolder,
683682
String bidder) {
684-
return eidPermissionIndex == null || eidPermissionIndex.isAllowed(eid, bidder);
683+
return eidPermissionHolder == null || eidPermissionHolder.isAllowed(eid, bidder);
685684
}
686685

687686
private List<AuctionParticipation> getAuctionParticipation(
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package org.prebid.server.auction.model;
2+
3+
import com.iab.openrtb.request.Eid;
4+
import org.apache.commons.lang3.ObjectUtils;
5+
import org.apache.commons.lang3.StringUtils;
6+
import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebidDataEidPermissions;
7+
8+
import java.util.List;
9+
10+
public final class EidPermissionHolder {
11+
12+
private static final String WILDCARD_BIDDER = "*";
13+
14+
private final List<ExtRequestPrebidDataEidPermissions> eidPermissions;
15+
16+
public EidPermissionHolder(List<ExtRequestPrebidDataEidPermissions> eidPermissions) {
17+
this.eidPermissions = eidPermissions;
18+
}
19+
20+
public boolean isAllowed(Eid eid, String bidder) {
21+
if (ObjectUtils.isEmpty(eidPermissions)) {
22+
return true;
23+
}
24+
25+
boolean isBestMatch = false;
26+
int bestSpecificity = -1;
27+
28+
for (ExtRequestPrebidDataEidPermissions eidPermission : eidPermissions) {
29+
if (!isRuleMatched(eid, eidPermission)) {
30+
continue;
31+
}
32+
33+
final int ruleSpecificity = getRuleSpecificity(eidPermission);
34+
35+
final boolean isBidderAllowed = isBidderAllowed(bidder, eidPermission.getBidders());
36+
37+
if (ruleSpecificity > bestSpecificity) {
38+
bestSpecificity = ruleSpecificity;
39+
isBestMatch = isBidderAllowed;
40+
} else if (ruleSpecificity == bestSpecificity) {
41+
isBestMatch |= isBidderAllowed;
42+
}
43+
}
44+
45+
return bestSpecificity == -1 || isBestMatch;
46+
}
47+
48+
private int getRuleSpecificity(ExtRequestPrebidDataEidPermissions eidPermission) {
49+
int specificity = 0;
50+
if (eidPermission.getInserter() != null) {
51+
specificity++;
52+
}
53+
if (eidPermission.getSource() != null) {
54+
specificity++;
55+
}
56+
if (eidPermission.getMatcher() != null) {
57+
specificity++;
58+
}
59+
if (eidPermission.getMm() != null) {
60+
specificity++;
61+
}
62+
return specificity;
63+
}
64+
65+
private boolean isRuleMatched(Eid eid, ExtRequestPrebidDataEidPermissions eidPermission) {
66+
return (eidPermission.getInserter() == null || eidPermission.getInserter().equals(eid.getInserter()))
67+
&& (eidPermission.getSource() == null || eidPermission.getSource().equals(eid.getSource()))
68+
&& (eidPermission.getMatcher() == null || eidPermission.getMatcher().equals(eid.getMatcher()))
69+
&& (eidPermission.getMm() == null || eidPermission.getMm().equals(eid.getMm()));
70+
}
71+
72+
private boolean isBidderAllowed(String bidder, List<String> ruleBidders) {
73+
return ruleBidders == null || ruleBidders.stream()
74+
.anyMatch(allowedBidder -> StringUtils.equalsIgnoreCase(allowedBidder, bidder)
75+
|| WILDCARD_BIDDER.equals(allowedBidder));
76+
}
77+
}

src/main/java/org/prebid/server/auction/model/EidPermissionIndex.java

Lines changed: 0 additions & 114 deletions
This file was deleted.

0 commit comments

Comments
 (0)