Skip to content

Commit 74d54c1

Browse files
authored
Merge pull request #296 from PerimeterX/release/v6.7.0
Release/v6.7.0 -> master
2 parents a4fe5ec + 1bb3254 commit 74d54c1

File tree

11 files changed

+54
-36
lines changed

11 files changed

+54
-36
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
# Change Log
2+
## [v6.7.0](https://github.com/PerimeterX/perimeterx-java-sdk/compare/v6.7.0...HEAD) (2023-11-05)
3+
- Added feature custom cookie header
4+
- Changed `getTelemetryConfig` is now using builder.
5+
- Bugfix `NullPointerException` when using `ConsoleLogger`.
6+
27
## [v6.6.0](https://github.com/PerimeterX/perimeterx-java-sdk/compare/v6.6.0...HEAD) (2023-27-04)
38
- Updating readme with `customIsSensitve`, `customParametersExtraction`
49
- Added an option to configure logger without slf4j using `PXConfiguration.setPxLoggerSeverity(<loggerSeverity>)`

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
# [PerimeterX](http://www.perimeterx.com) Java SDK
66

7-
> Latest stable version: [v6.6.0](https://search.maven.org/#artifactdetails%7Ccom.perimeterx%7Cperimeterx-sdk%7C6.6.0%7Cjar)
7+
> Latest stable version: [v6.7.0](https://search.maven.org/#artifactdetails%7Ccom.perimeterx%7Cperimeterx-sdk%7C6.7.0%7Cjar)
88
99
## Table of Contents
1010

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<name>PerimeterX JAVA SDK</name>
88
<groupId>com.perimeterx</groupId>
99
<artifactId>perimeterx-sdk</artifactId>
10-
<version>6.6.0</version>
10+
<version>6.7.0</version>
1111

1212
<packaging>jar</packaging>
1313
<description>PerimeterX Java SDK</description>

px_metadata.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "6.6.0",
2+
"version": "6.7.0",
33
"supported_features": [
44
"additional_activity_handler",
55
"advanced_blocking_response",
@@ -30,6 +30,7 @@
3030
"pxde",
3131
"vid_extraction",
3232
"risk_api",
33+
"custom_cookie_header",
3334
"sensitive_routes",
3435
"telemetry_command",
3536
"enforcer_error"

src/main/java/com/perimeterx/internals/PXS2SValidator.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
import com.perimeterx.utils.PXLogger;
1616
import org.apache.http.conn.ConnectTimeoutException;
1717

18+
import static org.apache.commons.lang3.StringUtils.*;
19+
1820
/**
1921
* High level Abstracted interface for calling PerimeterX servers
2022
* <p>
@@ -99,6 +101,9 @@ private void updateContextFromResponse(PXContext pxContext, RiskResponse respons
99101
DataEnrichmentCookie dataEnrichment = new DataEnrichmentCookie(response.getDataEnrichment(), true);
100102
pxContext.setPxde(dataEnrichment.getJsonPayload());
101103
pxContext.setPxdeVerified(dataEnrichment.isValid());
104+
if(isNoneBlank(response.getPxhd())) {
105+
pxContext.setPxhd(response.getPxhd());
106+
}
102107
}
103108

104109
private boolean isResponseValid(RiskResponse response) {

src/main/java/com/perimeterx/internals/cookie/cookieparsers/HeaderParser.java

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,10 @@
1111
import org.apache.commons.lang3.StringUtils;
1212

1313
import java.io.IOException;
14-
import java.util.ArrayList;
15-
import java.util.Collections;
16-
import java.util.List;
14+
import java.util.*;
15+
import java.util.stream.Stream;
16+
17+
import static java.util.stream.Collectors.toList;
1718

1819
public abstract class HeaderParser {
1920

@@ -29,19 +30,15 @@ public abstract class HeaderParser {
2930
* @param cookieHeader Should contain the cookie(or cookies) that needs to be parsed into RawCookieData, can be null or empty
3031
* @return All px cookies available from the header.
3132
*/
32-
public List<RawCookieData> createRawCookieDataList(String cookieHeader) {
33-
List<RawCookieData> cookieList = new ArrayList<>();
34-
if (!StringUtils.isEmpty(cookieHeader)) {
35-
String[] cookies = splitHeader(cookieHeader);
36-
for (String cookie : cookies) {
37-
RawCookieData rawCookie = createCookie(cookie);
38-
if (rawCookie != null) {
39-
cookieList.add(rawCookie);
40-
}
41-
}
42-
}
43-
Collections.sort(cookieList);
44-
return cookieList;
33+
public List<RawCookieData> createRawCookieDataList(String... cookieHeaders) {
34+
return Stream.of(cookieHeaders)
35+
.filter(StringUtils::isNoneEmpty)
36+
.map(this::splitHeader)
37+
.flatMap(Stream::of)
38+
.map(this::createCookie)
39+
.filter(Objects::nonNull)
40+
.sorted()
41+
.collect(toList());
4542
}
4643

4744
public DataEnrichmentCookie getRawDataEnrichmentCookie(List<RawCookieData> rawCookies, String cookieKey) {

src/main/java/com/perimeterx/models/PXContext.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.util.regex.Pattern;
3333

3434
import static com.perimeterx.utils.Constants.BREACHED_ACCOUNT_KEY_NAME;
35+
import static com.perimeterx.utils.PXCommonUtils.cookieHeadersNames;
3536

3637
/**
3738
* PXContext - Populate relevant data from HttpRequest
@@ -350,10 +351,13 @@ private void parseCookies(HttpServletRequest request, boolean isMobileToken) {
350351
this.pxdeVerified = true;
351352
} else {
352353
Cookie[] cookies = request.getCookies();
353-
String cookieHeader = request.getHeader(Constants.COOKIE_HEADER_NAME);
354+
String[] cookieHeaders = cookieHeadersNames(getPxConfiguration())
355+
.stream()
356+
.map(request::getHeader)
357+
.toArray(String[]::new);
354358
this.requestCookieNames = CookieNamesExtractor.extractCookieNames(cookies);
355359
setVidAndPxhd(cookies);
356-
tokens.addAll(headerParser.createRawCookieDataList(cookieHeader));
360+
tokens.addAll(headerParser.createRawCookieDataList(cookieHeaders));
357361
this.tokens = tokens;
358362
DataEnrichmentCookie deCookie = headerParser.getRawDataEnrichmentCookie(this.tokens, this.pxConfiguration.getCookieKey());
359363
this.pxde = deCookie.getJsonPayload();

src/main/java/com/perimeterx/models/configuration/PXConfiguration.java

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
* <p>
4242
* Created by shikloshi on 03/07/2016.
4343
*/
44-
@Builder
44+
@Builder(toBuilder = true)
4545
@AllArgsConstructor
4646
@NoArgsConstructor
4747
@Getter
@@ -269,22 +269,14 @@ public static void setPxLoggerSeverity(LoggerSeverity severity) {
269269
@Builder.Default
270270
private Function<? super HttpServletRequest, ? extends CustomParameters> customParametersExtraction = null;
271271

272+
@Builder.Default
273+
private String customCookieHeader = "x-px-cookies";
274+
272275
/**
273276
* @return Configuration Object clone without cookieKey and authToken
274277
**/
275278
public PXConfiguration getTelemetryConfig() {
276-
return new PXConfiguration(appId, null, null, moduleEnabled, encryptionEnabled,
277-
blockingScore, sensitiveHeaders, maxBufferLen, apiTimeout, connectionTimeout, sendPageActivities,
278-
signedWithIP, serverURL, customLogo, cssRef, jsRef, sensitiveRoutes, sensitiveRoutesRegex, ipHeaders, checksum,
279-
remoteConfigurationEnabled, moduleMode, remoteConfigurationInterval, remoteConfigurationDelay,
280-
maxConnections, maxConnectionsPerRoute, remoteConfigurationUrl, customParametersProvider, blockHandler,
281-
collectorUrl, clientHost, firstPartyEnabled, xhrFirstPartyEnabled, useProxy, proxyHost, proxyPort,
282-
testingMode, validateRequestQueueInterval, bypassMonitorHeader, configFilePath, advancedBlockingResponse,
283-
enforcedRoutes, monitoredRoutes, loginCredentialsExtractionEnabled, loginCredentialsExtractionDetails, ciProtocol,
284-
pxCompromisedCredentialsHeader, addRawUsernameOnAdditionalS2SActivity, additionalS2SActivityHeaderEnabled,
285-
loginResponseValidationReportingMethod, regexPatternToValidateLoginResponseBody, headerNameToValidateLoginResponse,
286-
headerValueToValidateLoginResponse, loginResponseValidationStatusCode, customLoginResponseValidator,
287-
credentialsCustomExtractor, staticFilesExt, (req) -> false, null);
279+
return this.toBuilder().cookieKey(null).authToken(null).build();
288280
}
289281

290282
public void disableModule() {

src/main/java/com/perimeterx/utils/ConsoleLogger.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ private void log(PrintStream out, String prefix, Object msg, Object... additiona
1313
builder.append(prefix);
1414
builder.append(msg);
1515
for (Object arg : additional) {
16-
builder.append(" ").append(arg.toString());
16+
builder.append(" ").append(arg);
1717
}
1818
out.println(builder);
1919
}

src/main/java/com/perimeterx/utils/PXCommonUtils.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@
1010
import javax.servlet.http.HttpServletRequest;
1111
import java.util.*;
1212

13+
import static com.perimeterx.utils.Constants.COOKIE_HEADER_NAME;
14+
import static org.apache.commons.lang3.StringUtils.isNoneEmpty;
15+
1316
/**
1417
* Created by nitzangoldfeder on 16/07/2017.
1518
*/
@@ -45,4 +48,15 @@ public static Map<String, String> getHeadersFromRequest(HttpServletRequest reque
4548
}
4649
return headers;
4750
}
51+
52+
public static List<String> cookieHeadersNames(PXConfiguration configuration) {
53+
List<String> lst = new LinkedList<>();
54+
55+
if (isNoneEmpty(configuration.getCustomCookieHeader())) {
56+
lst.add(configuration.getCustomCookieHeader());
57+
}
58+
lst.add(COOKIE_HEADER_NAME);
59+
60+
return lst;
61+
}
4862
}

web/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<dependency>
2626
<groupId>com.perimeterx</groupId>
2727
<artifactId>perimeterx-sdk</artifactId>
28-
<version>6.6.0</version>
28+
<version>6.7.0</version>
2929
<scope>compile</scope>
3030
</dependency>
3131
<dependency>

0 commit comments

Comments
 (0)