diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml index e99e0760..0cf45693 100644 --- a/.github/workflows/cd.yaml +++ b/.github/workflows/cd.yaml @@ -44,11 +44,11 @@ jobs: - name: Checkout code uses: actions/checkout@v5 - - name: Set up JDK 8 + - name: Set up JDK 17 uses: actions/setup-java@v3 with: - java-version: '8' - distribution: 'adopt' + java-version: '17' + distribution: 'temurin' - name: Import GPG key run: echo -n "$GPG_SIGNING_KEY" | base64 --decode | gpg --import --passphrase "$GPG_PASSPHRASE" @@ -61,7 +61,7 @@ jobs: run: gpg --list-secret-keys --keyid-format LONG - name: Deploy a new version - run: mvn clean deploy -P build-extras,sign --settings deploy/mvnsettings.xml + run: mvn clean deploy -P build-extras,sign --settings deploy/mvnsettings.xml -pl perimeterx-sdk,perimeterx-sdk-jakarta -am env: GPG_KEY_NAME: ${{ vars.GPG_KEY_NAME }} GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c541b8b0..b1818fc8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,6 +10,19 @@ jobs: uses: actions/setup-java@v3 with: java-version: '8' - distribution: 'adopt' - - name: Build and run unit tests - run: mvn test -f pom.xml \ No newline at end of file + distribution: 'temurin' + - name: Build and run unit tests (SDK module only) + run: mvn test -f pom.xml -pl perimeterx-sdk -am + + build-jakarta: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'temurin' + - name: Build Jakarta module + run: mvn clean install -pl perimeterx-sdk-jakarta -am -DskipTests=true \ No newline at end of file diff --git a/.github/workflows/ci_e2e.yaml b/.github/workflows/ci_e2e.yaml index 5147130b..6d1dbe31 100644 --- a/.github/workflows/ci_e2e.yaml +++ b/.github/workflows/ci_e2e.yaml @@ -23,11 +23,19 @@ jobs: CI: - name: "E2E tests" + name: E2E tests (${{ matrix.variant }}) + strategy: + fail-fast: false + matrix: + include: + - variant: javax + dockerfile: Dockerfile + - variant: jakarta + dockerfile: Dockerfile.jakarta env: MOCK_COLLECTOR_IMAGE_TAG: 2.0.6 SAMPLE_SITE_IMAGE_TAG: 1.0.0 - ENFORCER_SPEC_TESTS_IMAGE_TAG: 1.23.4 + ENFORCER_SPEC_TESTS_IMAGE_TAG: 1.23.5 runs-on: ubuntu-latest timeout-minutes: 60 @@ -47,7 +55,7 @@ jobs: - name: Build Enforcer Docker image run: | - docker build . -t localhost:5001/java-enforcer-sample-site:$SAMPLE_SITE_IMAGE_TAG && \ + docker build -f ${{ matrix.dockerfile }} . -t localhost:5001/java-enforcer-sample-site:$SAMPLE_SITE_IMAGE_TAG docker push localhost:5001/java-enforcer-sample-site:$SAMPLE_SITE_IMAGE_TAG - uses: azure/setup-helm@v4 diff --git a/.github/workflows/ci_verify_version.yaml b/.github/workflows/ci_verify_version.yaml index 64a18a71..998f97ba 100644 --- a/.github/workflows/ci_verify_version.yaml +++ b/.github/workflows/ci_verify_version.yaml @@ -25,16 +25,19 @@ jobs: run: | echo "project=$( mvn help:evaluate -Dexpression=project.version -q -DforceStdout )" >> "$GITHUB_OUTPUT" && \ echo "px_metadata=$( cat px_metadata.json | jq -r '.version' )" >> "$GITHUB_OUTPUT" && \ - echo "demo_app_dependency=$( mvn help:evaluate -Dexpression=com.perimeterx.version -q -DforceStdout -f web/pom.xml)" >> "$GITHUB_OUTPUT" + echo "demo_app_dependency=$( mvn help:evaluate -Dexpression=com.perimeterx.version -q -DforceStdout -f web/pom.xml)" >> "$GITHUB_OUTPUT" && \ + echo "demo_jakarta_dependency=$( mvn help:evaluate -Dexpression=com.perimeterx.version -q -DforceStdout -f web-jakarta/pom.xml)" >> "$GITHUB_OUTPUT" - name: Verify same version run: | [ $PROJECT_VERSION = $PX_METADATA_VERSION ] && \ - [ $PROJECT_VERSION = $DEMO_APP_DEPENDENCY_VERSION ] + [ $PROJECT_VERSION = $DEMO_APP_DEPENDENCY_VERSION ] && \ + [ $PROJECT_VERSION = $DEMO_JAKARTA_DEPENDENCY_VERSION ] env: PROJECT_VERSION: ${{ steps.new-version.outputs.project }} PX_METADATA_VERSION: ${{ steps.new-version.outputs.px_metadata }} DEMO_APP_DEPENDENCY_VERSION: ${{ steps.new-version.outputs.demo_app_dependency }} + DEMO_JAKARTA_DEPENDENCY_VERSION: ${{ steps.new-version.outputs.demo_jakarta_dependency }} - name: Verify version increment run: ./ci_files/verify-version-inc.sh $BASE_VERSION $NEW_VERSION diff --git a/.github/workflows/fuzzer.yaml b/.github/workflows/fuzzer.yaml index c703e737..63d67b39 100644 --- a/.github/workflows/fuzzer.yaml +++ b/.github/workflows/fuzzer.yaml @@ -26,7 +26,7 @@ jobs: name: "Fuzzing Test" env: MOCK_COLLECTOR_IMAGE_TAG: 2.0.6 - FUZZER_TAG: 1.1.0 + FUZZER_TAG: 1.1.1 SAMPLE_SITE_IMAGE_TAG: 1.0.0 ENFORCER_TAG: ${{ needs.extract_version.outputs.version }} diff --git a/.gitignore b/.gitignore index de33b11b..75de7f29 100644 --- a/.gitignore +++ b/.gitignore @@ -11,4 +11,5 @@ examples/examples.iml .classpath .project .factorypath -.smarttomcat \ No newline at end of file +.smarttomcat +.tools/ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index a1112973..57f8f246 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Change Log -## [v6.16.0](https://github.com/PerimeterX/perimeterx-java-sdk/compare/6.16.0...HEAD) (2025-11-12) +## [XX.XX.XX](https://github.com/PerimeterX/perimeterx-java-sdk/compare/xx.xx.xx...HEAD) (xxxx-xx-xx) +- Fixed first party captcha reverse proxy to use `startsWith` instead of `contains` when matching the captcha prefix +- Fixed first party captcha reverse proxy to correctly return `true` (handled) after rendering the default response when first party is disabled + +## [v6.16.0](https://github.com/PerimeterX/perimeterx-java-sdk/compare/xx.xx.xx...HEAD) (2025-11-12) +- Fixed first party captcha reverse proxy handling - Added support for data enrichment header feature (`px_data_enrichment_header_name` configuration) - Added support for AD user identifiers feature - Added `px_secured_pxhd_enabled` configuration option to enable secure flag on `pxhd` cookie diff --git a/Dockerfile b/Dockerfile index e1ab3293..3f2b3c84 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,29 +1,36 @@ FROM maven:3.8.6-openjdk-11-slim as builder WORKDIR /app -# Building the SDK. +# Build javax SDK only (demo app uses javax / Tomcat 9). COPY pom.xml . -COPY src/main/resources src/main/resources -RUN mvn verify clean -f pom.xml -COPY src ./src -RUN mvn clean install -DskipTests=true - -# Building the Demo app. -COPY web/pom.xml web/pom.xml -RUN mvn verify clean -f web/pom.xml +COPY perimeterx-sdk/pom.xml perimeterx-sdk/pom.xml +COPY perimeterx-sdk-jakarta/pom.xml perimeterx-sdk-jakarta/pom.xml +COPY perimeterx-sdk/src perimeterx-sdk/src +RUN mvn clean install -pl perimeterx-sdk -am -DskipTests=true -q + +# Build the demo WAR (depends on perimeterx-sdk in local repo). COPY web ./web -RUN mvn clean install war:war -DskipTests=true -f web/pom.xml +RUN mvn clean install war:war -DskipTests=true -f web/pom.xml -q FROM tomcat:9.0.68 -COPY --from=builder /app/web/target/web-1.0.0 /usr/local/tomcat/webapps/ROOT +COPY --from=builder /app/web/target/ROOT /usr/local/tomcat/webapps/ROOT + +## Remove the template config from the classpath so Utils.getEnforcerConfig() falls back to the +## filesystem path below, where Kubernetes mounts the real enforcer config at runtime. +RUN rm -f /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/enforcer_config.json ## Enforcer configuration json file is located at: ## /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/src/main/resources/enforcer_config.json COPY web/src/main/resources/ /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/src/main/resources +## relaxedQueryChars allows fuzz/special characters (`, {, }, |, ^, \, [, ]) in query strings +## that Tomcat rejects by default per RFC 7230 strict mode. +RUN sed -i 's@protocol="HTTP/1.1"@protocol="HTTP/1.1" relaxedQueryChars="`{}|^\\[]"@' \ + /usr/local/tomcat/conf/server.xml + EXPOSE 8080 ENV CATALINA_OPTS="-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true" -CMD ["catalina.sh", "run"] \ No newline at end of file +CMD ["catalina.sh", "run"] diff --git a/Dockerfile.jakarta b/Dockerfile.jakarta new file mode 100644 index 00000000..b29426a9 --- /dev/null +++ b/Dockerfile.jakarta @@ -0,0 +1,34 @@ +FROM maven:3.9.6-eclipse-temurin-17 AS builder +WORKDIR /app + +# Build Jakarta SDK + demo WAR (Tomcat 10 / Servlet 5). +COPY pom.xml . +COPY perimeterx-sdk/pom.xml perimeterx-sdk/pom.xml +COPY perimeterx-sdk-jakarta/pom.xml perimeterx-sdk-jakarta/pom.xml +COPY perimeterx-sdk/src perimeterx-sdk/src +RUN mvn clean install -pl perimeterx-sdk-jakarta -am -DskipTests=true -q + +COPY web-jakarta ./web-jakarta +RUN mvn clean install war:war -DskipTests=true -f web-jakarta/pom.xml -q + +FROM tomcat:10.1-jre17-temurin + +COPY --from=builder /app/web-jakarta/target/ROOT /usr/local/tomcat/webapps/ROOT + +## Remove the template config from the classpath so Utils.getEnforcerConfig() falls back to the +## filesystem path below, where Kubernetes mounts the real enforcer config at runtime. +RUN rm -f /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/enforcer_config.json + +## Enforcer configuration json file is located at: +## /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/src/main/resources/enforcer_config.json +COPY web-jakarta/src/main/resources/ /usr/local/tomcat/webapps/ROOT/WEB-INF/classes/src/main/resources + +## Tomcat 10.1 introduced the encodedSolidusHandling connector attribute which defaults to +## path as-is so getRequestURL() returns the literal encoded form expected by the enforcer. +## "reject" (returning 400 for any path containing %2F). +RUN sed -i 's|protocol="HTTP/1.1"|protocol="HTTP/1.1" encodedSolidusHandling="passthrough"|' \ + /usr/local/tomcat/conf/server.xml + +EXPOSE 8080 + +CMD ["catalina.sh", "run"] diff --git a/perimeterx-sdk-jakarta/pom.xml b/perimeterx-sdk-jakarta/pom.xml new file mode 100644 index 00000000..fc142db7 --- /dev/null +++ b/perimeterx-sdk-jakarta/pom.xml @@ -0,0 +1,293 @@ + + + + 4.0.0 + + + com.perimeterx + perimeterx-java-sdk-parent + 6.16.0 + ../pom.xml + + + perimeterx-sdk-jakarta + jar + PerimeterX JAVA SDK (Jakarta Servlet) + PerimeterX Java SDK for jakarta.servlet (Spring Boot 3, Tomcat 10+) + + + + true + + + + + disable-javadoc-doclint + + [1.7,) + + + -Xdoclint:none + + + + sign + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + sign-artifacts + verify + + sign + + + + + + + + + build-extras + + true + + + + + org.apache.maven.plugins + maven-source-plugin + 3.0.1 + + + attach-sources + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.1.1 + + + attach-javadocs + + jar + + + + + -Xdoclint:none + + + + + + + + + + + com.github.spullara.mustache.java + compiler + 0.9.7 + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + + com.fasterxml.jackson.core + jackson-databind + 2.11.4 + + + + com.fasterxml.jackson.core + jackson-annotations + 2.10.2 + + + + commons-io + commons-io + 2.8.0 + + + + commons-codec + commons-codec + 1.15 + + + + org.apache.commons + commons-lang3 + 3.12.0 + + + + org.codehaus.plexus + plexus-utils + 3.3.0 + + + + org.slf4j + slf4j-api + 1.7.30 + + + + org.apache.httpcomponents + httpasyncclient + 4.1.4 + + + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + jakarta.servlet + jakarta.servlet-api + 6.0.0 + provided + + + + org.projectlombok + lombok + 1.18.22 + provided + + + + com.google.code.gson + gson + 2.8.6 + compile + + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + 3.1.0 + + + generate-jakarta-sources + generate-sources + + + + + + + + + + + + run + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.4.0 + + + add-jakarta-source-root + generate-sources + + add-source + + + + ${project.build.directory}/generated-sources/jakarta + + + + + add-shared-resources + generate-resources + + add-resource + + + + + ${project.basedir}/../perimeterx-sdk/src/main/resources + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + maven-assembly-plugin + 2.6 + + + jar-with-dependencies + + + + + package + + single + + + + + + com.google.code.maven-replacer-plugin + replacer + 1.5.3 + + + compile + + replace + + + + + ${project.basedir}/../perimeterx-sdk/src/main/resources/com/perimeterx/utils/metadata.properties + ${project.build.directory}/classes/com/perimeterx/utils/metadata.properties + @sdk_version@ + ${project.version} + + + + + + diff --git a/perimeterx-sdk/pom.xml b/perimeterx-sdk/pom.xml new file mode 100644 index 00000000..3f46824f --- /dev/null +++ b/perimeterx-sdk/pom.xml @@ -0,0 +1,281 @@ + + + + 4.0.0 + + + com.perimeterx + perimeterx-java-sdk-parent + 6.16.0 + ../pom.xml + + + perimeterx-sdk + jar + PerimeterX JAVA SDK + PerimeterX Java SDK (javax.servlet) + + + + disable-javadoc-doclint + + [1.7,) + + + -Xdoclint:none + + + + sign + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + sign-artifacts + verify + + sign + + + + + + + + + build-extras + + true + + + + + org.apache.maven.plugins + maven-source-plugin + 3.0.1 + + + attach-sources + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 3.1.1 + + + attach-javadocs + + jar + + + + + -Xdoclint:none + + + + + + + + + + + com.github.spullara.mustache.java + compiler + 0.9.7 + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.6 + + + + com.fasterxml.jackson.core + jackson-databind + 2.11.4 + + + + com.fasterxml.jackson.core + jackson-annotations + 2.10.2 + + + + commons-io + commons-io + 2.8.0 + + + + commons-codec + commons-codec + 1.15 + + + + org.apache.commons + commons-lang3 + 3.12.0 + + + + org.codehaus.plexus + plexus-utils + 3.3.0 + + + + org.slf4j + slf4j-api + 1.7.30 + + + + org.apache.httpcomponents + httpasyncclient + 4.1.4 + + + + org.apache.httpcomponents + httpclient + 4.5.13 + + + + javax.servlet + javax.servlet-api + 4.0.1 + provided + + + + org.testng + testng + 6.8 + test + + + + org.mockito + mockito-all + 2.0.0-beta + test + + + + org.springframework + spring-test + 4.3.1.RELEASE + test + + + + org.springframework + spring-web + 4.3.1.RELEASE + test + + + + org.projectlombok + lombok + 1.18.22 + provided + + + + com.google.code.gson + gson + 2.8.6 + compile + + + org.powermock + powermock-mockito-release-full + 1.6.4 + pom + test + + + org.powermock + powermock-api-easymock + 1.6.5 + test + + + org.easymock + easymock + 3.4 + test + + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + + + maven-assembly-plugin + 2.6 + + + jar-with-dependencies + + + + + package + + single + + + + + + com.google.code.maven-replacer-plugin + replacer + 1.5.3 + + + compile + + replace + + + + + ${project.basedir}/src/main/resources/com/perimeterx/utils/metadata.properties + ${project.build.outputDirectory}/com/perimeterx/utils/metadata.properties + @sdk_version@ + ${project.version} + + + + org.apache.maven.plugins + maven-surefire-plugin + + + + + diff --git a/src/main/java/com/perimeterx/api/PerimeterX.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/PerimeterX.java similarity index 100% rename from src/main/java/com/perimeterx/api/PerimeterX.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/PerimeterX.java diff --git a/src/main/java/com/perimeterx/api/RequestFilter.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/RequestFilter.java similarity index 100% rename from src/main/java/com/perimeterx/api/RequestFilter.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/RequestFilter.java diff --git a/src/main/java/com/perimeterx/api/activities/ActivityHandler.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/activities/ActivityHandler.java similarity index 100% rename from src/main/java/com/perimeterx/api/activities/ActivityHandler.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/activities/ActivityHandler.java diff --git a/src/main/java/com/perimeterx/api/activities/BufferedActivityHandler.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/activities/BufferedActivityHandler.java similarity index 100% rename from src/main/java/com/perimeterx/api/activities/BufferedActivityHandler.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/activities/BufferedActivityHandler.java diff --git a/src/main/java/com/perimeterx/api/activities/DefaultActivityHandler.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/activities/DefaultActivityHandler.java similarity index 100% rename from src/main/java/com/perimeterx/api/activities/DefaultActivityHandler.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/activities/DefaultActivityHandler.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/CredentialsIntelligenceManager.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/CredentialsIntelligenceManager.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/CredentialsIntelligenceManager.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/CredentialsIntelligenceManager.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/LoginData.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/LoginData.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/LoginData.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/LoginData.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/PXHDSource.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/PXHDSource.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/PXHDSource.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/PXHDSource.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/CIProtocol.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/CIProtocol.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/CIProtocol.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/CIProtocol.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/SSOStep.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/SSOStep.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/SSOStep.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/SSOStep.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/UserLoginData.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/UserLoginData.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/UserLoginData.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/UserLoginData.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/CredentialsExtractor.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/CredentialsExtractor.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/CredentialsExtractor.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/CredentialsExtractor.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/CredentialsExtractorFactory.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/CredentialsExtractorFactory.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/CredentialsExtractorFactory.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/CredentialsExtractorFactory.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/DefaultCredentialsCustomExtractor.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/DefaultCredentialsCustomExtractor.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/DefaultCredentialsCustomExtractor.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/DefaultCredentialsCustomExtractor.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/RequestBodyExtractor.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/RequestBodyExtractor.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/RequestBodyExtractor.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/RequestBodyExtractor.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/RequestHeaderExtractor.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/RequestHeaderExtractor.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/RequestHeaderExtractor.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/RequestHeaderExtractor.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/RequestQueryParamsExtractor.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/RequestQueryParamsExtractor.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/RequestQueryParamsExtractor.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginrequest/RequestQueryParamsExtractor.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/DefaultCustomLoginResponseValidator.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/DefaultCustomLoginResponseValidator.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/DefaultCustomLoginResponseValidator.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/DefaultCustomLoginResponseValidator.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseBodyValidator.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseBodyValidator.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseBodyValidator.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseBodyValidator.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseCustomValidator.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseCustomValidator.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseCustomValidator.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseCustomValidator.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseHeaderValidator.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseHeaderValidator.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseHeaderValidator.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseHeaderValidator.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseStatusCodeValidator.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseStatusCodeValidator.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseStatusCodeValidator.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseStatusCodeValidator.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseValidationReportingMethod.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseValidationReportingMethod.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseValidationReportingMethod.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseValidationReportingMethod.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseValidator.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseValidator.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseValidator.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseValidator.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseValidatorFactory.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseValidatorFactory.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseValidatorFactory.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/loginresponse/LoginResponseValidatorFactory.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/CredentialsIntelligenceProtocol.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/CredentialsIntelligenceProtocol.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/CredentialsIntelligenceProtocol.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/CredentialsIntelligenceProtocol.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/CredentialsIntelligenceProtocolFactory.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/CredentialsIntelligenceProtocolFactory.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/CredentialsIntelligenceProtocolFactory.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/CredentialsIntelligenceProtocolFactory.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/MultiStepSSOCIProtocol.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/MultiStepSSOCIProtocol.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/MultiStepSSOCIProtocol.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/MultiStepSSOCIProtocol.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/V1CIProtocol.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/V1CIProtocol.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/V1CIProtocol.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/V1CIProtocol.java diff --git a/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/V2CIProtocol.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/V2CIProtocol.java similarity index 100% rename from src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/V2CIProtocol.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/additionalContext/credentialsIntelligence/protocol/V2CIProtocol.java diff --git a/src/main/java/com/perimeterx/api/blockhandler/BlockHandler.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/blockhandler/BlockHandler.java similarity index 100% rename from src/main/java/com/perimeterx/api/blockhandler/BlockHandler.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/blockhandler/BlockHandler.java diff --git a/src/main/java/com/perimeterx/api/blockhandler/DefaultBlockHandler.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/blockhandler/DefaultBlockHandler.java similarity index 100% rename from src/main/java/com/perimeterx/api/blockhandler/DefaultBlockHandler.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/blockhandler/DefaultBlockHandler.java diff --git a/src/main/java/com/perimeterx/api/blockhandler/templates/TemplateFactory.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/blockhandler/templates/TemplateFactory.java similarity index 100% rename from src/main/java/com/perimeterx/api/blockhandler/templates/TemplateFactory.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/blockhandler/templates/TemplateFactory.java diff --git a/src/main/java/com/perimeterx/api/providers/CombinedIPProvider.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/providers/CombinedIPProvider.java similarity index 100% rename from src/main/java/com/perimeterx/api/providers/CombinedIPProvider.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/providers/CombinedIPProvider.java diff --git a/src/main/java/com/perimeterx/api/providers/CustomParametersProvider.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/providers/CustomParametersProvider.java similarity index 100% rename from src/main/java/com/perimeterx/api/providers/CustomParametersProvider.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/providers/CustomParametersProvider.java diff --git a/src/main/java/com/perimeterx/api/providers/DefaultCustomParametersProvider.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/providers/DefaultCustomParametersProvider.java similarity index 100% rename from src/main/java/com/perimeterx/api/providers/DefaultCustomParametersProvider.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/providers/DefaultCustomParametersProvider.java diff --git a/src/main/java/com/perimeterx/api/providers/DefaultHostnameProvider.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/providers/DefaultHostnameProvider.java similarity index 100% rename from src/main/java/com/perimeterx/api/providers/DefaultHostnameProvider.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/providers/DefaultHostnameProvider.java diff --git a/src/main/java/com/perimeterx/api/providers/HostnameProvider.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/providers/HostnameProvider.java similarity index 100% rename from src/main/java/com/perimeterx/api/providers/HostnameProvider.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/providers/HostnameProvider.java diff --git a/src/main/java/com/perimeterx/api/providers/IPByHeaderProvider.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/providers/IPByHeaderProvider.java similarity index 100% rename from src/main/java/com/perimeterx/api/providers/IPByHeaderProvider.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/providers/IPByHeaderProvider.java diff --git a/src/main/java/com/perimeterx/api/providers/IPProvider.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/providers/IPProvider.java similarity index 100% rename from src/main/java/com/perimeterx/api/providers/IPProvider.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/providers/IPProvider.java diff --git a/src/main/java/com/perimeterx/api/providers/RemoteAddressIPProvider.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/providers/RemoteAddressIPProvider.java similarity index 100% rename from src/main/java/com/perimeterx/api/providers/RemoteAddressIPProvider.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/providers/RemoteAddressIPProvider.java diff --git a/src/main/java/com/perimeterx/api/proxy/DefaultPredefinedResponseHandler.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/proxy/DefaultPredefinedResponseHandler.java similarity index 100% rename from src/main/java/com/perimeterx/api/proxy/DefaultPredefinedResponseHandler.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/proxy/DefaultPredefinedResponseHandler.java diff --git a/src/main/java/com/perimeterx/api/proxy/DefaultReverseProxy.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/proxy/DefaultReverseProxy.java similarity index 99% rename from src/main/java/com/perimeterx/api/proxy/DefaultReverseProxy.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/proxy/DefaultReverseProxy.java index 04ee6728..f06e2a65 100644 --- a/src/main/java/com/perimeterx/api/proxy/DefaultReverseProxy.java +++ b/perimeterx-sdk/src/main/java/com/perimeterx/api/proxy/DefaultReverseProxy.java @@ -168,7 +168,7 @@ private void safelyCloseInputStream(IPXOutgoingRequest proxyRequest) throws IOEx @Override public boolean reverseCaptcha(HttpServletRequest req, HttpServletResponseWrapper res, PXContext context) throws IOException, URISyntaxException { - if (!req.getRequestURI().contains(captchaReversePrefix)) { + if (!req.getRequestURI().startsWith(captchaReversePrefix)) { return false; } final PredefinedResponse predefinedResponse = new PredefinedResponse(CONTENT_TYPE_JAVASCRIPT, DEFAULT_JAVASCRIPT_VALUE); @@ -176,7 +176,7 @@ public boolean reverseCaptcha(HttpServletRequest req, HttpServletResponseWrapper if (!pxConfiguration.isFirstPartyEnabled()) { context.logger.debug("First party is disabled, rendering default response"); predefinedResponseHelper.handlePredefinedResponse(res, predefinedResponse, context); - return false; + return true; } final String url = getPxCaptchaURL(pxConfiguration, req.getQueryString(), false); diff --git a/src/main/java/com/perimeterx/api/proxy/PredefinedResponseHelper.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/proxy/PredefinedResponseHelper.java similarity index 100% rename from src/main/java/com/perimeterx/api/proxy/PredefinedResponseHelper.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/proxy/PredefinedResponseHelper.java diff --git a/src/main/java/com/perimeterx/api/proxy/RemoteServer.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/proxy/RemoteServer.java similarity index 100% rename from src/main/java/com/perimeterx/api/proxy/RemoteServer.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/proxy/RemoteServer.java diff --git a/src/main/java/com/perimeterx/api/proxy/ReverseProxy.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/proxy/ReverseProxy.java similarity index 100% rename from src/main/java/com/perimeterx/api/proxy/ReverseProxy.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/proxy/ReverseProxy.java diff --git a/src/main/java/com/perimeterx/api/proxy/mock/MockReverseProxyFactory.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/proxy/mock/MockReverseProxyFactory.java similarity index 100% rename from src/main/java/com/perimeterx/api/proxy/mock/MockReverseProxyFactory.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/proxy/mock/MockReverseProxyFactory.java diff --git a/src/main/java/com/perimeterx/api/proxy/mock/NeverReverseProxy.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/proxy/mock/NeverReverseProxy.java similarity index 100% rename from src/main/java/com/perimeterx/api/proxy/mock/NeverReverseProxy.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/proxy/mock/NeverReverseProxy.java diff --git a/src/main/java/com/perimeterx/api/remoteconfigurations/DefaultRemoteConfigManager.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/remoteconfigurations/DefaultRemoteConfigManager.java similarity index 100% rename from src/main/java/com/perimeterx/api/remoteconfigurations/DefaultRemoteConfigManager.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/remoteconfigurations/DefaultRemoteConfigManager.java diff --git a/src/main/java/com/perimeterx/api/remoteconfigurations/RemoteConfigurationManager.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/remoteconfigurations/RemoteConfigurationManager.java similarity index 100% rename from src/main/java/com/perimeterx/api/remoteconfigurations/RemoteConfigurationManager.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/remoteconfigurations/RemoteConfigurationManager.java diff --git a/src/main/java/com/perimeterx/api/remoteconfigurations/TimerConfigUpdater.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/remoteconfigurations/TimerConfigUpdater.java similarity index 100% rename from src/main/java/com/perimeterx/api/remoteconfigurations/TimerConfigUpdater.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/remoteconfigurations/TimerConfigUpdater.java diff --git a/src/main/java/com/perimeterx/api/verificationhandler/DefaultVerificationHandler.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/verificationhandler/DefaultVerificationHandler.java similarity index 100% rename from src/main/java/com/perimeterx/api/verificationhandler/DefaultVerificationHandler.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/verificationhandler/DefaultVerificationHandler.java diff --git a/src/main/java/com/perimeterx/api/verificationhandler/TestVerificationHandler.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/verificationhandler/TestVerificationHandler.java similarity index 100% rename from src/main/java/com/perimeterx/api/verificationhandler/TestVerificationHandler.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/verificationhandler/TestVerificationHandler.java diff --git a/src/main/java/com/perimeterx/api/verificationhandler/VerificationHandler.java b/perimeterx-sdk/src/main/java/com/perimeterx/api/verificationhandler/VerificationHandler.java similarity index 100% rename from src/main/java/com/perimeterx/api/verificationhandler/VerificationHandler.java rename to perimeterx-sdk/src/main/java/com/perimeterx/api/verificationhandler/VerificationHandler.java diff --git a/src/main/java/com/perimeterx/http/IPXHttpClient.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/IPXHttpClient.java similarity index 100% rename from src/main/java/com/perimeterx/http/IPXHttpClient.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/IPXHttpClient.java diff --git a/src/main/java/com/perimeterx/http/IPXIncomingResponse.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/IPXIncomingResponse.java similarity index 100% rename from src/main/java/com/perimeterx/http/IPXIncomingResponse.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/IPXIncomingResponse.java diff --git a/src/main/java/com/perimeterx/http/IPXOutgoingRequest.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/IPXOutgoingRequest.java similarity index 100% rename from src/main/java/com/perimeterx/http/IPXOutgoingRequest.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/IPXOutgoingRequest.java diff --git a/src/main/java/com/perimeterx/http/PXApacheHttpClient.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/PXApacheHttpClient.java similarity index 100% rename from src/main/java/com/perimeterx/http/PXApacheHttpClient.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/PXApacheHttpClient.java diff --git a/src/main/java/com/perimeterx/http/PXApacheIncomingResponse.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/PXApacheIncomingResponse.java similarity index 100% rename from src/main/java/com/perimeterx/http/PXApacheIncomingResponse.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/PXApacheIncomingResponse.java diff --git a/src/main/java/com/perimeterx/http/PXClient.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/PXClient.java similarity index 100% rename from src/main/java/com/perimeterx/http/PXClient.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/PXClient.java diff --git a/src/main/java/com/perimeterx/http/PXHttpClient.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/PXHttpClient.java similarity index 100% rename from src/main/java/com/perimeterx/http/PXHttpClient.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/PXHttpClient.java diff --git a/src/main/java/com/perimeterx/http/PXHttpHeader.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/PXHttpHeader.java similarity index 100% rename from src/main/java/com/perimeterx/http/PXHttpHeader.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/PXHttpHeader.java diff --git a/src/main/java/com/perimeterx/http/PXHttpMethod.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/PXHttpMethod.java similarity index 100% rename from src/main/java/com/perimeterx/http/PXHttpMethod.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/PXHttpMethod.java diff --git a/src/main/java/com/perimeterx/http/PXHttpStatus.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/PXHttpStatus.java similarity index 100% rename from src/main/java/com/perimeterx/http/PXHttpStatus.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/PXHttpStatus.java diff --git a/src/main/java/com/perimeterx/http/PXOutgoingRequestImpl.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/PXOutgoingRequestImpl.java similarity index 100% rename from src/main/java/com/perimeterx/http/PXOutgoingRequestImpl.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/PXOutgoingRequestImpl.java diff --git a/src/main/java/com/perimeterx/http/PXRequestBody.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/PXRequestBody.java similarity index 100% rename from src/main/java/com/perimeterx/http/PXRequestBody.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/PXRequestBody.java diff --git a/src/main/java/com/perimeterx/http/RequestWrapper.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/RequestWrapper.java similarity index 90% rename from src/main/java/com/perimeterx/http/RequestWrapper.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/RequestWrapper.java index 448130b2..2f1bf885 100644 --- a/src/main/java/com/perimeterx/http/RequestWrapper.java +++ b/perimeterx-sdk/src/main/java/com/perimeterx/http/RequestWrapper.java @@ -1,5 +1,6 @@ package com.perimeterx.http; +import javax.servlet.ReadListener; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; @@ -130,5 +131,20 @@ public int read() { public void close() throws IOException { inputStream.close(); } + + @Override + public boolean isFinished() { + return inputStream.available() == 0; + } + + @Override + public boolean isReady() { + return true; + } + + @Override + public void setReadListener(ReadListener readListener) { + throw new IllegalStateException("Non-blocking reads are not supported for this request wrapper"); + } } } diff --git a/src/main/java/com/perimeterx/http/ResponseWrapper.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/ResponseWrapper.java similarity index 100% rename from src/main/java/com/perimeterx/http/ResponseWrapper.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/ResponseWrapper.java diff --git a/src/main/java/com/perimeterx/http/TimerValidateRequestsQueue.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/TimerValidateRequestsQueue.java similarity index 100% rename from src/main/java/com/perimeterx/http/TimerValidateRequestsQueue.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/TimerValidateRequestsQueue.java diff --git a/src/main/java/com/perimeterx/http/async/PxClientAsyncHandler.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/async/PxClientAsyncHandler.java similarity index 100% rename from src/main/java/com/perimeterx/http/async/PxClientAsyncHandler.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/async/PxClientAsyncHandler.java diff --git a/src/main/java/com/perimeterx/http/mock/MockPXClient.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/mock/MockPXClient.java similarity index 100% rename from src/main/java/com/perimeterx/http/mock/MockPXClient.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/mock/MockPXClient.java diff --git a/src/main/java/com/perimeterx/http/mock/MockPXClientFactory.java b/perimeterx-sdk/src/main/java/com/perimeterx/http/mock/MockPXClientFactory.java similarity index 100% rename from src/main/java/com/perimeterx/http/mock/MockPXClientFactory.java rename to perimeterx-sdk/src/main/java/com/perimeterx/http/mock/MockPXClientFactory.java diff --git a/src/main/java/com/perimeterx/internals/CookieSelector.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/CookieSelector.java similarity index 100% rename from src/main/java/com/perimeterx/internals/CookieSelector.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/CookieSelector.java diff --git a/src/main/java/com/perimeterx/internals/JwtUserIdentifiersExtractor.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/JwtUserIdentifiersExtractor.java similarity index 100% rename from src/main/java/com/perimeterx/internals/JwtUserIdentifiersExtractor.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/JwtUserIdentifiersExtractor.java diff --git a/src/main/java/com/perimeterx/internals/PXCookieOriginalTokenValidator.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/PXCookieOriginalTokenValidator.java similarity index 100% rename from src/main/java/com/perimeterx/internals/PXCookieOriginalTokenValidator.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/PXCookieOriginalTokenValidator.java diff --git a/src/main/java/com/perimeterx/internals/PXCookieValidator.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/PXCookieValidator.java similarity index 100% rename from src/main/java/com/perimeterx/internals/PXCookieValidator.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/PXCookieValidator.java diff --git a/src/main/java/com/perimeterx/internals/PXS2SValidator.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/PXS2SValidator.java similarity index 100% rename from src/main/java/com/perimeterx/internals/PXS2SValidator.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/PXS2SValidator.java diff --git a/src/main/java/com/perimeterx/internals/PXValidator.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/PXValidator.java similarity index 100% rename from src/main/java/com/perimeterx/internals/PXValidator.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/PXValidator.java diff --git a/src/main/java/com/perimeterx/internals/cookie/AbstractPXCookie.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/AbstractPXCookie.java similarity index 100% rename from src/main/java/com/perimeterx/internals/cookie/AbstractPXCookie.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/AbstractPXCookie.java diff --git a/src/main/java/com/perimeterx/internals/cookie/CookieData.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/CookieData.java similarity index 100% rename from src/main/java/com/perimeterx/internals/cookie/CookieData.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/CookieData.java diff --git a/src/main/java/com/perimeterx/internals/cookie/CookieVersion.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/CookieVersion.java similarity index 100% rename from src/main/java/com/perimeterx/internals/cookie/CookieVersion.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/CookieVersion.java diff --git a/src/main/java/com/perimeterx/internals/cookie/DataEnrichmentCookie.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/DataEnrichmentCookie.java similarity index 100% rename from src/main/java/com/perimeterx/internals/cookie/DataEnrichmentCookie.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/DataEnrichmentCookie.java diff --git a/src/main/java/com/perimeterx/internals/cookie/PXCookie.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/PXCookie.java similarity index 100% rename from src/main/java/com/perimeterx/internals/cookie/PXCookie.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/PXCookie.java diff --git a/src/main/java/com/perimeterx/internals/cookie/PXCookieFactory.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/PXCookieFactory.java similarity index 100% rename from src/main/java/com/perimeterx/internals/cookie/PXCookieFactory.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/PXCookieFactory.java diff --git a/src/main/java/com/perimeterx/internals/cookie/PXCookieV1.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/PXCookieV1.java similarity index 100% rename from src/main/java/com/perimeterx/internals/cookie/PXCookieV1.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/PXCookieV1.java diff --git a/src/main/java/com/perimeterx/internals/cookie/PXCookieV3.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/PXCookieV3.java similarity index 100% rename from src/main/java/com/perimeterx/internals/cookie/PXCookieV3.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/PXCookieV3.java diff --git a/src/main/java/com/perimeterx/internals/cookie/RawCookieData.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/RawCookieData.java similarity index 100% rename from src/main/java/com/perimeterx/internals/cookie/RawCookieData.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/RawCookieData.java diff --git a/src/main/java/com/perimeterx/internals/cookie/cookieparsers/CookieHeaderParser.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/cookieparsers/CookieHeaderParser.java similarity index 100% rename from src/main/java/com/perimeterx/internals/cookie/cookieparsers/CookieHeaderParser.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/cookieparsers/CookieHeaderParser.java diff --git a/src/main/java/com/perimeterx/internals/cookie/cookieparsers/HeaderParser.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/cookieparsers/HeaderParser.java similarity index 100% rename from src/main/java/com/perimeterx/internals/cookie/cookieparsers/HeaderParser.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/cookieparsers/HeaderParser.java diff --git a/src/main/java/com/perimeterx/internals/cookie/cookieparsers/MobileCookieHeaderParser.java b/perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/cookieparsers/MobileCookieHeaderParser.java similarity index 100% rename from src/main/java/com/perimeterx/internals/cookie/cookieparsers/MobileCookieHeaderParser.java rename to perimeterx-sdk/src/main/java/com/perimeterx/internals/cookie/cookieparsers/MobileCookieHeaderParser.java diff --git a/src/main/java/com/perimeterx/models/PXContext.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/PXContext.java similarity index 99% rename from src/main/java/com/perimeterx/models/PXContext.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/PXContext.java index cab4b02a..d7cfd1ae 100644 --- a/src/main/java/com/perimeterx/models/PXContext.java +++ b/perimeterx-sdk/src/main/java/com/perimeterx/models/PXContext.java @@ -79,6 +79,7 @@ public class PXContext { // Additional fields extracted from the original HTTP request private String vid; + private String origCookieVid; private String uuid; private Map headers; private String hostname; @@ -436,6 +437,7 @@ private void setVidPxhdAndPxcts(Cookie[] cookies) { this.vid = cookie.getValue(); this.vidSource = VidSource.VID_COOKIE; } else { + this.origCookieVid = cookie.getValue(); logger.debug("setVidAndPxhd - invalid VID value was extracted"); } } diff --git a/src/main/java/com/perimeterx/models/activities/Activity.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/activities/Activity.java similarity index 100% rename from src/main/java/com/perimeterx/models/activities/Activity.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/activities/Activity.java diff --git a/src/main/java/com/perimeterx/models/activities/ActivityDetails.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/activities/ActivityDetails.java similarity index 100% rename from src/main/java/com/perimeterx/models/activities/ActivityDetails.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/activities/ActivityDetails.java diff --git a/src/main/java/com/perimeterx/models/activities/ActivityFactory.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/activities/ActivityFactory.java similarity index 100% rename from src/main/java/com/perimeterx/models/activities/ActivityFactory.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/activities/ActivityFactory.java diff --git a/src/main/java/com/perimeterx/models/activities/ActivityHeader.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/activities/ActivityHeader.java similarity index 100% rename from src/main/java/com/perimeterx/models/activities/ActivityHeader.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/activities/ActivityHeader.java diff --git a/src/main/java/com/perimeterx/models/activities/AdditionalS2SActivityDetails.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/activities/AdditionalS2SActivityDetails.java similarity index 100% rename from src/main/java/com/perimeterx/models/activities/AdditionalS2SActivityDetails.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/activities/AdditionalS2SActivityDetails.java diff --git a/src/main/java/com/perimeterx/models/activities/BlockActivityDetails.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/activities/BlockActivityDetails.java similarity index 100% rename from src/main/java/com/perimeterx/models/activities/BlockActivityDetails.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/activities/BlockActivityDetails.java diff --git a/src/main/java/com/perimeterx/models/activities/CommonActivityDetails.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/activities/CommonActivityDetails.java similarity index 96% rename from src/main/java/com/perimeterx/models/activities/CommonActivityDetails.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/activities/CommonActivityDetails.java index 8fbde006..e2024e7c 100644 --- a/src/main/java/com/perimeterx/models/activities/CommonActivityDetails.java +++ b/perimeterx-sdk/src/main/java/com/perimeterx/models/activities/CommonActivityDetails.java @@ -72,6 +72,9 @@ public class CommonActivityDetails implements ActivityDetails { @JsonProperty("is_sensitive_route") public Boolean isSensitiveRoute; + @JsonProperty("orig_cookie_vid") + public String origCookieVid; + public CommonActivityDetails(PXContext context) { final LoginData loginData = context.getLoginData(); @@ -102,5 +105,6 @@ public CommonActivityDetails(PXContext context) { this.jwtAdditionalFields = additional.jwtAdditionalFields; this.isSensitiveRoute = additional.isSensitiveRoute; this.additionalTokenInfo = additional.additionalTokenInfo; + this.origCookieVid = context.getOrigCookieVid(); } } diff --git a/src/main/java/com/perimeterx/models/activities/EnforcerTelemetry.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/activities/EnforcerTelemetry.java similarity index 100% rename from src/main/java/com/perimeterx/models/activities/EnforcerTelemetry.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/activities/EnforcerTelemetry.java diff --git a/src/main/java/com/perimeterx/models/activities/EnforcerTelemetryActivityDetails.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/activities/EnforcerTelemetryActivityDetails.java similarity index 100% rename from src/main/java/com/perimeterx/models/activities/EnforcerTelemetryActivityDetails.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/activities/EnforcerTelemetryActivityDetails.java diff --git a/src/main/java/com/perimeterx/models/activities/PageRequestedActivityDetails.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/activities/PageRequestedActivityDetails.java similarity index 100% rename from src/main/java/com/perimeterx/models/activities/PageRequestedActivityDetails.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/activities/PageRequestedActivityDetails.java diff --git a/src/main/java/com/perimeterx/models/activities/UpdateReason.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/activities/UpdateReason.java similarity index 100% rename from src/main/java/com/perimeterx/models/activities/UpdateReason.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/activities/UpdateReason.java diff --git a/src/main/java/com/perimeterx/models/configuration/ModuleMode.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/ModuleMode.java similarity index 100% rename from src/main/java/com/perimeterx/models/configuration/ModuleMode.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/ModuleMode.java diff --git a/src/main/java/com/perimeterx/models/configuration/PXConfiguration.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/PXConfiguration.java similarity index 100% rename from src/main/java/com/perimeterx/models/configuration/PXConfiguration.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/PXConfiguration.java diff --git a/src/main/java/com/perimeterx/models/configuration/PXDynamicConfiguration.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/PXDynamicConfiguration.java similarity index 100% rename from src/main/java/com/perimeterx/models/configuration/PXDynamicConfiguration.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/PXDynamicConfiguration.java diff --git a/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/CILoginMap.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/CILoginMap.java similarity index 100% rename from src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/CILoginMap.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/CILoginMap.java diff --git a/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/ConfigCredentialsFieldPath.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/ConfigCredentialsFieldPath.java similarity index 100% rename from src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/ConfigCredentialsFieldPath.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/ConfigCredentialsFieldPath.java diff --git a/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/CredentialsExtractionDetails.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/CredentialsExtractionDetails.java similarity index 100% rename from src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/CredentialsExtractionDetails.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/CredentialsExtractionDetails.java diff --git a/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/CredentialsLocationInRequest.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/CredentialsLocationInRequest.java similarity index 100% rename from src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/CredentialsLocationInRequest.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/CredentialsLocationInRequest.java diff --git a/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/LoginCredentials.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/LoginCredentials.java similarity index 100% rename from src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/LoginCredentials.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/LoginCredentials.java diff --git a/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/LoginCredentialsConfig.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/LoginCredentialsConfig.java similarity index 100% rename from src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/LoginCredentialsConfig.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/LoginCredentialsConfig.java diff --git a/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/LoginRequestMethod.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/LoginRequestMethod.java similarity index 100% rename from src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/LoginRequestMethod.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/LoginRequestMethod.java diff --git a/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/PathType.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/PathType.java similarity index 100% rename from src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/PathType.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/configuration/credentialsIntelligenceconfig/PathType.java diff --git a/src/main/java/com/perimeterx/models/enforcererror/EnforcerErrorReasonInfo.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/enforcererror/EnforcerErrorReasonInfo.java similarity index 100% rename from src/main/java/com/perimeterx/models/enforcererror/EnforcerErrorReasonInfo.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/enforcererror/EnforcerErrorReasonInfo.java diff --git a/src/main/java/com/perimeterx/models/exceptions/PXCookieDecryptionException.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/exceptions/PXCookieDecryptionException.java similarity index 100% rename from src/main/java/com/perimeterx/models/exceptions/PXCookieDecryptionException.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/exceptions/PXCookieDecryptionException.java diff --git a/src/main/java/com/perimeterx/models/exceptions/PXException.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/exceptions/PXException.java similarity index 100% rename from src/main/java/com/perimeterx/models/exceptions/PXException.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/exceptions/PXException.java diff --git a/src/main/java/com/perimeterx/models/httpmodels/Additional.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/httpmodels/Additional.java similarity index 100% rename from src/main/java/com/perimeterx/models/httpmodels/Additional.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/httpmodels/Additional.java diff --git a/src/main/java/com/perimeterx/models/httpmodels/AdvancedBlockingResponse.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/httpmodels/AdvancedBlockingResponse.java similarity index 100% rename from src/main/java/com/perimeterx/models/httpmodels/AdvancedBlockingResponse.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/httpmodels/AdvancedBlockingResponse.java diff --git a/src/main/java/com/perimeterx/models/httpmodels/MobilePageResponse.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/httpmodels/MobilePageResponse.java similarity index 100% rename from src/main/java/com/perimeterx/models/httpmodels/MobilePageResponse.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/httpmodels/MobilePageResponse.java diff --git a/src/main/java/com/perimeterx/models/httpmodels/RiskRequest.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/httpmodels/RiskRequest.java similarity index 100% rename from src/main/java/com/perimeterx/models/httpmodels/RiskRequest.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/httpmodels/RiskRequest.java diff --git a/src/main/java/com/perimeterx/models/httpmodels/RiskResponse.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/httpmodels/RiskResponse.java similarity index 100% rename from src/main/java/com/perimeterx/models/httpmodels/RiskResponse.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/httpmodels/RiskResponse.java diff --git a/src/main/java/com/perimeterx/models/httpmodels/RiskResponseBody.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/httpmodels/RiskResponseBody.java similarity index 100% rename from src/main/java/com/perimeterx/models/httpmodels/RiskResponseBody.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/httpmodels/RiskResponseBody.java diff --git a/src/main/java/com/perimeterx/models/proxy/PredefinedResponse.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/proxy/PredefinedResponse.java similarity index 100% rename from src/main/java/com/perimeterx/models/proxy/PredefinedResponse.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/proxy/PredefinedResponse.java diff --git a/src/main/java/com/perimeterx/models/risk/BlockReason.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/risk/BlockReason.java similarity index 100% rename from src/main/java/com/perimeterx/models/risk/BlockReason.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/risk/BlockReason.java diff --git a/src/main/java/com/perimeterx/models/risk/CustomParameters.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/risk/CustomParameters.java similarity index 100% rename from src/main/java/com/perimeterx/models/risk/CustomParameters.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/risk/CustomParameters.java diff --git a/src/main/java/com/perimeterx/models/risk/PassReason.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/risk/PassReason.java similarity index 100% rename from src/main/java/com/perimeterx/models/risk/PassReason.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/risk/PassReason.java diff --git a/src/main/java/com/perimeterx/models/risk/Request.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/risk/Request.java similarity index 100% rename from src/main/java/com/perimeterx/models/risk/Request.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/risk/Request.java diff --git a/src/main/java/com/perimeterx/models/risk/S2SCallReason.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/risk/S2SCallReason.java similarity index 100% rename from src/main/java/com/perimeterx/models/risk/S2SCallReason.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/risk/S2SCallReason.java diff --git a/src/main/java/com/perimeterx/models/risk/S2SErrorReason.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/risk/S2SErrorReason.java similarity index 100% rename from src/main/java/com/perimeterx/models/risk/S2SErrorReason.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/risk/S2SErrorReason.java diff --git a/src/main/java/com/perimeterx/models/risk/S2SErrorReasonInfo.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/risk/S2SErrorReasonInfo.java similarity index 100% rename from src/main/java/com/perimeterx/models/risk/S2SErrorReasonInfo.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/risk/S2SErrorReasonInfo.java diff --git a/src/main/java/com/perimeterx/models/risk/Scores.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/risk/Scores.java similarity index 100% rename from src/main/java/com/perimeterx/models/risk/Scores.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/risk/Scores.java diff --git a/src/main/java/com/perimeterx/models/risk/VidSource.java b/perimeterx-sdk/src/main/java/com/perimeterx/models/risk/VidSource.java similarity index 100% rename from src/main/java/com/perimeterx/models/risk/VidSource.java rename to perimeterx-sdk/src/main/java/com/perimeterx/models/risk/VidSource.java diff --git a/src/main/java/com/perimeterx/utils/ActivityUtil.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/ActivityUtil.java similarity index 100% rename from src/main/java/com/perimeterx/utils/ActivityUtil.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/ActivityUtil.java diff --git a/src/main/java/com/perimeterx/utils/Base64.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/Base64.java similarity index 100% rename from src/main/java/com/perimeterx/utils/Base64.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/Base64.java diff --git a/src/main/java/com/perimeterx/utils/BlockAction.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/BlockAction.java similarity index 100% rename from src/main/java/com/perimeterx/utils/BlockAction.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/BlockAction.java diff --git a/src/main/java/com/perimeterx/utils/Constants.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/Constants.java similarity index 100% rename from src/main/java/com/perimeterx/utils/Constants.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/Constants.java diff --git a/src/main/java/com/perimeterx/utils/CookieNamesExtractor.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/CookieNamesExtractor.java similarity index 100% rename from src/main/java/com/perimeterx/utils/CookieNamesExtractor.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/CookieNamesExtractor.java diff --git a/src/main/java/com/perimeterx/utils/EnforcerErrorUtils.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/EnforcerErrorUtils.java similarity index 100% rename from src/main/java/com/perimeterx/utils/EnforcerErrorUtils.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/EnforcerErrorUtils.java diff --git a/src/main/java/com/perimeterx/utils/FilesUtils.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/FilesUtils.java similarity index 100% rename from src/main/java/com/perimeterx/utils/FilesUtils.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/FilesUtils.java diff --git a/src/main/java/com/perimeterx/utils/HMACUtils.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/HMACUtils.java similarity index 100% rename from src/main/java/com/perimeterx/utils/HMACUtils.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/HMACUtils.java diff --git a/src/main/java/com/perimeterx/utils/HashAlgorithm.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/HashAlgorithm.java similarity index 100% rename from src/main/java/com/perimeterx/utils/HashAlgorithm.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/HashAlgorithm.java diff --git a/src/main/java/com/perimeterx/utils/JsonUtils.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/JsonUtils.java similarity index 100% rename from src/main/java/com/perimeterx/utils/JsonUtils.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/JsonUtils.java diff --git a/src/main/java/com/perimeterx/utils/MacBasedPRF.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/MacBasedPRF.java similarity index 100% rename from src/main/java/com/perimeterx/utils/MacBasedPRF.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/MacBasedPRF.java diff --git a/src/main/java/com/perimeterx/utils/PBKDF2.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/PBKDF2.java similarity index 100% rename from src/main/java/com/perimeterx/utils/PBKDF2.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/PBKDF2.java diff --git a/src/main/java/com/perimeterx/utils/PBKDF2Engine.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/PBKDF2Engine.java similarity index 100% rename from src/main/java/com/perimeterx/utils/PBKDF2Engine.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/PBKDF2Engine.java diff --git a/src/main/java/com/perimeterx/utils/PBKDF2Formatter.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/PBKDF2Formatter.java similarity index 100% rename from src/main/java/com/perimeterx/utils/PBKDF2Formatter.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/PBKDF2Formatter.java diff --git a/src/main/java/com/perimeterx/utils/PBKDF2Parameters.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/PBKDF2Parameters.java similarity index 100% rename from src/main/java/com/perimeterx/utils/PBKDF2Parameters.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/PBKDF2Parameters.java diff --git a/src/main/java/com/perimeterx/utils/PRF.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/PRF.java similarity index 100% rename from src/main/java/com/perimeterx/utils/PRF.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/PRF.java diff --git a/src/main/java/com/perimeterx/utils/PXCommonUtils.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/PXCommonUtils.java similarity index 100% rename from src/main/java/com/perimeterx/utils/PXCommonUtils.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/PXCommonUtils.java diff --git a/src/main/java/com/perimeterx/utils/PXIOUtils.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/PXIOUtils.java similarity index 100% rename from src/main/java/com/perimeterx/utils/PXIOUtils.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/PXIOUtils.java diff --git a/src/main/java/com/perimeterx/utils/PXResourcesUtil.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/PXResourcesUtil.java similarity index 100% rename from src/main/java/com/perimeterx/utils/PXResourcesUtil.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/PXResourcesUtil.java diff --git a/src/main/java/com/perimeterx/utils/StringUtils.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/StringUtils.java similarity index 100% rename from src/main/java/com/perimeterx/utils/StringUtils.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/StringUtils.java diff --git a/src/main/java/com/perimeterx/utils/logger/ConsoleLogger.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/logger/ConsoleLogger.java similarity index 100% rename from src/main/java/com/perimeterx/utils/logger/ConsoleLogger.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/logger/ConsoleLogger.java diff --git a/src/main/java/com/perimeterx/utils/logger/IPXLogger.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/logger/IPXLogger.java similarity index 100% rename from src/main/java/com/perimeterx/utils/logger/IPXLogger.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/logger/IPXLogger.java diff --git a/src/main/java/com/perimeterx/utils/logger/LogMemory.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/logger/LogMemory.java similarity index 100% rename from src/main/java/com/perimeterx/utils/logger/LogMemory.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/logger/LogMemory.java diff --git a/src/main/java/com/perimeterx/utils/logger/LogReason.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/logger/LogReason.java similarity index 100% rename from src/main/java/com/perimeterx/utils/logger/LogReason.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/logger/LogReason.java diff --git a/src/main/java/com/perimeterx/utils/logger/LogRecord.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/logger/LogRecord.java similarity index 100% rename from src/main/java/com/perimeterx/utils/logger/LogRecord.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/logger/LogRecord.java diff --git a/src/main/java/com/perimeterx/utils/logger/LoggerFactory.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/logger/LoggerFactory.java similarity index 100% rename from src/main/java/com/perimeterx/utils/logger/LoggerFactory.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/logger/LoggerFactory.java diff --git a/src/main/java/com/perimeterx/utils/logger/LoggerSeverity.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/logger/LoggerSeverity.java similarity index 100% rename from src/main/java/com/perimeterx/utils/logger/LoggerSeverity.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/logger/LoggerSeverity.java diff --git a/src/main/java/com/perimeterx/utils/logger/Slf4JLogger.java b/perimeterx-sdk/src/main/java/com/perimeterx/utils/logger/Slf4JLogger.java similarity index 100% rename from src/main/java/com/perimeterx/utils/logger/Slf4JLogger.java rename to perimeterx-sdk/src/main/java/com/perimeterx/utils/logger/Slf4JLogger.java diff --git a/src/main/resources/com/perimeterx/api/blockhandler/templates/block_template.mustache b/perimeterx-sdk/src/main/resources/com/perimeterx/api/blockhandler/templates/block_template.mustache similarity index 100% rename from src/main/resources/com/perimeterx/api/blockhandler/templates/block_template.mustache rename to perimeterx-sdk/src/main/resources/com/perimeterx/api/blockhandler/templates/block_template.mustache diff --git a/src/main/resources/com/perimeterx/api/blockhandler/templates/captcha_template.mustache b/perimeterx-sdk/src/main/resources/com/perimeterx/api/blockhandler/templates/captcha_template.mustache similarity index 100% rename from src/main/resources/com/perimeterx/api/blockhandler/templates/captcha_template.mustache rename to perimeterx-sdk/src/main/resources/com/perimeterx/api/blockhandler/templates/captcha_template.mustache diff --git a/src/main/resources/com/perimeterx/api/blockhandler/templates/ratelimit.mustache b/perimeterx-sdk/src/main/resources/com/perimeterx/api/blockhandler/templates/ratelimit.mustache similarity index 100% rename from src/main/resources/com/perimeterx/api/blockhandler/templates/ratelimit.mustache rename to perimeterx-sdk/src/main/resources/com/perimeterx/api/blockhandler/templates/ratelimit.mustache diff --git a/src/main/resources/com/perimeterx/utils/metadata.properties b/perimeterx-sdk/src/main/resources/com/perimeterx/utils/metadata.properties similarity index 100% rename from src/main/resources/com/perimeterx/utils/metadata.properties rename to perimeterx-sdk/src/main/resources/com/perimeterx/utils/metadata.properties diff --git a/src/test/java/com/perimeterx/api/BufferedActivityHandlerTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/api/BufferedActivityHandlerTest.java similarity index 100% rename from src/test/java/com/perimeterx/api/BufferedActivityHandlerTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/api/BufferedActivityHandlerTest.java diff --git a/src/test/java/com/perimeterx/api/CustomFilterByFunctionTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/api/CustomFilterByFunctionTest.java similarity index 100% rename from src/test/java/com/perimeterx/api/CustomFilterByFunctionTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/api/CustomFilterByFunctionTest.java diff --git a/src/test/java/com/perimeterx/api/CustomParametersTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/api/CustomParametersTest.java similarity index 100% rename from src/test/java/com/perimeterx/api/CustomParametersTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/api/CustomParametersTest.java diff --git a/src/test/java/com/perimeterx/api/CustomSensitiveTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/api/CustomSensitiveTest.java similarity index 100% rename from src/test/java/com/perimeterx/api/CustomSensitiveTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/api/CustomSensitiveTest.java diff --git a/src/test/java/com/perimeterx/api/DefaultVerificationHandlerTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/api/DefaultVerificationHandlerTest.java similarity index 100% rename from src/test/java/com/perimeterx/api/DefaultVerificationHandlerTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/api/DefaultVerificationHandlerTest.java diff --git a/src/test/java/com/perimeterx/api/FilterByExtensionTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/api/FilterByExtensionTest.java similarity index 100% rename from src/test/java/com/perimeterx/api/FilterByExtensionTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/api/FilterByExtensionTest.java diff --git a/src/test/java/com/perimeterx/api/IPProviderTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/api/IPProviderTest.java similarity index 100% rename from src/test/java/com/perimeterx/api/IPProviderTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/api/IPProviderTest.java diff --git a/src/test/java/com/perimeterx/api/PerimeterXTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/api/PerimeterXTest.java similarity index 100% rename from src/test/java/com/perimeterx/api/PerimeterXTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/api/PerimeterXTest.java diff --git a/src/test/java/com/perimeterx/api/RemoteConfigurationsTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/api/RemoteConfigurationsTest.java similarity index 100% rename from src/test/java/com/perimeterx/api/RemoteConfigurationsTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/api/RemoteConfigurationsTest.java diff --git a/src/test/java/com/perimeterx/api/RequestWrapperTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/api/RequestWrapperTest.java similarity index 100% rename from src/test/java/com/perimeterx/api/RequestWrapperTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/api/RequestWrapperTest.java diff --git a/src/test/java/com/perimeterx/api/ReverseProxyTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/api/ReverseProxyTest.java similarity index 100% rename from src/test/java/com/perimeterx/api/ReverseProxyTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/api/ReverseProxyTest.java diff --git a/src/test/java/com/perimeterx/api/TemplatesTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/api/TemplatesTest.java similarity index 100% rename from src/test/java/com/perimeterx/api/TemplatesTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/api/TemplatesTest.java diff --git a/src/test/java/com/perimeterx/api/TestCustomParamProvider.java b/perimeterx-sdk/src/test/java/com/perimeterx/api/TestCustomParamProvider.java similarity index 100% rename from src/test/java/com/perimeterx/api/TestCustomParamProvider.java rename to perimeterx-sdk/src/test/java/com/perimeterx/api/TestCustomParamProvider.java diff --git a/src/test/java/com/perimeterx/api/UnitTestVerificationHandler.java b/perimeterx-sdk/src/test/java/com/perimeterx/api/UnitTestVerificationHandler.java similarity index 100% rename from src/test/java/com/perimeterx/api/UnitTestVerificationHandler.java rename to perimeterx-sdk/src/test/java/com/perimeterx/api/UnitTestVerificationHandler.java diff --git a/src/test/java/com/perimeterx/http/BufferedActivitiesTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/http/BufferedActivitiesTest.java similarity index 100% rename from src/test/java/com/perimeterx/http/BufferedActivitiesTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/http/BufferedActivitiesTest.java diff --git a/src/test/java/com/perimeterx/http/PXHttpClientTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/http/PXHttpClientTest.java similarity index 100% rename from src/test/java/com/perimeterx/http/PXHttpClientTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/http/PXHttpClientTest.java diff --git a/src/test/java/com/perimeterx/internal/CookieSelectorTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/internal/CookieSelectorTest.java similarity index 100% rename from src/test/java/com/perimeterx/internal/CookieSelectorTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/internal/CookieSelectorTest.java diff --git a/src/test/java/com/perimeterx/internal/PXCookieOriginalTokenValidatorTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/internal/PXCookieOriginalTokenValidatorTest.java similarity index 100% rename from src/test/java/com/perimeterx/internal/PXCookieOriginalTokenValidatorTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/internal/PXCookieOriginalTokenValidatorTest.java diff --git a/src/test/java/com/perimeterx/internal/PXS2SValidatorTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/internal/PXS2SValidatorTest.java similarity index 100% rename from src/test/java/com/perimeterx/internal/PXS2SValidatorTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/internal/PXS2SValidatorTest.java diff --git a/src/test/java/com/perimeterx/internal/PxCookieValidatorTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/internal/PxCookieValidatorTest.java similarity index 100% rename from src/test/java/com/perimeterx/internal/PxCookieValidatorTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/internal/PxCookieValidatorTest.java diff --git a/src/test/java/com/perimeterx/internal/RiskCookieDecoderTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/internal/RiskCookieDecoderTest.java similarity index 100% rename from src/test/java/com/perimeterx/internal/RiskCookieDecoderTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/internal/RiskCookieDecoderTest.java diff --git a/src/test/java/com/perimeterx/internal/TelemetryTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/internal/TelemetryTest.java similarity index 100% rename from src/test/java/com/perimeterx/internal/TelemetryTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/internal/TelemetryTest.java diff --git a/src/test/java/com/perimeterx/internal/cookie/CookieErrorsTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/internal/cookie/CookieErrorsTest.java similarity index 100% rename from src/test/java/com/perimeterx/internal/cookie/CookieErrorsTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/internal/cookie/CookieErrorsTest.java diff --git a/src/test/java/com/perimeterx/internal/cookie/CookieV1MobileTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/internal/cookie/CookieV1MobileTest.java similarity index 100% rename from src/test/java/com/perimeterx/internal/cookie/CookieV1MobileTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/internal/cookie/CookieV1MobileTest.java diff --git a/src/test/java/com/perimeterx/internal/cookie/CookieV3EncodedTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/internal/cookie/CookieV3EncodedTest.java similarity index 100% rename from src/test/java/com/perimeterx/internal/cookie/CookieV3EncodedTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/internal/cookie/CookieV3EncodedTest.java diff --git a/src/test/java/com/perimeterx/internal/cookie/CookieV3MobileTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/internal/cookie/CookieV3MobileTest.java similarity index 100% rename from src/test/java/com/perimeterx/internal/cookie/CookieV3MobileTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/internal/cookie/CookieV3MobileTest.java diff --git a/src/test/java/com/perimeterx/internal/cookie/CookieV3Test.java b/perimeterx-sdk/src/test/java/com/perimeterx/internal/cookie/CookieV3Test.java similarity index 100% rename from src/test/java/com/perimeterx/internal/cookie/CookieV3Test.java rename to perimeterx-sdk/src/test/java/com/perimeterx/internal/cookie/CookieV3Test.java diff --git a/src/test/java/com/perimeterx/internal/cookie/cookieparser/CookieHeaderParserTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/internal/cookie/cookieparser/CookieHeaderParserTest.java similarity index 100% rename from src/test/java/com/perimeterx/internal/cookie/cookieparser/CookieHeaderParserTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/internal/cookie/cookieparser/CookieHeaderParserTest.java diff --git a/src/test/java/com/perimeterx/internal/cookie/cookieparser/MobileCookieHeaderParserTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/internal/cookie/cookieparser/MobileCookieHeaderParserTest.java similarity index 100% rename from src/test/java/com/perimeterx/internal/cookie/cookieparser/MobileCookieHeaderParserTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/internal/cookie/cookieparser/MobileCookieHeaderParserTest.java diff --git a/src/test/java/com/perimeterx/models/PXConfigurationTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/models/PXConfigurationTest.java similarity index 100% rename from src/test/java/com/perimeterx/models/PXConfigurationTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/models/PXConfigurationTest.java diff --git a/src/test/java/com/perimeterx/models/PXContextTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/models/PXContextTest.java similarity index 100% rename from src/test/java/com/perimeterx/models/PXContextTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/models/PXContextTest.java diff --git a/src/test/java/com/perimeterx/utils/ConsoleLoggerTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/utils/ConsoleLoggerTest.java similarity index 100% rename from src/test/java/com/perimeterx/utils/ConsoleLoggerTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/utils/ConsoleLoggerTest.java diff --git a/src/test/java/com/perimeterx/utils/CookieNamesExtractorTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/utils/CookieNamesExtractorTest.java similarity index 100% rename from src/test/java/com/perimeterx/utils/CookieNamesExtractorTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/utils/CookieNamesExtractorTest.java diff --git a/src/test/java/com/perimeterx/utils/FileUtils.java b/perimeterx-sdk/src/test/java/com/perimeterx/utils/FileUtils.java similarity index 100% rename from src/test/java/com/perimeterx/utils/FileUtils.java rename to perimeterx-sdk/src/test/java/com/perimeterx/utils/FileUtils.java diff --git a/src/test/java/com/perimeterx/utils/HMACUtilsTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/utils/HMACUtilsTest.java similarity index 100% rename from src/test/java/com/perimeterx/utils/HMACUtilsTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/utils/HMACUtilsTest.java diff --git a/src/test/java/com/perimeterx/utils/JSONUtilsTest.java b/perimeterx-sdk/src/test/java/com/perimeterx/utils/JSONUtilsTest.java similarity index 100% rename from src/test/java/com/perimeterx/utils/JSONUtilsTest.java rename to perimeterx-sdk/src/test/java/com/perimeterx/utils/JSONUtilsTest.java diff --git a/src/test/java/testutils/ConfiguredTest.java b/perimeterx-sdk/src/test/java/testutils/ConfiguredTest.java similarity index 100% rename from src/test/java/testutils/ConfiguredTest.java rename to perimeterx-sdk/src/test/java/testutils/ConfiguredTest.java diff --git a/src/test/java/testutils/CookieV3Generator.java b/perimeterx-sdk/src/test/java/testutils/CookieV3Generator.java similarity index 100% rename from src/test/java/testutils/CookieV3Generator.java rename to perimeterx-sdk/src/test/java/testutils/CookieV3Generator.java diff --git a/src/test/java/testutils/CustomBlockHandler.java b/perimeterx-sdk/src/test/java/testutils/CustomBlockHandler.java similarity index 100% rename from src/test/java/testutils/CustomBlockHandler.java rename to perimeterx-sdk/src/test/java/testutils/CustomBlockHandler.java diff --git a/src/test/java/testutils/PXClientMock.java b/perimeterx-sdk/src/test/java/testutils/PXClientMock.java similarity index 100% rename from src/test/java/testutils/PXClientMock.java rename to perimeterx-sdk/src/test/java/testutils/PXClientMock.java diff --git a/src/test/java/testutils/TestObjectUtils.java b/perimeterx-sdk/src/test/java/testutils/TestObjectUtils.java similarity index 100% rename from src/test/java/testutils/TestObjectUtils.java rename to perimeterx-sdk/src/test/java/testutils/TestObjectUtils.java diff --git a/src/test/resources/basic_configuration.json b/perimeterx-sdk/src/test/resources/basic_configuration.json similarity index 100% rename from src/test/resources/basic_configuration.json rename to perimeterx-sdk/src/test/resources/basic_configuration.json diff --git a/src/test/resources/block.mustache b/perimeterx-sdk/src/test/resources/block.mustache similarity index 100% rename from src/test/resources/block.mustache rename to perimeterx-sdk/src/test/resources/block.mustache diff --git a/src/test/resources/captcha.mustache b/perimeterx-sdk/src/test/resources/captcha.mustache similarity index 100% rename from src/test/resources/captcha.mustache rename to perimeterx-sdk/src/test/resources/captcha.mustache diff --git a/src/test/resources/testconfig.properties b/perimeterx-sdk/src/test/resources/testconfig.properties similarity index 100% rename from src/test/resources/testconfig.properties rename to perimeterx-sdk/src/test/resources/testconfig.properties diff --git a/pom.xml b/pom.xml index cb429817..5323cf0e 100644 --- a/pom.xml +++ b/pom.xml @@ -4,13 +4,13 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 - PerimeterX JAVA SDK com.perimeterx - perimeterx-sdk + perimeterx-java-sdk-parent 6.16.0 + pom - jar - PerimeterX Java SDK + PerimeterX Java SDK Parent + PerimeterX Java SDK (multi-module reactor) https://github.com/PerimeterX/perimeterx-java-sdk @@ -42,6 +42,10 @@ HEAD + + perimeterx-sdk + perimeterx-sdk-jakarta + disable-javadoc-doclint @@ -75,9 +79,6 @@ build-extras - - true - @@ -255,6 +256,29 @@ + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.22.2 + + 3 + true + -Xmx1024m + + + + org.apache.maven.plugins @@ -265,23 +289,6 @@ 1.8 - - maven-assembly-plugin - 2.6 - - - jar-with-dependencies - - - - - package - - single - - - - org.sonatype.central central-publishing-maven-plugin @@ -292,25 +299,6 @@ true - - com.google.code.maven-replacer-plugin - replacer - 1.5.3 - - - compile - - replace - - - - - src/main/resources/com/perimeterx/utils/metadata.properties - target/classes/com/perimeterx/utils/metadata.properties - @sdk_version@ - ${project.version} - - org.apache.maven.plugins maven-surefire-plugin @@ -321,6 +309,17 @@ -Xmx1024m -XX:MaxPermSize=256m + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.8 + true + + ossrh + https://oss.sonatype.org/ + true + + diff --git a/web-jakarta/pom.xml b/web-jakarta/pom.xml new file mode 100644 index 00000000..575f8521 --- /dev/null +++ b/web-jakarta/pom.xml @@ -0,0 +1,80 @@ + + + + 4.0.0 + + com.web + web-jakarta + 1.0.0 + war + + + 17 + 6.16.0 + + + + + jakarta.servlet + jakarta.servlet-api + 6.0.0 + provided + + + org.json + json + 20210307 + + + com.perimeterx + perimeterx-sdk-jakarta + ${com.perimeterx.version} + + + org.slf4j + slf4j-api + 2.0.9 + + + org.apache.logging.log4j + log4j-slf4j2-impl + 2.23.1 + runtime + + + org.apache.logging.log4j + log4j-core + 2.23.1 + + + + + ROOT + + + org.apache.maven.plugins + maven-compiler-plugin + 3.11.0 + + 17 + + + + maven-war-plugin + 3.4.0 + + + + src/main/java/templates + ** + /templates + + + + + + + + diff --git a/web-jakarta/src/main/java/com/web/Config.java b/web-jakarta/src/main/java/com/web/Config.java new file mode 100644 index 00000000..efeab9f9 --- /dev/null +++ b/web-jakarta/src/main/java/com/web/Config.java @@ -0,0 +1,250 @@ +package com.web; + +import com.perimeterx.api.additionalContext.credentialsIntelligence.CIProtocol; +import com.perimeterx.api.additionalContext.credentialsIntelligence.loginresponse.LoginResponseValidationReportingMethod; +import com.perimeterx.models.configuration.ModuleMode; +import com.perimeterx.models.configuration.PXConfiguration; +import com.perimeterx.models.configuration.credentialsIntelligenceconfig.CILoginMap; +import com.perimeterx.models.risk.CustomParameters; +import com.perimeterx.utils.logger.LoggerSeverity; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.util.ArrayList; +import java.util.List; + +import static com.web.Utils.getEnforcerConfig; +import static com.web.Utils.jsonArrayToSet; + +public class Config { + private final JSONObject enforcerConfig; + + public Config() { + enforcerConfig = getEnforcerConfig(); + } + + public PXConfiguration getPxConfiguration() { + PXConfiguration.PXConfigurationBuilder builder = PXConfiguration.builder(); + for (String key : enforcerConfig.keySet()) { + switch (key) { + case "px_app_id": + builder.appId(enforcerConfig.getString(key)); + break; + case "px_cookie_secret": + builder.cookieKey(enforcerConfig.getString(key)); + break; + case "px_auth_token": + builder.authToken(enforcerConfig.getString(key)); + break; + case "px_logger_auth_token": + builder.loggerAuthToken(enforcerConfig.getString(key)); + break; + case "px_module_enabled": + builder.moduleEnabled(enforcerConfig.getBoolean(key)); + break; + case "px_encryption_enabled": + builder.encryptionEnabled(enforcerConfig.getBoolean(key)); + break; + case "px_blocking_score": + builder.blockingScore(enforcerConfig.getInt(key)); + break; + case "px_sensitive_headers": + builder.sensitiveHeaders(jsonArrayToSet(enforcerConfig.getJSONArray(key))); + break; + case "px_max_buffer_len": + builder.maxBufferLen(enforcerConfig.getInt(key)); + break; + case "px_s2s_timeout": + builder.apiTimeout(enforcerConfig.getInt(key)); + break; + case "px_connection_timeout_ms": + builder.connectionTimeout(enforcerConfig.getInt(key)); + break; + case "px_send_async_activities": + builder.sendPageActivities(enforcerConfig.getBoolean(key)); + break; + case "px_backend_url": + builder.serverURL(enforcerConfig.getString(key)); + break; + case "px_custom_logo": + builder.customLogo(enforcerConfig.getString(key)); + break; + case "px_css_ref": + builder.cssRef(enforcerConfig.getString(key)); + break; + case "px_js_ref": + builder.jsRef(enforcerConfig.getString(key)); + break; + case "px_sensitive_routes": + builder.sensitiveRoutes(jsonArrayToSet(enforcerConfig.getJSONArray(key))); + break; + case "px_sensitive_routes_regex": + builder.sensitiveRoutesRegex(jsonArrayToSet(enforcerConfig.getJSONArray(key))); + break; + case "px_ip_headers": + builder.ipHeaders(jsonArrayToSet(enforcerConfig.getJSONArray(key))); + break; + case "px_checksum": + builder.checksum(enforcerConfig.getString(key)); + break; + case "px_remote_configuration_enabled": + builder.remoteConfigurationEnabled(enforcerConfig.getBoolean(key)); + break; + case "px_first_party_enabled": + builder.firstPartyEnabled(enforcerConfig.getBoolean(key)); + break; + case "px_backend_collector_url": + builder.collectorUrl(enforcerConfig.getString(key)); + break; + case "px_module_mode": + if (enforcerConfig.getString(key).equals("active_blocking")) { + builder.moduleMode(ModuleMode.BLOCKING); + } else { + builder.moduleMode(ModuleMode.MONITOR); + } + break; + case "px_filter_by_extension": + builder.staticFilesExt(jsonArrayToSet(enforcerConfig.getJSONArray(key))); + break; + case "px_remote_configuration_interval_ms": + builder.remoteConfigurationInterval(enforcerConfig.getInt(key)); + break; + case "px_remote_configuration_delay_ms": + builder.remoteConfigurationDelay(enforcerConfig.getInt(key)); + break; + case "px_max_http_client_connections": + builder.maxConnections(enforcerConfig.getInt(key)); + break; + case "px_enforced_routes": + builder.enforcedRoutes(jsonArrayToSet(enforcerConfig.getJSONArray(key))); + break; + case "px_monitored_routes": + builder.monitoredRoutes(jsonArrayToSet(enforcerConfig.getJSONArray(key))); + break; + case "px_bypass_monitor_header": + builder.bypassMonitorHeader(enforcerConfig.getString(key)); + break; + case "px_login_credentials_extraction_enabled": + builder.loginCredentialsExtractionEnabled(enforcerConfig.getBoolean(key)); + break; + case "px_login_credentials_extraction": + builder.loginCredentialsExtractionDetails(new CILoginMap(enforcerConfig.getJSONArray(key).toString())); + break; + case "px_credentials_intelligence_version": + builder.ciProtocol(CIProtocol.getKeyByValue(enforcerConfig.getString(key))); + break; + case "px_compromised_credentials_header": + builder.pxCompromisedCredentialsHeader(enforcerConfig.getString(key)); + break; + case "px_send_raw_username_on_additional_s2s_activity": + builder.addRawUsernameOnAdditionalS2SActivity(enforcerConfig.getBoolean(key)); + break; + case "px_additional_s2s_activity_header_enabled": + builder.additionalS2SActivityHeaderEnabled(enforcerConfig.getBoolean(key)); + break; + case "px_login_successful_reporting_method": + builder.loginResponseValidationReportingMethod(LoginResponseValidationReportingMethod.getKeyByValue(enforcerConfig.getString(key))); + break; + case "px_login_successful_body_regex": + builder.regexPatternToValidateLoginResponseBody(enforcerConfig.getString(key)); + break; + case "px_login_successful_header_name": + builder.headerNameToValidateLoginResponse(enforcerConfig.getString(key)); + break; + case "px_login_successful_header_value": + builder.headerValueToValidateLoginResponse(enforcerConfig.getString(key)); + break; + case "px_login_successful_status": + builder.loginResponseValidationStatusCode(extractStatusCode(key)); + break; + case "px_logger_severity": + this.setLoggerSeverity(enforcerConfig.getString(key)); + break; + case "px_secured_pxhd_enabled": + builder.securedPxhdEnabled(enforcerConfig.getBoolean(key)); + break; + case "px_jwt_cookie_name": + builder.pxJwtCookieName(enforcerConfig.getString(key)); + break; + case "px_jwt_cookie_user_id_field_name": + builder.pxJwtCookieUserIdFieldName(enforcerConfig.getString(key)); + break; + case "px_jwt_cookie_additional_field_names": + builder.pxJwtCookieAdditionalFieldNames(extractStringList(key)); + break; + case "px_jwt_header_name": + builder.pxJwtHeaderName(enforcerConfig.getString(key)); + break; + case "px_jwt_header_user_id_field_name": + builder.pxJwtHeaderUserIdFieldName(enforcerConfig.getString(key)); + break; + case "px_jwt_header_additional_field_names": + builder.pxJwtHeaderAdditionalFieldNames(extractStringList(key)); + break; + case "px_data_enrichment_header_name": + builder.pxDataEnrichmentHeaderName(enforcerConfig.getString(key)); + break; + case "px_user_agent_max_length": + case "px_risk_cookie_max_length": + case "px_risk_cookie_max_iterations": + case "px_risk_cookie_min_iterations": + case "px_enable_login_creds_extraction": + //features are not supported yet + break; + } + + } + + builder.customParametersExtraction(req -> { + CustomParameters customParameters = new CustomParameters(); + customParameters.customParam1 = "test1"; + customParameters.customParam2 = "test2"; + customParameters.customParam3 = 3; + customParameters.customParam4 = 4; + customParameters.customParam5 = 5; + customParameters.customParam6 = 6; + customParameters.customParam7 = req.getRequestURI(); + return customParameters; + }); + + builder.customIsSensitiveRequest((req -> { + return req.getRequestURI().startsWith("/sensitive") && req.getMethod().equals("POST"); + })); + + return builder.build(); + } + + private void setLoggerSeverity(String severity) { + switch (severity) { + case "debug": + PXConfiguration.setPxLoggerSeverity(LoggerSeverity.DEBUG); + break; + case "error": + PXConfiguration.setPxLoggerSeverity(LoggerSeverity.ERROR); + break; + case "none": + PXConfiguration.setPxLoggerSeverity(LoggerSeverity.NONE); + break; + } + } + + private int[] extractStatusCode(String key) { + final JSONArray jsonField = enforcerConfig.getJSONArray(key); + final int[] statusCode = new int[jsonField.length()]; + + for(int i = 0; i < statusCode.length; i ++) { + statusCode[i] = jsonField.getInt(i); + } + return statusCode; + } + + private List extractStringList(String key) { + final JSONArray jsonField = enforcerConfig.getJSONArray(key); + final List out = new ArrayList<>(jsonField.length()); + for (int i = 0; i < jsonField.length(); i++) { + out.add(jsonField.getString(i)); + } + return out; + } +} + diff --git a/web-jakarta/src/main/java/com/web/Constants.java b/web-jakarta/src/main/java/com/web/Constants.java new file mode 100644 index 00000000..125120d2 --- /dev/null +++ b/web-jakarta/src/main/java/com/web/Constants.java @@ -0,0 +1,16 @@ +package com.web; + +public class Constants { + public final static String ENFORCER_CONFIG = "enforcer_config"; + public final static String PX_USERNAME = "pxUser"; + public final static String PX_PASSWORD = "1234"; + public final static String JSON_SUFFIX = ".json"; + public final static String PX_PREFIX = "PX"; + public final static String THIRD_PARTY_SENSOR_URL_TEMPLATE = "//client.px-cloud.net/%s/main.min.js"; + public final static String FIRST_PARTY_SENSOR_SUFFIX = "/init.js"; + public final static String APP_ID_KEY = "app_id"; + public final static String PX_APP_ID_FIELD = "px_app_id"; + public final static String SENSOR_SRC_KEY = "sensor_src_url"; + public final static String RESOURCES_RELATIVE_PATH = "src/main/resources/"; + public final static String COMPILED_FILES_BASIC_PATH = "/target/classes"; +} diff --git a/web-jakarta/src/main/java/com/web/IndexServlet.java b/web-jakarta/src/main/java/com/web/IndexServlet.java new file mode 100644 index 00000000..82d22200 --- /dev/null +++ b/web-jakarta/src/main/java/com/web/IndexServlet.java @@ -0,0 +1,17 @@ +package com.web; + +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebServlet(urlPatterns = {"/", "/index"}) +public class IndexServlet extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + request.getRequestDispatcher("/templates/index.template.jsp").forward(request, response); + } +} diff --git a/web-jakarta/src/main/java/com/web/LoginServlet.java b/web-jakarta/src/main/java/com/web/LoginServlet.java new file mode 100644 index 00000000..e1b31240 --- /dev/null +++ b/web-jakarta/src/main/java/com/web/LoginServlet.java @@ -0,0 +1,99 @@ +package com.web; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.perimeterx.http.RequestWrapper; +import com.perimeterx.models.configuration.credentialsIntelligenceconfig.ConfigCredentialsFieldPath; +import com.perimeterx.models.configuration.credentialsIntelligenceconfig.LoginCredentials; + +import jakarta.servlet.ServletException; +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Objects; + +import static com.perimeterx.utils.Constants.DEFAULT_COMPROMISED_CREDENTIALS_HEADER_NAME; +import static com.perimeterx.utils.StringUtils.extractCredentialsFromMultipart; +import static com.perimeterx.utils.StringUtils.splitQueryParams; + +@WebServlet({"/login", "/login-nested-object"}) +public class LoginServlet extends HttpServlet { + + @Override + protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + handleLoginRequest(request, response); + } + + @Override + protected void doPut(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + handleLoginRequest(request, response); + } + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + handleLoginRequest(request, response); + } + + public void handleLoginRequest(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { + LoginCredentials creds = extractCredentials(request); + + if(isValidCredentials(creds)){ + if (Objects.equals(request.getHeader(DEFAULT_COMPROMISED_CREDENTIALS_HEADER_NAME), "1")) { + response.addHeader(DEFAULT_COMPROMISED_CREDENTIALS_HEADER_NAME, "1"); + } + request.getRequestDispatcher("/templates/profile.template.jsp").forward(request, response); + } else { + response.sendRedirect(request.getContextPath() + "/index"); + } + } + + private boolean isValidCredentials(LoginCredentials creds) { + return creds != null && creds.getUsername().equals(Constants.PX_USERNAME) && creds.getPassword().equals(Constants.PX_PASSWORD); + } + + private LoginCredentials extractCredentials(HttpServletRequest request) { + try { + final String body = ((RequestWrapper) request).getBody(); + final boolean isFormUrlEncoded = body.contains("=") && body.contains("&"); + final String contentType = request.getContentType(); + Map params; + + if (contentType != null && contentType.startsWith("multipart/form-data")) { + return extractCredentialsFromMultipart(body, new ConfigCredentialsFieldPath("username", "password")); + } else if (isFormUrlEncoded) { + params = splitQueryParams(body); + return new LoginCredentials(params.get("username"), params.get("password")); + } else { + params = extractJsonFields(body); + return new LoginCredentials(params.get("username"), params.get("password")); + } + } catch (Exception e) { + return null; + } + } + + private Map extractJsonFields(String body) throws IOException { + ObjectMapper objectMapper = new ObjectMapper(); + + JsonNode jsonNode = objectMapper.readTree(body); + + Map fieldMap = new HashMap<>(); + + if (jsonNode.isObject()) { + Iterator> fields = jsonNode.fields(); + while (fields.hasNext()) { + Map.Entry entry = fields.next(); + String fieldName = entry.getKey(); + String fieldValue = entry.getValue().asText(); + fieldMap.put(fieldName, fieldValue); + } + } + + return fieldMap; + } +} diff --git a/web-jakarta/src/main/java/com/web/LogoutServlet.java b/web-jakarta/src/main/java/com/web/LogoutServlet.java new file mode 100644 index 00000000..14400835 --- /dev/null +++ b/web-jakarta/src/main/java/com/web/LogoutServlet.java @@ -0,0 +1,16 @@ +package com.web; + +import jakarta.servlet.annotation.WebServlet; +import jakarta.servlet.http.HttpServlet; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; + +@WebServlet("/logout") +public class LogoutServlet extends HttpServlet { + + @Override + protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { + response.sendRedirect("/index"); + } +} diff --git a/web-jakarta/src/main/java/com/web/PXFilter.java b/web-jakarta/src/main/java/com/web/PXFilter.java new file mode 100644 index 00000000..0fd8e46f --- /dev/null +++ b/web-jakarta/src/main/java/com/web/PXFilter.java @@ -0,0 +1,87 @@ +package com.web; + +import com.perimeterx.api.PerimeterX; +import com.perimeterx.http.RequestWrapper; +import com.perimeterx.http.ResponseWrapper; +import com.perimeterx.models.PXContext; +import com.perimeterx.models.exceptions.PXException; + +import jakarta.servlet.*; +import jakarta.servlet.annotation.WebFilter; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.servlet.http.HttpServletResponseWrapper; +import java.io.IOException; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import static com.web.Utils.setDefaultPageAttributes; + +@WebFilter("/*") +public class PXFilter implements Filter { + private static final Logger log = LoggerFactory.getLogger(PXFilter.class); + + private PerimeterX pxFilter; + private Config config; + + public void init(FilterConfig filterConfig) { + try { + config = new Config(); + pxFilter = new PerimeterX(config.getPxConfiguration()); + log.info( + "PerimeterX enforcer initialized; java.version={} java.specification.version={} java.vm.name={} java.vm.version={}", + System.getProperty("java.version"), + System.getProperty("java.specification.version"), + System.getProperty("java.vm.name"), + System.getProperty("java.vm.version")); + + } catch (PXException e) { + e.printStackTrace(); + System.exit(1); + } + } + + public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { + try { + request = new RequestWrapper((HttpServletRequest) request); + + final PXContext context = pxFilter.pxVerify((HttpServletRequest) request, new HttpServletResponseWrapper((HttpServletResponse) response)); + + setDefaultPageAttributes((HttpServletRequest) request, config); + copyDataEnrichmentHeaderToResponse((HttpServletRequest) request, (HttpServletResponse) response); + + if (context == null || !context.isHandledResponse()) { + filterChain.doFilter(request, response); + } + + response = new ResponseWrapper((HttpServletResponse) response); + pxFilter.pxPostVerify((ResponseWrapper) response, context); + + } catch (PXException e) { + filterChain.doFilter(request, response); + } + + } + + @Override + public void destroy() { + try { + pxFilter.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void copyDataEnrichmentHeaderToResponse(HttpServletRequest request, HttpServletResponse response) { + String dataEnrichmentHeaderName = config.getPxConfiguration().getPxDataEnrichmentHeaderName(); + if (dataEnrichmentHeaderName == null || dataEnrichmentHeaderName.isEmpty()) { + return; + } + + String dataEnrichmentHeaderValue = request.getHeader(dataEnrichmentHeaderName); + if (dataEnrichmentHeaderValue != null && !dataEnrichmentHeaderValue.isEmpty()) { + response.setHeader(dataEnrichmentHeaderName, dataEnrichmentHeaderValue); + } + } +} diff --git a/web-jakarta/src/main/java/com/web/Utils.java b/web-jakarta/src/main/java/com/web/Utils.java new file mode 100644 index 00000000..8e2cd688 --- /dev/null +++ b/web-jakarta/src/main/java/com/web/Utils.java @@ -0,0 +1,103 @@ +package com.web; + +import com.google.gson.Gson; +import com.google.gson.JsonParseException; +import org.json.JSONArray; +import org.json.JSONObject; + +import jakarta.servlet.http.HttpServletRequest; + +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.*; + +import static com.web.Constants.*; + +public class Utils { + + public static Set jsonArrayToSet(JSONArray jsonArray) { + Set stringsSet = new HashSet<>(); + for (int i = 0; i < jsonArray.length(); i++) { + stringsSet.add(jsonArray.getString(i)); + } + return stringsSet; + } + + public static void setDefaultPageAttributes(HttpServletRequest request, Config config) { + final String appId = getAppId(); + request.setAttribute(APP_ID_KEY, appId); + request.setAttribute(SENSOR_SRC_KEY, "/" + getSensorSrc(appId, config)); + } + + private static String getAppId() { + try { + return getEnforcerConfig().getString(PX_APP_ID_FIELD); + } catch (Exception e) { + throw new RuntimeException("Failed to extract App ID from enforcer config", e); + } + } + + private static String getSensorSrc(String appId, Config config) { + if (config.getPxConfiguration().isFirstPartyEnabled()) { + return appId.replace(PX_PREFIX, "") + FIRST_PARTY_SENSOR_SUFFIX; + } + return String.format(THIRD_PARTY_SENSOR_URL_TEMPLATE, appId); + } + + public static JSONObject getEnforcerConfig() { + JSONObject fromClasspath = readEnforcerConfigFromClasspath(); + if (fromClasspath != null) { + return fromClasspath; + } + String filePath = legacyFilesystemConfigPath(); + JSONObject fromFile = readJsonFile(filePath); + if (fromFile != null) { + return fromFile; + } + throw new RuntimeException("Failed to load enforcer config '" + ENFORCER_CONFIG + JSON_SUFFIX + + "' from classpath or from path: " + filePath); + } + + /** + * Best-effort path used by legacy IDE/exploded layouts (not reliable inside a {@code .war}). + */ + public static String getEnforcerConfigPath() { + return legacyFilesystemConfigPath(); + } + + private static JSONObject readEnforcerConfigFromClasspath() { + try (InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(ENFORCER_CONFIG + JSON_SUFFIX)) { + if (is == null) { + return null; + } + try (Reader reader = new InputStreamReader(is, StandardCharsets.UTF_8)) { + return new JSONObject(new Gson().fromJson(reader, HashMap.class)); + } + } catch (Exception e) { + return null; + } + } + + private static String legacyFilesystemConfigPath() { + try { + return Objects.requireNonNull(Thread.currentThread().getContextClassLoader().getResource("")) + .getPath().replace(COMPILED_FILES_BASIC_PATH, "") + + RESOURCES_RELATIVE_PATH + ENFORCER_CONFIG + JSON_SUFFIX; + } catch (Exception e) { + return "(unknown)"; + } + } + + private static JSONObject readJsonFile(String path) { + try { + Reader reader = Files.newBufferedReader(Paths.get(path)); + return new JSONObject(new Gson().fromJson(reader, HashMap.class)); + } catch (Exception e) { + return null; + } + } +} diff --git a/web-jakarta/src/main/java/templates/index.template.jsp b/web-jakarta/src/main/java/templates/index.template.jsp new file mode 100644 index 00000000..9e0ddbb7 --- /dev/null +++ b/web-jakarta/src/main/java/templates/index.template.jsp @@ -0,0 +1,44 @@ + + + + PerimeterX Java SDK Sample + + + + + +
+
+
+ +
+
+
+ + + \ No newline at end of file diff --git a/web-jakarta/src/main/java/templates/profile.template.jsp b/web-jakarta/src/main/java/templates/profile.template.jsp new file mode 100644 index 00000000..7eb0efbc --- /dev/null +++ b/web-jakarta/src/main/java/templates/profile.template.jsp @@ -0,0 +1,39 @@ + + + + PerimeterX Login Successful + + + + + +
+
+

