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
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
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 @@ -12,9 +12,9 @@
import com.iab.openrtb.response.Bid;
import io.vertx.core.MultiMap;
import io.vertx.core.http.HttpMethod;
import io.vertx.uritemplate.Variables;
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 +31,9 @@
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.UriTemplate;
import org.prebid.server.util.uritemplate.UriTemplateFactory;

import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
Expand All @@ -51,11 +52,12 @@ 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));
HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl));
this.endpointTemplate = UriTemplateFactory.dynamicParams(endpointUrl);
this.mapper = Objects.requireNonNull(mapper);
}

Expand Down Expand Up @@ -96,47 +98,40 @@ 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);

addParameterIfNotEmpty(uriBuilder, "sizes", adSize);
addParameterIfNotEmpty(uriBuilder, "tp", ObjectUtil.getIfNotNull(bidRequest.getSite(), Site::getPage));
addParameterIfNotEmpty(uriBuilder, "appbundle", ObjectUtil.getIfNotNull(bidRequest.getApp(), App::getBundle));
addParameterIfNotEmpty(uriBuilder, "appname", ObjectUtil.getIfNotNull(bidRequest.getApp(), App::getName));
final Variables variables = endpointTemplate.newVariables()
.set("posall", "SSPLOC")
.set("id", id)
.set("hb", "true")
.set("t", "json3")
.set("currency", currency)
.set("sdkname", "prebidserver")
.set("adapterver", VERSION);

addParameterIfNotEmpty(variables, "sizes", adSize);
addParameterIfNotEmpty(variables, "tp", ObjectUtil.getIfNotNull(bidRequest.getSite(), Site::getPage));
addParameterIfNotEmpty(variables, "appbundle", ObjectUtil.getIfNotNull(bidRequest.getApp(), App::getBundle));
addParameterIfNotEmpty(variables, "appname", ObjectUtil.getIfNotNull(bidRequest.getApp(), App::getName));
addParameterIfNotEmpty(
uriBuilder, "transactionid", ObjectUtil.getIfNotNull(bidRequest.getSource(), Source::getTid));
variables, "transactionid", ObjectUtil.getIfNotNull(bidRequest.getSource(), Source::getTid));

final Device device = bidRequest.getDevice();
final String deviceOs = device != null ? device.getOs() : null;
if ("android".equals(deviceOs)) {
uriBuilder.addParameter("sdktype", "1");
addParameterIfNotEmpty(uriBuilder, "advertising_id", device.getIfa());
variables.set("sdktype", "1");
addParameterIfNotEmpty(variables, "advertising_id", device.getIfa());
} else if ("ios".equals(deviceOs)) {
uriBuilder.addParameter("sdktype", "2");
addParameterIfNotEmpty(uriBuilder, "idfa", device.getIfa());
variables.set("sdktype", "2");
addParameterIfNotEmpty(variables, "idfa", device.getIfa());
} else {
uriBuilder.addParameter("sdktype", "0");
variables.set("sdktype", "0");
}

return uriBuilder.toString();
return endpointTemplate.expandToString(variables);
}

