From 9e1534b8efcccec3749b66fa430b94a2a259ac90 Mon Sep 17 00:00:00 2001 From: ilya Date: Tue, 17 Feb 2026 12:39:44 +0100 Subject: [PATCH] DATA-53829: Fixing permission logic --- ...elIdentityProcessedAuctionRequestHook.java | 37 ++++++++++++------- ...entityProcessedAuctionRequestHookTest.java | 4 +- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/extra/modules/live-intent-omni-channel-identity/src/main/java/org/prebid/server/hooks/modules/liveintent/omni/channel/identity/v1/hooks/LiveIntentOmniChannelIdentityProcessedAuctionRequestHook.java b/extra/modules/live-intent-omni-channel-identity/src/main/java/org/prebid/server/hooks/modules/liveintent/omni/channel/identity/v1/hooks/LiveIntentOmniChannelIdentityProcessedAuctionRequestHook.java index 3afdb146018..93e7115dadf 100644 --- a/extra/modules/live-intent-omni-channel-identity/src/main/java/org/prebid/server/hooks/modules/liveintent/omni/channel/identity/v1/hooks/LiveIntentOmniChannelIdentityProcessedAuctionRequestHook.java +++ b/extra/modules/live-intent-omni-channel-identity/src/main/java/org/prebid/server/hooks/modules/liveintent/omni/channel/identity/v1/hooks/LiveIntentOmniChannelIdentityProcessedAuctionRequestHook.java @@ -44,6 +44,7 @@ import org.prebid.server.vertx.httpclient.HttpClient; import org.prebid.server.vertx.httpclient.model.HttpClientResponse; +import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.Optional; @@ -58,6 +59,8 @@ public class LiveIntentOmniChannelIdentityProcessedAuctionRequestHook implements private static final String CODE = "liveintent-omni-channel-identity-enrichment-hook"; + private static final String INSERTER = "server"; + private final LiveIntentOmniChannelProperties config; private final JacksonMapper mapper; private final HttpClient httpClient; @@ -161,7 +164,11 @@ private MultiMap headers() { } private IdResResponse processResponse(HttpClientResponse response) { - return mapper.decodeValue(response.getBody(), IdResResponse.class); + final IdResResponse res = mapper.decodeValue(response.getBody(), IdResResponse.class); + final List eids = res.getEids().stream() + .map(eid -> eid.toBuilder().inserter(INSERTER).build()) + .toList(); + return IdResResponse.of(eids); } private static Future> noAction() { @@ -208,14 +215,6 @@ private BidRequest updateAllowedBidders(BidRequest bidRequest, List resolve final ExtRequestPrebid extPrebid = ext != null ? ext.getPrebid() : null; final ExtRequestPrebidData extPrebidData = extPrebid != null ? extPrebid.getData() : null; - final List existingPerms = extPrebidData != null - ? extPrebidData.getEidPermissions() - : null; - - if (CollectionUtils.isEmpty(existingPerms)) { - return bidRequest; - } - final ExtRequestPrebid updatedExtPrebid = Optional.ofNullable(extPrebid) .map(ExtRequestPrebid::toBuilder) .orElseGet(ExtRequestPrebid::builder) @@ -237,7 +236,11 @@ private ExtRequestPrebidData updatePrebidData(ExtRequestPrebidData extPrebidData .map(Eid::getSource) .collect(Collectors.toSet()); - final List updatedPermissions = extPrebidData.getEidPermissions().stream() + final List eidPermissions = extPrebidData != null + ? ListUtils.emptyIfNull(extPrebidData.getEidPermissions()) + : Collections.emptyList(); + + final List updatedPermissions = eidPermissions.stream() .map(permission -> restrictEidPermission(permission, resolvedSources)) .filter(Objects::nonNull) .toList(); @@ -252,16 +255,24 @@ private ExtRequestPrebidDataEidPermissions restrictEidPermission(ExtRequestPrebi return permission; } + final List permittedBidders = ListUtils.emptyIfNull(permission.getBidders()); + + if (CollectionUtils.isEmpty(permittedBidders) || permittedBidders.contains("*")) { + return ExtRequestPrebidDataEidPermissions.builder() + .source(permission.getSource()) + .bidders(targetBidders.stream().toList()) + .build(); + } + final List finalBidders = ListUtils.emptyIfNull(permission.getBidders()).stream() .filter(targetBidders::contains) .toList(); return CollectionUtils.isEmpty(finalBidders) ? null - : ExtRequestPrebidDataEidPermissions - .builder() - .bidders(finalBidders) + : ExtRequestPrebidDataEidPermissions.builder() .source(permission.getSource()) + .bidders(finalBidders) .build(); } diff --git a/extra/modules/live-intent-omni-channel-identity/src/test/java/org/prebid/server/hooks/modules/liveintent/omni/channel/identity/v1/LiveIntentOmniChannelIdentityProcessedAuctionRequestHookTest.java b/extra/modules/live-intent-omni-channel-identity/src/test/java/org/prebid/server/hooks/modules/liveintent/omni/channel/identity/v1/LiveIntentOmniChannelIdentityProcessedAuctionRequestHookTest.java index 4dfaa8c8df4..47fd9a161c6 100644 --- a/extra/modules/live-intent-omni-channel-identity/src/test/java/org/prebid/server/hooks/modules/liveintent/omni/channel/identity/v1/LiveIntentOmniChannelIdentityProcessedAuctionRequestHookTest.java +++ b/extra/modules/live-intent-omni-channel-identity/src/test/java/org/prebid/server/hooks/modules/liveintent/omni/channel/identity/v1/LiveIntentOmniChannelIdentityProcessedAuctionRequestHookTest.java @@ -273,7 +273,7 @@ public void callShouldEnrichUserEidsWithRequestedEids() { .extracting(AuctionRequestPayload::bidRequest) .extracting(BidRequest::getUser) .extracting(User::getEids) - .isEqualTo(List.of(givenEid, expectedEid)); + .isEqualTo(List.of(givenEid, expectedEid.toBuilder().inserter("server").build())); verify(httpClient).post( eq("https://test.com/idres"), @@ -315,7 +315,7 @@ public void callShouldCreateUserAndUseRequestedEidsWhenUserIsAbsent() { .extracting(AuctionRequestPayload::bidRequest) .extracting(BidRequest::getUser) .extracting(User::getEids) - .isEqualTo(List.of(expectedEid)); + .isEqualTo(List.of(expectedEid.toBuilder().inserter("server").build())); verify(httpClient).post( eq("https://test.com/idres"),