Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public LiveIntentOmniChannelIdentityProcessedAuctionRequestHook(LiveIntentOmniCh
double logSamplingRate) {

this.config = Objects.requireNonNull(config);
HttpUtil.validateUrlSyntax(config.getIdentityResolutionEndpoint());
HttpUtil.validateUrl(config.getIdentityResolutionEndpoint());
this.mapper = Objects.requireNonNull(mapper);
this.httpClient = Objects.requireNonNull(httpClient);
this.logSamplingRate = logSamplingRate;
Expand Down
19 changes: 0 additions & 19 deletions extra/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,7 @@
<commons.collections.version>4.4</commons.collections.version>
<commons.compress.version>1.27.1</commons.compress.version>
<commons-math3.version>3.6.1</commons-math3.version>
<commons-validator.version>1.10.0</commons-validator.version>
<scram.version>2.1</scram.version>
<httpclient.version>4.5.14</httpclient.version>
<ipaddress.version>5.5.1</ipaddress.version>
<oshi.version>6.8.0</oshi.version>
<json-schema-validator.version>1.5.6</json-schema-validator.version>
Expand Down Expand Up @@ -137,23 +135,6 @@
<artifactId>commons-math3</artifactId>
<version>${commons-math3.version}</version>
</dependency>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
<version>${commons-validator.version}</version>
</dependency>
<!-- TODO: refactor code to replace URIBuilder with something else so that this dep can be removed -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>${httpclient.version}</version>
<exclusions>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.github.seancfoley</groupId>
<artifactId>ipaddress</artifactId>
Expand Down
12 changes: 4 additions & 8 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,10 @@
<groupId>io.vertx</groupId>
<artifactId>vertx-auth-common</artifactId>
</dependency>
<dependency>
<groupId>io.vertx</groupId>
<artifactId>vertx-uri-template</artifactId>
</dependency>
<dependency>
<groupId>com.ongres.scram</groupId>
<artifactId>client</artifactId>
Expand Down Expand Up @@ -110,14 +114,6 @@
<groupId>org.apache.commons</groupId>
<artifactId>commons-math3</artifactId>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>commons-validator</groupId>
<artifactId>commons-validator</artifactId>
</dependency>
<dependency>
<groupId>com.github.seancfoley</groupId>
<artifactId>ipaddress</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
import com.iab.openrtb.response.SeatBid;
import io.vertx.core.Future;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.http.client.utils.URIBuilder;
import org.prebid.server.analytics.AnalyticsReporter;
import org.prebid.server.analytics.model.AuctionEvent;
import org.prebid.server.analytics.model.NotificationEvent;
Expand All @@ -27,9 +26,9 @@
import org.prebid.server.log.LoggerFactory;
import org.prebid.server.proto.openrtb.ext.request.ExtRequest;
import org.prebid.server.proto.openrtb.ext.request.ExtRequestPrebid;
import org.prebid.server.util.UriTemplate;
import org.prebid.server.vertx.httpclient.HttpClient;

import java.net.URISyntaxException;
import java.util.Collection;
import java.util.List;
import java.util.Objects;
Expand All @@ -43,6 +42,7 @@ public class LiveIntentAnalyticsReporter implements AnalyticsReporter {

private final HttpClient httpClient;
private final LiveIntentAnalyticsProperties properties;
private final UriTemplate analyticsEndpointTemplate;
private final JacksonMapper jacksonMapper;

public LiveIntentAnalyticsReporter(
Expand All @@ -52,6 +52,7 @@ public LiveIntentAnalyticsReporter(

this.httpClient = Objects.requireNonNull(httpClient);
this.properties = Objects.requireNonNull(properties);
this.analyticsEndpointTemplate = UriTemplate.of(properties.getAnalyticsEndpoint());
this.jacksonMapper = Objects.requireNonNull(jacksonMapper);
}

Expand Down Expand Up @@ -96,12 +97,11 @@ private Future<Void> processAuctionEvent(AuctionContext auctionContext) {

try {
return httpClient.post(
new URIBuilder(properties.getAnalyticsEndpoint())
.setPath("/analytic-events/pbsj-bids")
.build()
.toString(),
jacksonMapper.encodeToString(pbsjBids),
properties.getTimeoutMs())
analyticsEndpointTemplate.toBuilder()
.pathParam("path", "/analytic-events/pbsj-bids")
.build(),
jacksonMapper.encodeToString(pbsjBids),
properties.getTimeoutMs())
.mapEmpty();
} catch (Exception e) {
logger.error("Error processing event: {}", e.getMessage());
Expand Down Expand Up @@ -169,18 +169,12 @@ private Optional<PbsjBid> buildPbsjBid(
}

private Future<Void> processNotificationEvent(NotificationEvent notificationEvent) {
try {
final String url = new URIBuilder(properties.getAnalyticsEndpoint())
.setPath("/analytic-events/pbsj-winning-bid")
.setParameter("b", notificationEvent.getBidder())
.setParameter("bidId", notificationEvent.getBidId())
.build()
.toString();
return httpClient.get(url, properties.getTimeoutMs()).mapEmpty();
} catch (URISyntaxException e) {
logger.error("Error composing url for notification event: {}", e.getMessage());
return Future.failedFuture(e);
}
final String url = analyticsEndpointTemplate.toBuilder()
.pathParam("path", "/analytic-events/pbsj-winning-bid")
.queryParam("b", notificationEvent.getBidder())
.queryParam("bidId", notificationEvent.getBidId())
.build();
return httpClient.get(url, properties.getTimeoutMs()).mapEmpty();
}

@Override
Expand Down
10 changes: 8 additions & 2 deletions src/main/java/org/prebid/server/auction/IpAddressHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,23 @@
import inet.ipaddr.IPAddressString;
import inet.ipaddr.IPAddressStringParameters;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.conn.util.InetAddressUtils;
import org.prebid.server.auction.model.IpAddress;
import org.prebid.server.log.Logger;
import org.prebid.server.log.LoggerFactory;

import java.util.List;
import java.util.regex.Pattern;

public class IpAddressHelper {

private static final Logger logger = LoggerFactory.getLogger(IpAddressHelper.class);

private static final Pattern IP_V4_PATTERN = Pattern.compile("""
^\
(?:[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.\
(?:(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\\.){2}\
(?:[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$
""");
private static final IPAddressStringParameters IP_ADDRESS_VALIDATION_OPTIONS =
IPAddressString.DEFAULT_VALIDATION_OPTIONS.toBuilder()
.allowSingleSegment(false)
Expand Down Expand Up @@ -73,7 +79,7 @@ public IpAddress toIpAddress(String ip) {
}

public String maskIpv4(String ip) {
if (StringUtils.isBlank(ip) || !InetAddressUtils.isIPv4Address(ip)) {
if (StringUtils.isBlank(ip) || !IP_V4_PATTERN.matcher(ip).matches()) {
return ip;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@
import io.vertx.core.http.HttpMethod;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.utils.URIBuilder;
import org.prebid.server.bidder.Bidder;
import org.prebid.server.bidder.adgeneration.model.AdgenerationResponse;
import org.prebid.server.bidder.model.BidderBid;
Expand All @@ -31,8 +30,8 @@
import org.prebid.server.proto.openrtb.ext.response.BidType;
import org.prebid.server.util.HttpUtil;
import org.prebid.server.util.ObjectUtil;
import org.prebid.server.util.UriTemplate;

import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
Expand All @@ -51,11 +50,11 @@ public class AdgenerationBidder implements Bidder<Void> {
new TypeReference<>() {
};

private final String endpointUrl;
private final UriTemplate endpointTemplate;
private final JacksonMapper mapper;

public AdgenerationBidder(String endpointUrl, JacksonMapper mapper) {
this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl));
this.endpointTemplate = UriTemplate.of(endpointUrl);
this.mapper = Objects.requireNonNull(mapper);
}

Expand Down Expand Up @@ -96,21 +95,14 @@ private ExtImpAdgeneration parseAndValidateImpExt(Imp imp) {
}

private String getUri(String adSize, String id, String currency, BidRequest bidRequest) {
final URIBuilder uriBuilder;
try {
uriBuilder = new URIBuilder(endpointUrl);
} catch (URISyntaxException e) {
throw new PreBidException("Invalid url: %s, error: %s".formatted(endpointUrl, e.getMessage()));
}

uriBuilder
.addParameter("posall", "SSPLOC")
.addParameter("id", id)
.addParameter("hb", "true")
.addParameter("t", "json3")
.addParameter("currency", currency)
.addParameter("sdkname", "prebidserver")
.addParameter("adapterver", VERSION);
final UriTemplate.UriBuilder uriBuilder = endpointTemplate.toBuilder()
.queryParam("posall", "SSPLOC")
.queryParam("id", id)
.queryParam("hb", "true")
.queryParam("t", "json3")
.queryParam("currency", currency)
.queryParam("sdkname", "prebidserver")
.queryParam("adapterver", VERSION);

addParameterIfNotEmpty(uriBuilder, "sizes", adSize);
addParameterIfNotEmpty(uriBuilder, "tp", ObjectUtil.getIfNotNull(bidRequest.getSite(), Site::getPage));
Expand All @@ -122,21 +114,21 @@ private String getUri(String adSize, String id, String currency, BidRequest bidR
final Device device = bidRequest.getDevice();
final String deviceOs = device != null ? device.getOs() : null;
if ("android".equals(deviceOs)) {
uriBuilder.addParameter("sdktype", "1");
uriBuilder.queryParam("sdktype", "1");
addParameterIfNotEmpty(uriBuilder, "advertising_id", device.getIfa());
} else if ("ios".equals(deviceOs)) {
uriBuilder.addParameter("sdktype", "2");
uriBuilder.queryParam("sdktype", "2");
addParameterIfNotEmpty(uriBuilder, "idfa", device.getIfa());
} else {
uriBuilder.addParameter("sdktype", "0");
uriBuilder.queryParam("sdktype", "0");
}

return uriBuilder.toString();
return uriBuilder.build();
}

private static void addParameterIfNotEmpty(URIBuilder uriBuilder, String parameter, String value) {
private static void addParameterIfNotEmpty(UriTemplate.UriBuilder uriBuilder, String parameter, String value) {
if (StringUtils.isNotEmpty(value)) {
uriBuilder.addParameter(parameter, value);
uriBuilder.queryParam(parameter, value);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import org.apache.commons.lang3.BooleanUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.client.utils.URIBuilder;
import org.prebid.server.bidder.Bidder;
import org.prebid.server.bidder.adnuntius.model.request.AdnuntiusMetaData;
import org.prebid.server.bidder.adnuntius.model.request.AdnuntiusNativeRequest;
Expand Down Expand Up @@ -58,9 +57,9 @@
import org.prebid.server.util.BidderUtil;
import org.prebid.server.util.HttpUtil;
import org.prebid.server.util.ObjectUtil;
import org.prebid.server.util.UriTemplate;

import java.math.BigDecimal;
import java.net.URISyntaxException;
import java.time.Clock;
import java.time.OffsetDateTime;
import java.util.ArrayList;
Expand All @@ -83,8 +82,8 @@ public class AdnuntiusBidder implements Bidder<AdnuntiusRequest> {
private static final int BANNER_MTYPE = 1;
private static final int NATIVE_MTYPE = 4;

private final String endpointUrl;
private final String euEndpoint;
private final UriTemplate endpointTemplate;
private final UriTemplate euEndpointTemplate;
private final Clock clock;
private final JacksonMapper mapper;

Expand All @@ -93,8 +92,8 @@ public AdnuntiusBidder(String endpointUrl,
Clock clock,
JacksonMapper mapper) {

this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl));
this.euEndpoint = euEndpoint == null ? null : HttpUtil.validateUrl(euEndpoint);
this.endpointTemplate = UriTemplate.of(endpointUrl);
this.euEndpointTemplate = euEndpoint != null ? UriTemplate.of(euEndpoint) : null;
this.clock = Objects.requireNonNull(clock);
this.mapper = Objects.requireNonNull(mapper);
}
Expand Down Expand Up @@ -261,35 +260,22 @@ private List<HttpRequest<AdnuntiusRequest>> createHttpRequests(
}

private String makeEndpoint(BidRequest bidRequest, Boolean noCookies) {
try {
final String gdpr = extractGdpr(bidRequest.getRegs());
final String url = StringUtils.isNotBlank(gdpr) ? euEndpoint : endpointUrl;

if (url == null) {
throw new PreBidException("an EU endpoint is required but invalid");
}

final URIBuilder uriBuilder = new URIBuilder(url)
.addParameter("format", "prebidServer")
.addParameter("tzo", getTimeZoneOffset());

if (StringUtils.isNotEmpty(gdpr)) {
uriBuilder.addParameter("gdpr", gdpr);
}
final String gdpr = extractGdpr(bidRequest.getRegs());
final UriTemplate template = StringUtils.isNotBlank(gdpr) ? euEndpointTemplate : endpointTemplate;

final String consent = extractConsent(bidRequest.getUser());
if (StringUtils.isNotEmpty(consent)) {
uriBuilder.addParameter("consentString", consent);
}
if (template == null) {
throw new PreBidException("an EU endpoint is required but invalid");
}

if (noCookies || extractNoCookies(bidRequest.getDevice())) {
uriBuilder.addParameter("noCookies", "true");
}
final String consent = extractConsent(bidRequest.getUser());

return uriBuilder.build().toString();
} catch (URISyntaxException | IllegalArgumentException e) {
throw new PreBidException(e.getMessage());
}
return template.toBuilder()
.queryParam("format", "prebidServer")
.queryParam("tzo", getTimeZoneOffset())
.queryParam("gdpr", StringUtils.isNotEmpty(gdpr) ? gdpr : null)
.queryParam("consentString", StringUtils.isNotEmpty(consent) ? consent : null)
.queryParam("noCookies", noCookies || extractNoCookies(bidRequest.getDevice()) ? "true" : null)
.build();
}

private String getTimeZoneOffset() {
Expand Down
Loading
Loading