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..08ed6c64903 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,11 @@ 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 +82,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.getIpv6()); + HttpUtil.addHeaderIfValueIsNotEmpty(headers, HttpUtil.X_FORWARDED_FOR_HEADER, device.getIp()); + 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..87922f6e7ca 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 { @@ -95,10 +98,34 @@ public void makeHttpRequestsShouldReturnExpectedHeaders() { // then 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(CONTENT_TYPE_HEADER)).isEqualTo(APPLICATION_JSON_CONTENT_TYPE); + assertThat(headers.get(ACCEPT_HEADER)).isEqualTo(APPLICATION_JSON_VALUE); + }); + 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); + assertThat(headers.get(ACCEPT_HEADER)).isEqualTo(APPLICATION_JSON_VALUE); + assertThat(headers.get(USER_AGENT_HEADER)).isEqualTo("ua"); + assertThat(headers.get(X_FORWARDED_FOR_HEADER)).isEqualTo("ipv6"); + }); assertThat(result.getErrors()).isEmpty(); }