Skip to content

Commit 2231e23

Browse files
committed
Merge branch 'master' into add-vertx-uri-template
# Conflicts: # src/test/resources/org/prebid/server/it/test-application.properties
2 parents 430bbc0 + ee59b6a commit 2231e23

124 files changed

Lines changed: 4819 additions & 1027 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

extra/modules/live-intent-omni-channel-identity/src/main/java/org/prebid/server/hooks/modules/liveintent/omni/channel/identity/v1/hooks/LiveIntentOmniChannelIdentityProcessedAuctionRequestHook.java

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
import org.apache.commons.collections4.CollectionUtils;
1111
import org.apache.commons.collections4.ListUtils;
1212
import org.apache.commons.collections4.SetUtils;
13-
import org.apache.commons.lang3.StringUtils;
1413
import org.prebid.server.activity.Activity;
1514
import org.prebid.server.activity.ComponentType;
1615
import org.prebid.server.activity.infrastructure.ActivityInfrastructure;
@@ -50,7 +49,6 @@
5049
import java.util.Optional;
5150
import java.util.Set;
5251
import java.util.concurrent.ThreadLocalRandom;
53-
import java.util.stream.Collectors;
5452

5553
public class LiveIntentOmniChannelIdentityProcessedAuctionRequestHook implements ProcessedAuctionRequestHook {
5654

@@ -216,19 +214,24 @@ private BidRequest updateBidRequest(BidRequest bidRequest, List<Eid> resolvedEid
216214
}
217215

218216
private ExtRequest updateExtRequest(ExtRequest ext, List<Eid> resolvedEids) {
219-
final Set<String> uniqueSources = CollectionUtils.emptyIfNull(resolvedEids).stream()
220-
.map(Eid::getSource)
221-
.filter(StringUtils::isNotEmpty)
222-
.collect(Collectors.toSet());
217+
if (CollectionUtils.isEmpty(resolvedEids)) {
218+
return ext;
219+
}
223220

224221
final ExtRequestPrebid extPrebid = ext != null ? ext.getPrebid() : null;
225222
final ExtRequestPrebidData extPrebidData = extPrebid != null ? extPrebid.getData() : null;
226223
final List<ExtRequestPrebidDataEidPermissions> eidPermissions =
227224
extPrebidData != null ? extPrebidData.getEidPermissions() : null;
228225

226+
final String matcher = resolvedEids.stream()
227+
.map(Eid::getMatcher)
228+
.filter(Objects::nonNull)
229+
.findFirst()
230+
.orElse(null);
231+
229232
final List<ExtRequestPrebidDataEidPermissions> modifiedEidPermissions = CollectionUtils.isEmpty(eidPermissions)
230-
? createEidPermissions(uniqueSources)
231-
: modifyEidPermissions(eidPermissions, uniqueSources);
233+
? createEidPermissions(matcher)
234+
: modifyEidPermissions(eidPermissions, matcher);
232235

233236
final ExtRequestPrebid updatedExtPrebid = Optional.ofNullable(extPrebid)
234237
.map(ExtRequestPrebid::toBuilder)
@@ -257,25 +260,21 @@ private static User updateUser(User user, List<Eid> resolvedEids) {
257260
.build();
258261
}
259262

260-
private List<ExtRequestPrebidDataEidPermissions> createEidPermissions(Set<String> sources) {
261-
return sources.stream()
262-
.map(source -> ExtRequestPrebidDataEidPermissions.builder()
263-
.source(source)
264-
.inserter(INSERTER)
265-
.bidders(targetBidders.stream().toList())
266-
.build())
267-
.toList();
263+
private List<ExtRequestPrebidDataEidPermissions> createEidPermissions(String matcher) {
264+
return List.of(ExtRequestPrebidDataEidPermissions.builder()
265+
.matcher(matcher)
266+
.inserter(INSERTER)
267+
.bidders(targetBidders.stream().toList())
268+
.build());
268269
}
269270

270271
private List<ExtRequestPrebidDataEidPermissions> modifyEidPermissions(
271-
List<ExtRequestPrebidDataEidPermissions> eidPermissions,
272-
Set<String> sources) {
272+
List<ExtRequestPrebidDataEidPermissions> eidPermissions, String matcher) {
273273
final List<ExtRequestPrebidDataEidPermissions> modifiedEidPermissions = eidPermissions.stream()
274-
.map(it -> updateEidPermission(it, sources))
275-
.filter(Objects::nonNull)
276-
.toList();
277-
final List<ExtRequestPrebidDataEidPermissions> defaultEidPermissions = createEidPermissions(sources);
278-
return ListUtils.union(modifiedEidPermissions, defaultEidPermissions);
274+
.map(p -> updateEidPermission(p, matcher))
275+
.filter(Objects::nonNull)
276+
.toList();
277+
return ListUtils.union(modifiedEidPermissions, createEidPermissions(matcher));
279278
}
280279

281280
private ExtRequestPrebidData updatePrebidData(ExtRequestPrebidData extPrebidData,
@@ -287,8 +286,8 @@ private ExtRequestPrebidData updatePrebidData(ExtRequestPrebidData extPrebidData
287286
}
288287

289288
private ExtRequestPrebidDataEidPermissions updateEidPermission(ExtRequestPrebidDataEidPermissions eidPermission,
290-
Set<String> sources) {
291-
if (!sources.contains(eidPermission.getSource()) || !INSERTER.equals(eidPermission.getInserter())) {
289+
String matcher) {
290+
if (!Objects.equals(matcher, eidPermission.getMatcher()) || !INSERTER.equals(eidPermission.getInserter())) {
292291
return eidPermission;
293292
}
294293

extra/modules/live-intent-omni-channel-identity/src/test/java/org/prebid/server/hooks/modules/liveintent/omni/channel/identity/v1/LiveIntentOmniChannelIdentityProcessedAuctionRequestHookTest.java

Lines changed: 30 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,8 @@ public void setUp() {
9191

9292
defaultPermissions = ExtRequestPrebidDataEidPermissions.builder()
9393
.inserter("s2s.liveintent.com")
94+
.matcher("test.matcher.com")
9495
.bidders(configuredBidders.stream().toList())
95-
.source("liveintent.com")
9696
.build();
9797

9898
target = new LiveIntentOmniChannelIdentityProcessedAuctionRequestHook(
@@ -254,13 +254,13 @@ public void callShouldEnrichUserEidsWithRequestedEids() {
254254
final User givenUser = User.builder().eids(singletonList(givenEid)).build();
255255
final BidRequest givenBidRequest = BidRequest.builder().id("request").user(givenUser).build();
256256

257-
final Eid expectedEid = Eid.builder()
257+
final Eid apiResponseEid = Eid.builder()
258258
.source("liveintent.com")
259+
.matcher("test.matcher.com")
259260
.uids(singletonList(Uid.builder().id("id2").atype(3).build()))
260-
.matcher("liveintent.com")
261261
.build();
262262

263-
final String responseBody = MAPPER.encodeToString(IdResResponse.of(List.of(expectedEid)));
263+
final String responseBody = MAPPER.encodeToString(IdResResponse.of(List.of(apiResponseEid)));
264264
given(httpClient.post(any(), any(), any(), anyLong()))
265265
.willReturn(Future.succeededFuture(HttpClientResponse.of(200, null, responseBody)));
266266

@@ -279,11 +279,24 @@ public void callShouldEnrichUserEidsWithRequestedEids() {
279279
// then
280280
assertThat(result.status()).isEqualTo(InvocationStatus.success);
281281
assertThat(result.action()).isEqualTo(InvocationAction.update);
282-
assertThat(result.payloadUpdate().apply(AuctionRequestPayloadImpl.of(givenBidRequest)))
282+
283+
final AuctionRequestPayload updatedPayload =
284+
result.payloadUpdate().apply(AuctionRequestPayloadImpl.of(givenBidRequest));
285+
286+
assertThat(updatedPayload)
283287
.extracting(AuctionRequestPayload::bidRequest)
284288
.extracting(BidRequest::getUser)
285289
.extracting(User::getEids)
286-
.isEqualTo(List.of(givenEid, expectedEid.toBuilder().inserter("s2s.liveintent.com").build()));
290+
.isEqualTo(List.of(givenEid, apiResponseEid.toBuilder()
291+
.inserter("s2s.liveintent.com")
292+
.build()));
293+
294+
assertThat(updatedPayload)
295+
.extracting(AuctionRequestPayload::bidRequest)
296+
.extracting(BidRequest::getExt)
297+
.extracting(ExtRequest::getPrebid)
298+
.extracting(ExtRequestPrebid::getData)
299+
.isEqualTo(ExtRequestPrebidData.of(null, List.of(defaultPermissions)));
287300

288301
verify(httpClient).post(
289302
eq("https://test.com/idres"),
@@ -297,13 +310,13 @@ public void callShouldCreateUserAndUseRequestedEidsWhenUserIsAbsent() {
297310
// given
298311
final BidRequest givenBidRequest = BidRequest.builder().id("request").user(null).build();
299312

300-
final Eid expectedEid = Eid.builder()
313+
final Eid apiResponseEid = Eid.builder()
301314
.source("liveintent.com")
315+
.matcher("test.matcher.com")
302316
.uids(singletonList(Uid.builder().id("id2").atype(3).build()))
303-
.matcher("liveintent.com")
304317
.build();
305318

306-
final String responseBody = MAPPER.encodeToString(IdResResponse.of(List.of(expectedEid)));
319+
final String responseBody = MAPPER.encodeToString(IdResResponse.of(List.of(apiResponseEid)));
307320
given(httpClient.post(any(), any(), any(), anyLong()))
308321
.willReturn(Future.succeededFuture(HttpClientResponse.of(200, null, responseBody)));
309322

@@ -326,7 +339,9 @@ public void callShouldCreateUserAndUseRequestedEidsWhenUserIsAbsent() {
326339
.extracting(AuctionRequestPayload::bidRequest)
327340
.extracting(BidRequest::getUser)
328341
.extracting(User::getEids)
329-
.isEqualTo(List.of(expectedEid.toBuilder().inserter("s2s.liveintent.com").build()));
342+
.isEqualTo(List.of(apiResponseEid.toBuilder()
343+
.inserter("s2s.liveintent.com")
344+
.build()));
330345

331346
verify(httpClient).post(
332347
eq("https://test.com/idres"),
@@ -400,12 +415,12 @@ public void shouldRestrictExistingEidPermissionsByIntersectionAndKeepGlobalBidde
400415
.build();
401416

402417
final ExtRequestPrebidDataEidPermissions liBidder2 = ExtRequestPrebidDataEidPermissions.builder()
403-
.source("liveintent.com")
418+
.matcher("test.matcher.com")
404419
.inserter("s2s.liveintent.com")
405420
.bidders(singletonList("bidder2"))
406421
.build();
407422
final ExtRequestPrebidDataEidPermissions liBidder23 = ExtRequestPrebidDataEidPermissions.builder()
408-
.source("liveintent.com")
423+
.matcher("test.matcher.com")
409424
.inserter("s2s.liveintent.com")
410425
.bidders(List.of("bidder2", "bidder3"))
411426
.build();
@@ -423,70 +438,7 @@ public void shouldRestrictExistingEidPermissionsByIntersectionAndKeepGlobalBidde
423438
List.of("bidderX"),
424439
ListUtil.union(List.of(otherBidder, liBidder2), List.of(defaultPermissions)));
425440

426-
final Eid expectedEid = Eid.builder().source("liveintent.com").build();
427-
428-
final String responseBody = MAPPER.encodeToString(IdResResponse.of(List.of(expectedEid)));
429-
given(httpClient.post(any(), any(), any(), anyLong()))
430-
.willReturn(Future.succeededFuture(HttpClientResponse.of(200, null, responseBody)));
431-
432-
given(auctionInvocationContext.auctionContext()).willReturn(auctionContext);
433-
given(auctionContext.getActivityInfrastructure()).willReturn(activityInfrastructure);
434-
given(activityInfrastructure.isAllowed(any(), any())).willReturn(true);
435-
given(userFpdActivityMask.maskUser(any(), eq(false), eq(false)))
436-
.willAnswer(invocation -> invocation.getArgument(0));
437-
given(userFpdActivityMask.maskDevice(any(), eq(false), eq(false)))
438-
.willAnswer(invocation -> invocation.getArgument(0));
439-
440-
// when
441-
final InvocationResult<AuctionRequestPayload> result =
442-
target.call(AuctionRequestPayloadImpl.of(givenBidRequest), auctionInvocationContext).result();
443-
// then
444-
assertThat(result.status()).isEqualTo(InvocationStatus.success);
445-
assertThat(result.payloadUpdate().apply(AuctionRequestPayloadImpl.of(givenBidRequest)))
446-
.extracting(AuctionRequestPayload::bidRequest)
447-
.extracting(BidRequest::getExt)
448-
.extracting(ExtRequest::getPrebid)
449-
.extracting(ExtRequestPrebid::getData)
450-
.isEqualTo(expectedData);
451-
452-
verify(httpClient).post(
453-
eq("https://test.com/idres"),
454-
argThat(headers -> headers.contains("Authorization", "Bearer auth_token", true)),
455-
eq(MAPPER.encodeToString(givenBidRequest)),
456-
eq(5L));
457-
}
458-
459-
@Test
460-
public void shouldNotAddNewEidPermissionsOrModifyGlobalBiddersWhenSourceNotPresent() {
461-
// given
462-
final Uid givenUid = Uid.builder().id("id1").atype(2).build();
463-
final Eid givenEid = Eid.builder().source("some.source.com").uids(singletonList(givenUid)).build();
464-
final User givenUser = User.builder().eids(singletonList(givenEid)).build();
465-
final ExtRequestPrebidDataEidPermissions bidder1 = ExtRequestPrebidDataEidPermissions.builder()
466-
.source("some.other-source.com")
467-
.inserter("some.other-inserter.com")
468-
.bidders(singletonList("bidder3"))
469-
.build();
470-
final ExtRequestPrebidDataEidPermissions bidder2 = ExtRequestPrebidDataEidPermissions.builder()
471-
.source("some.source.com")
472-
.inserter("s2s.liveintent.com")
473-
.bidders(singletonList("bidder3"))
474-
.build();
475-
476-
final List<ExtRequestPrebidDataEidPermissions> bidders = List.of(bidder1, bidder2);
477-
478-
final BidRequest givenBidRequest = BidRequest.builder()
479-
.id("request")
480-
.user(givenUser)
481-
.ext(ExtRequest.of(ExtRequestPrebid.builder()
482-
.data(ExtRequestPrebidData.of(singletonList("bidder3"), bidders))
483-
.build()))
484-
.build();
485-
486-
final ExtRequestPrebidData expectedData = ExtRequestPrebidData.of(List.of("bidder3"),
487-
ListUtil.union(bidders, List.of(defaultPermissions)));
488-
489-
final Eid expectedEid = Eid.builder().source("liveintent.com").build();
441+
final Eid expectedEid = Eid.builder().source("liveintent.com").matcher("test.matcher.com").build();
490442

491443
final String responseBody = MAPPER.encodeToString(IdResResponse.of(List.of(expectedEid)));
492444
given(httpClient.post(any(), any(), any(), anyLong()))
@@ -530,7 +482,7 @@ public void shouldRemovePermissionWhenIntersectionIsEmpty() {
530482
List.of("bidderGlobal"),
531483
List.of(
532484
ExtRequestPrebidDataEidPermissions.builder()
533-
.source("liveintent.com")
485+
.matcher("test.matcher.com")
534486
.inserter("s2s.liveintent.com")
535487
.bidders(singletonList("not-allowed"))
536488
.build(),
@@ -545,7 +497,7 @@ public void shouldRemovePermissionWhenIntersectionIsEmpty() {
545497
.ext(ExtRequest.of(ExtRequestPrebid.builder().data(givenData).build()))
546498
.build();
547499

548-
final Eid expectedEid = Eid.builder().source("liveintent.com").build();
500+
final Eid expectedEid = Eid.builder().source("liveintent.com").matcher("test.matcher.com").build();
549501
final String responseBody = MAPPER.encodeToString(IdResResponse.of(List.of(expectedEid)));
550502
given(httpClient.post(any(), any(), any(), anyLong()))
551503
.willReturn(Future.succeededFuture(HttpClientResponse.of(200, null, responseBody)));

extra/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@
4949
<metrics-influxdb.version>1.2.3</metrics-influxdb.version>
5050
<vertx.prometheus.version>0.16.0</vertx.prometheus.version>
5151
<iabtcf.version>2.0.10</iabtcf.version>
52-
<gpp-encoder.version>3.2.4</gpp-encoder.version>
52+
<gpp-encoder.version>3.2.5</gpp-encoder.version>
5353
<maxmind-client.version>4.2.1</maxmind-client.version>
5454
<protobuf.version>3.25.6</protobuf.version>
5555
<protoc.version>${protobuf.version}</protoc.version>

src/main/java/org/prebid/server/auction/privacy/contextfactory/AuctionPrivacyContextFactory.java

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

3+
import com.iab.openrtb.request.App;
34
import com.iab.openrtb.request.BidRequest;
45
import com.iab.openrtb.request.Device;
56
import com.iab.openrtb.request.Geo;
@@ -101,13 +102,17 @@ private static AccountGdprConfig accountGdprConfig(Account account) {
101102
}
102103

103104
private static RequestLogInfo requestLogInfo(MetricName requestType, BidRequest bidRequest, String accountId) {
104-
final String referrerUrl = MetricName.openrtb2web == requestType
105-
? Optional.ofNullable(bidRequest.getSite())
106-
.map(Site::getRef)
107-
.orElse(null)
108-
: null;
109-
110-
return RequestLogInfo.of(requestType, referrerUrl, accountId);
105+
final String source = switch (requestType) {
106+
case MetricName.openrtb2web -> Optional.ofNullable(bidRequest.getSite())
107+
.map(Site::getRef)
108+
.orElse(null);
109+
case MetricName.openrtb2app -> Optional.ofNullable(bidRequest.getApp())
110+
.map(App::getBundle)
111+
.orElse(null);
112+
case null, default -> null;
113+
};
114+
115+
return RequestLogInfo.of(requestType, source, accountId);
111116
}
112117

113118
private static TcfContext logWarnings(List<String> debugWarnings, TcfContext tcfContext) {

0 commit comments

Comments
 (0)