From 5c3c1ba464e4ef709543ce6bd60fe5f83169ce39 Mon Sep 17 00:00:00 2001 From: pkaczmarek Date: Thu, 6 Feb 2025 14:39:13 +0100 Subject: [PATCH] Admatic: Add headers #3707 --- .../server/bidder/admatic/AdmaticBidder.java | 19 +++++++++++- .../bidder/admatic/AdmaticBidderTest.java | 29 +++++++++++++++++++ 2 files changed, 47 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/prebid/server/bidder/admatic/AdmaticBidder.java b/src/main/java/org/prebid/server/bidder/admatic/AdmaticBidder.java index 9f564a7275a..b52db9c8d72 100644 --- a/src/main/java/org/prebid/server/bidder/admatic/AdmaticBidder.java +++ b/src/main/java/org/prebid/server/bidder/admatic/AdmaticBidder.java @@ -2,10 +2,12 @@ import com.fasterxml.jackson.core.type.TypeReference; import com.iab.openrtb.request.BidRequest; +import com.iab.openrtb.request.Device; import com.iab.openrtb.request.Imp; import com.iab.openrtb.response.Bid; import com.iab.openrtb.response.BidResponse; import com.iab.openrtb.response.SeatBid; +import io.vertx.core.MultiMap; import org.apache.commons.collections4.CollectionUtils; import org.prebid.server.bidder.Bidder; import org.prebid.server.bidder.model.BidderBid; @@ -55,7 +57,10 @@ public Result>> makeHttpRequests(BidRequest request try { final AdmaticImpExt impExt = parseImpExt(imp); final BidRequest modifiedBidRequest = request.toBuilder().imp(Collections.singletonList(imp)).build(); - requests.add(BidderUtil.defaultRequest(modifiedBidRequest, resolveEndpoint(impExt), mapper)); + requests.add(BidderUtil.defaultRequest( + modifiedBidRequest, + headers(modifiedBidRequest.getDevice()), + resolveEndpoint(impExt), mapper)); } catch (PreBidException e) { errors.add(BidderError.badInput(e.getMessage())); } @@ -76,6 +81,18 @@ private String resolveEndpoint(AdmaticImpExt impExt) { return endpointUrl.replace(HOST_MACRO, HttpUtil.encodeUrl(impExt.getHost())); } + private MultiMap headers(Device device) { + final MultiMap headers = HttpUtil.headers(); + + if (device != null) { + HttpUtil.addHeaderIfValueIsNotEmpty(headers, HttpUtil.X_FORWARDED_FOR_HEADER, device.getIp()); + HttpUtil.addHeaderIfValueIsNotEmpty(headers, HttpUtil.X_FORWARDED_FOR_HEADER, device.getIpv6()); + HttpUtil.addHeaderIfValueIsNotEmpty(headers, HttpUtil.USER_AGENT_HEADER, device.getUa()); + } + + return headers; + } + @Override public Result> makeBids(BidderCall httpCall, BidRequest bidRequest) { try { diff --git a/src/test/java/org/prebid/server/bidder/admatic/AdmaticBidderTest.java b/src/test/java/org/prebid/server/bidder/admatic/AdmaticBidderTest.java index 00e4b785853..6bba63936f0 100644 --- a/src/test/java/org/prebid/server/bidder/admatic/AdmaticBidderTest.java +++ b/src/test/java/org/prebid/server/bidder/admatic/AdmaticBidderTest.java @@ -4,6 +4,7 @@ import com.iab.openrtb.request.Audio; import com.iab.openrtb.request.Banner; import com.iab.openrtb.request.BidRequest; +import com.iab.openrtb.request.Device; import com.iab.openrtb.request.Imp; import com.iab.openrtb.request.Native; import com.iab.openrtb.request.Video; @@ -36,6 +37,8 @@ import static org.prebid.server.util.HttpUtil.ACCEPT_HEADER; import static org.prebid.server.util.HttpUtil.APPLICATION_JSON_CONTENT_TYPE; import static org.prebid.server.util.HttpUtil.CONTENT_TYPE_HEADER; +import static org.prebid.server.util.HttpUtil.USER_AGENT_HEADER; +import static org.prebid.server.util.HttpUtil.X_FORWARDED_FOR_HEADER; import static org.springframework.util.MimeTypeUtils.APPLICATION_JSON_VALUE; public class AdmaticBidderTest extends VertxTest { @@ -102,6 +105,32 @@ public void makeHttpRequestsShouldReturnExpectedHeaders() { assertThat(result.getErrors()).isEmpty(); } + @Test + public void makeHttpRequestsShouldReturnRequestsWithHeadersIfDeviceIsPresent() { + // given + final BidRequest bidRequest = givenBidRequest(identity()) + .toBuilder() + .device(Device.builder().ua("ua").ip("ip").ipv6("ipv6").build()) + .build(); + + // when + final Result>> result = target.makeHttpRequests(bidRequest); + + // then + assertThat(result.getErrors()).isEmpty(); + assertThat(result.getValue()).hasSize(1).first() + .extracting(HttpRequest::getHeaders) + .satisfies(headers -> assertThat(headers.get(CONTENT_TYPE_HEADER)) + .isEqualTo(APPLICATION_JSON_CONTENT_TYPE)) + .satisfies(headers -> assertThat(headers.get(ACCEPT_HEADER)) + .isEqualTo(APPLICATION_JSON_VALUE)) + .satisfies(headers -> assertThat(headers.get(USER_AGENT_HEADER)) + .isEqualTo("ua")) + .satisfies(headers -> assertThat(headers.get(X_FORWARDED_FOR_HEADER)) + .isEqualTo("ip")); + assertThat(result.getErrors()).isEmpty(); + } + @Test public void shouldMakeOneRequestWhenOneImpIsValidAndAnotherIsNot() { // given