Hello, pxUser


+ +
+ +
+ + +
+ +
+ + \ No newline at end of file diff --git a/web-jakarta/src/main/resources/enforcer_config.json b/web-jakarta/src/main/resources/enforcer_config.json new file mode 100644 index 00000000..1459a145 --- /dev/null +++ b/web-jakarta/src/main/resources/enforcer_config.json @@ -0,0 +1,5 @@ +{ + "px_app_id": "PXJWbMQarF", + "px_auth_token": "", + "px_cookie_secret": "" +} \ No newline at end of file diff --git a/web-jakarta/src/main/resources/log4j2.xml b/web-jakarta/src/main/resources/log4j2.xml new file mode 100644 index 00000000..2a22c75e --- /dev/null +++ b/web-jakarta/src/main/resources/log4j2.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/web-jakarta/src/main/resources/style.css b/web-jakarta/src/main/resources/style.css new file mode 100644 index 00000000..e218f83a --- /dev/null +++ b/web-jakarta/src/main/resources/style.css @@ -0,0 +1,115 @@ +body { + background-color: #848484; +} + +.container { + margin-top:150px; +} + +.box { + margin: 0 auto; + padding-top:20px; + text-align: center; + color: white; + width:350px; + background-color: black; + border-radius: 12px; + height: 350px; + box-shadow: 3px 3px 3px #ED1C24; +} + +.login-box { + margin: 0 auto; + padding-top:20px; + text-align: center; + color: white; + background-color: black; + border-radius: 12px; + box-shadow: 3px 3px 3px #ED1C24; +} + +#logout { + margin-top:120px; +} + +#logout a { + color:black; + text-decoration: none; +} + +.form-signin +{ + max-width: 330px; + padding: 15px; + margin: 0 auto; +} +.form-signin .form-signin-heading, .form-signin .checkbox +{ + margin-bottom: 10px; +} +.form-signin .checkbox +{ + font-weight: normal; +} +.form-signin .form-control +{ + position: relative; + font-size: 16px; + height: auto; + padding: 10px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; +} +.form-signin .form-control:focus +{ + z-index: 2; +} +.form-signin input[type="text"] +{ + margin-bottom: -1px; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} +.form-signin input[type="password"] +{ + margin-bottom: 10px; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.account-wall +{ + margin-top: 20px; + padding: 40px 0px 20px 0px; + background-color: black; + -moz-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); + -webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); + box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3); + border-radius: 12px; +} +.login-title +{ + color: white; + font-size: 18px; + font-weight: 400; + display: block; +} +.profile-img +{ + width: 96px; + height: 96px; + margin: 0 auto 10px; + display: block; + -moz-border-radius: 50%; + -webkit-border-radius: 50%; + border-radius: 50%; +} +.need-help +{ + margin-top: 10px; +} +.new-account +{ + display: block; + margin-top: 10px; +} \ No newline at end of file diff --git a/web-jakarta/src/main/webapp/WEB-INF/web.xml b/web-jakarta/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 00000000..b378fa88 --- /dev/null +++ b/web-jakarta/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,7 @@ + + + diff --git a/web/pom.xml b/web/pom.xml index 6134691e..7139b319 100644 --- a/web/pom.xml +++ b/web/pom.xml @@ -8,9 +8,15 @@ com.web web 1.0.0 + war + + + 8 + 8 + 6.16.0 + - javax.servlet javax.servlet-api @@ -38,7 +44,6 @@ slf4j-log4j12 1.7.25 - org.apache.logging.log4j log4j-core @@ -46,6 +51,8 @@ + + ROOT maven-war-plugin @@ -62,10 +69,5 @@ - - 8 - 8 - 6.16.0 - diff --git a/web/src/main/java/com/web/IndexServlet.java b/web/src/main/java/com/web/IndexServlet.java index 205a3e3b..98670d15 100644 --- a/web/src/main/java/com/web/IndexServlet.java +++ b/web/src/main/java/com/web/IndexServlet.java @@ -7,7 +7,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; -@WebServlet("/") +@WebServlet(urlPatterns = {"/", "/index"}) public class IndexServlet extends HttpServlet { @Override diff --git a/web/src/main/java/com/web/LogoutServlet.java b/web/src/main/java/com/web/LogoutServlet.java index 2c525648..6cedafc4 100644 --- a/web/src/main/java/com/web/LogoutServlet.java +++ b/web/src/main/java/com/web/LogoutServlet.java @@ -11,6 +11,6 @@ public class LogoutServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { - response.sendRedirect("/index"); + response.sendRedirect(request.getContextPath() + "/"); } } diff --git a/web/src/main/java/com/web/PXFilter.java b/web/src/main/java/com/web/PXFilter.java index d9dc6508..2e05f319 100644 --- a/web/src/main/java/com/web/PXFilter.java +++ b/web/src/main/java/com/web/PXFilter.java @@ -13,10 +13,15 @@ import javax.servlet.http.HttpServletResponseWrapper; import java.io.IOException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import static com.web.Utils.setDefaultPageAttributes; @WebFilter("/*") public class PXFilter implements Filter { + private static final Logger log = LoggerFactory.getLogger(PXFilter.class); + private PerimeterX pxFilter; private Config config; @@ -24,6 +29,12 @@ public void init(FilterConfig filterConfig) { try { config = new Config(); pxFilter = new PerimeterX(config.getPxConfiguration()); + log.info( + "PerimeterX enforcer initialized; java.version={} java.specification.version={} java.vm.name={} java.vm.version={}", + System.getProperty("java.version"), + System.getProperty("java.specification.version"), + System.getProperty("java.vm.name"), + System.getProperty("java.vm.version")); } catch (PXException e) { e.printStackTrace(); @@ -40,7 +51,7 @@ public void doFilter(ServletRequest request, ServletResponse response, FilterCha setDefaultPageAttributes((HttpServletRequest) request, config); copyDataEnrichmentHeaderToResponse((HttpServletRequest) request, (HttpServletResponse) response); - if (context != null && context.isRequestLowScore()) { + if (context == null || !context.isHandledResponse()) { filterChain.doFilter(request, response); } diff --git a/web/src/main/java/com/web/Utils.java b/web/src/main/java/com/web/Utils.java index 21458372..70252b32 100644 --- a/web/src/main/java/com/web/Utils.java +++ b/web/src/main/java/com/web/Utils.java @@ -6,7 +6,11 @@ import org.json.JSONObject; import javax.servlet.http.HttpServletRequest; + +import java.io.InputStream; +import java.io.InputStreamReader; import java.io.Reader; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Paths; import java.util.*; @@ -15,7 +19,7 @@ public class Utils { - public static Set jsonArrayToSet(JSONArray jsonArray){ + public static Set jsonArrayToSet(JSONArray jsonArray) { Set stringsSet = new HashSet<>(); for (int i = 0; i < jsonArray.length(); i++) { stringsSet.add(jsonArray.getString(i)); @@ -30,38 +34,65 @@ public static void setDefaultPageAttributes(HttpServletRequest request, Config c } private static String getAppId() { - final String filePath = getEnforcerConfigPath(); try { - return (String) Objects.requireNonNull(readJsonFile(filePath)) - .get(PX_APP_ID_FIELD); - } catch (JsonParseException jpe) { - throw new RuntimeException("Failed to extract App ID from file :: " + filePath + ".\n Exception :: " + jpe); + return getEnforcerConfig().getString(PX_APP_ID_FIELD); + } catch (Exception e) { + throw new RuntimeException("Failed to extract App ID from enforcer config", e); } } private static String getSensorSrc(String appId, Config config) { if (config.getPxConfiguration().isFirstPartyEnabled()) { - return appId.replace(PX_PREFIX,"") + FIRST_PARTY_SENSOR_SUFFIX; + return appId.replace(PX_PREFIX, "") + FIRST_PARTY_SENSOR_SUFFIX; } - return String.format(THIRD_PARTY_SENSOR_URL_TEMPLATE,appId); + return String.format(THIRD_PARTY_SENSOR_URL_TEMPLATE, appId); } public static JSONObject getEnforcerConfig() { - final String filePath = getEnforcerConfigPath(); - try { - return readJsonFile(filePath); - } catch (JsonParseException jpe) { - throw new RuntimeException("Failed to extract config from file :: " + filePath + ".\n Exception :: " + jpe); + JSONObject fromClasspath = readEnforcerConfigFromClasspath(); + if (fromClasspath != null) { + return fromClasspath; + } + String filePath = legacyFilesystemConfigPath(); + JSONObject fromFile = readJsonFile(filePath); + if (fromFile != null) { + return fromFile; } + throw new RuntimeException("Failed to load enforcer config '" + ENFORCER_CONFIG + JSON_SUFFIX + + "' from classpath or from path: " + filePath); } + /** + * Best-effort path used by legacy IDE/exploded layouts (not reliable inside a {@code .war}). + */ public static String getEnforcerConfigPath() { - return Objects.requireNonNull(Thread.currentThread().getContextClassLoader().getResource("")) - .getPath().replace(COMPILED_FILES_BASIC_PATH,"") - + RESOURCES_RELATIVE_PATH + ENFORCER_CONFIG + JSON_SUFFIX; + return legacyFilesystemConfigPath(); + } + + private static JSONObject readEnforcerConfigFromClasspath() { + try (InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(ENFORCER_CONFIG + JSON_SUFFIX)) { + if (is == null) { + return null; + } + try (Reader reader = new InputStreamReader(is, StandardCharsets.UTF_8)) { + return new JSONObject(new Gson().fromJson(reader, HashMap.class)); + } + } catch (Exception e) { + return null; + } + } + + private static String legacyFilesystemConfigPath() { + try { + return Objects.requireNonNull(Thread.currentThread().getContextClassLoader().getResource("")) + .getPath().replace(COMPILED_FILES_BASIC_PATH, "") + + RESOURCES_RELATIVE_PATH + ENFORCER_CONFIG + JSON_SUFFIX; + } catch (Exception e) { + return "(unknown)"; + } } - private static JSONObject readJsonFile(String path){ + private static JSONObject readJsonFile(String path) { try { Reader reader = Files.newBufferedReader(Paths.get(path)); return new JSONObject(new Gson().fromJson(reader, HashMap.class)); diff --git a/web/src/main/webapp/WEB-INF/web.xml b/web/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 00000000..f8fe2aab --- /dev/null +++ b/web/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,7 @@ + + +