private static void addParameterIfNotEmpty(URIBuilder uriBuilder, String parameter, String value) {
private static void addParameterIfNotEmpty(Variables variables, String parameter, String value) {
if (StringUtils.isNotEmpty(value)) {
uriBuilder.addParameter(parameter, value);
variables.set(parameter, value);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@
import com.iab.openrtb.response.Bid;
import io.vertx.core.MultiMap;
import io.vertx.core.http.HttpMethod;
import io.vertx.uritemplate.Variables;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.ListUtils;
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 +58,10 @@
import org.prebid.server.util.BidderUtil;
import org.prebid.server.util.HttpUtil;
import org.prebid.server.util.ObjectUtil;
import org.prebid.server.util.uritemplate.UriTemplate;
import org.prebid.server.util.uritemplate.UriTemplateFactory;

import java.math.BigDecimal;
import java.net.URISyntaxException;
import java.time.Clock;
import java.time.OffsetDateTime;
import java.util.ArrayList;
Expand All @@ -83,8 +84,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 +94,13 @@ public AdnuntiusBidder(String endpointUrl,
Clock clock,
JacksonMapper mapper) {

this.endpointUrl = HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl));
this.euEndpoint = euEndpoint == null ? null : HttpUtil.validateUrl(euEndpoint);
HttpUtil.validateUrl(Objects.requireNonNull(endpointUrl));
if (euEndpoint != null) {
HttpUtil.validateUrl(euEndpoint);
}

this.endpointTemplate = UriTemplateFactory.dynamicParams(endpointUrl);
this.euEndpointTemplate = euEndpoint != null ? UriTemplateFactory.dynamicParams(euEndpoint) : null;
this.clock = Objects.requireNonNull(clock);
this.mapper = Objects.requireNonNull(mapper);
}
Expand Down Expand Up @@ -261,35 +267,30 @@ 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 String gdpr = extractGdpr(bidRequest.getRegs());
final UriTemplate template = StringUtils.isNotBlank(gdpr) ? euEndpointTemplate : endpointTemplate;
if (template == null) {
throw new PreBidException("an EU endpoint is required but invalid");
}

final URIBuilder uriBuilder = new URIBuilder(url)
.addParameter("format", "prebidServer")
.addParameter("tzo", getTimeZoneOffset());
final Variables variables = template.newVariables();
variables.set("format", "prebidServer");
variables.set("tzo", getTimeZoneOffset());

if (StringUtils.isNotEmpty(gdpr)) {
uriBuilder.addParameter("gdpr", gdpr);
}

final String consent = extractConsent(bidRequest.getUser());
if (StringUtils.isNotEmpty(consent)) {
uriBuilder.addParameter("consentString", consent);
}
if (StringUtils.isNotEmpty(gdpr)) {
variables.set("gdpr", gdpr);
}

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

return uriBuilder.build().toString();
} catch (URISyntaxException | IllegalArgumentException e) {
throw new PreBidException(e.getMessage());
if (noCookies || extractNoCookies(bidRequest.getDevice())) {
variables.set("noCookies", "true");
}

return template.expandToString(variables);
}

private String getTimeZoneOffset() {
Expand Down
16 changes: 4 additions & 12 deletions src/main/java/org/prebid/server/bidder/amx/AmxBidder.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@
import com.iab.openrtb.response.SeatBid;
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.amx.model.AmxBidExt;
import org.prebid.server.bidder.model.BidderBid;
Expand All @@ -31,8 +30,8 @@
import org.prebid.server.proto.openrtb.ext.response.ExtBidPrebidMeta;
import org.prebid.server.util.BidderUtil;
import org.prebid.server.util.HttpUtil;
import org.prebid.server.util.uritemplate.UriTemplateFactory;

import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
Expand All @@ -52,20 +51,13 @@ public class AmxBidder implements Bidder<BidRequest> {
private final JacksonMapper mapper;

public AmxBidder(String endpointUrl, JacksonMapper mapper) {
this.mapper = Objects.requireNonNull(mapper);
this.endpointUrl = resolveEndpointUrl(endpointUrl);
this.mapper = Objects.requireNonNull(mapper);
}

private static String resolveEndpointUrl(String url) {
final URIBuilder uriBuilder;
try {
uriBuilder = new URIBuilder(HttpUtil.validateUrl(Objects.requireNonNull(url)));
} catch (URISyntaxException e) {
throw new IllegalArgumentException("Invalid url: %s, error: %s".formatted(url, e.getMessage()));
}
return uriBuilder
.addParameter(VERSION_PARAM, ADAPTER_VERSION)
.toString();
HttpUtil.validateUrl(Objects.requireNonNull(url));
return UriTemplateFactory.dynamicParams(url).expandToString(VERSION_PARAM, ADAPTER_VERSION);
}

@Override
Expand Down
Loading
Loading