diff --git a/build.gradle.kts b/build.gradle.kts index 42bd6831..33f7b7d0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -64,6 +64,12 @@ subprojects { add("implementation", rootProject.libs.commons.lang3) { because("Force safe version of commons-lang3 across all modules") } + add("implementation", rootProject.libs.httpcore5) { + because("CVE-2026-54399: firebase-admin pulls in a vulnerable httpcore5") + } + add("implementation", rootProject.libs.httpcore5.h2) { + because("CVE-2026-54428: firebase-admin pulls in a vulnerable httpcore5-h2") + } } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 20453cfc..6f7ba155 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,28 +1,29 @@ [versions] project = "0.7.6" -gradle = "8.14" -kotlin = "1.9.24" -radarCommons = "1.2.6" +gradle = "9.6.0" +kotlin = "2.3.20" +radarCommons = "1.2.8" confluent = "7.8.1" avro = "1.12.1" -# @pin Upgrade to 2.21.x requires kotlin v2 minimum -jackson = "2.20.2" -jacksonAnnotations = "2.20" -log4j2 = "2.23.1" +jackson = "2.21.7" +jacksonAnnotations = "2.21" +log4j2 = "2.25.5" slf4j = "2.0.17" sentryLog4j = "1.7.30" sentryOpenTelemetryAgent = "8.36.0" # @pin Upgrade to 5.x.x requires kotlin v2 minimum okhttp = "4.12.0" -firebaseAdmin = "9.8.0" -radarSchemas = "0.8.18" +firebaseAdmin = "9.11.0" +radarSchemas = "0.9.2" # @pin Upgrade to 3.x.x requires kotlin v2 minimum ktor = "2.3.13" -wiremock = "3.0.1" +wiremock = "3.13.2" mockito = "5.23.0" -netty = "4.2.10.Final" +netty = "4.2.17.Final" +# Forced transitive override for firebase-admin, see build.gradle.kts. +httpcore5 = "5.4.3" commonsLang3 = "3.20.0" -lz4 = "1.10.1" +lz4 = "1.11.4" [libraries] lz4 = { module = "at.yawk.lz4:lz4-java", version.ref = "lz4" } @@ -52,7 +53,9 @@ netty-handler-proxy = { module = "io.netty:netty-handler-proxy", version.ref = " netty-handler = { module = "io.netty:netty-handler", version.ref = "netty" } commons-lang3 = { module = "org.apache.commons:commons-lang3", version.ref = "commonsLang3" } mockito-core = { module = "org.mockito:mockito-core", version.ref = "mockito" } -wiremock = { module = "com.github.tomakehurst:wiremock", version.ref = "wiremock" } +wiremock = { module = "org.wiremock:wiremock", version.ref = "wiremock" } +httpcore5 = { module = "org.apache.httpcomponents.core5:httpcore5", version.ref = "httpcore5" } +httpcore5-h2 = { module = "org.apache.httpcomponents.core5:httpcore5-h2", version.ref = "httpcore5" } kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test", version.ref = "kotlin" } kotlin-test-junit = { module = "org.jetbrains.kotlin:kotlin-test-junit", version.ref = "kotlin" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7f93135c..b1b8ef56 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ca025c83..eb84db68 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,9 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.6.0-bin.zip networkTimeout=10000 +retries=0 +retryBackOffMs=500 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 1aa94a42..249efbb0 100755 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ #!/bin/sh # -# Copyright © 2015-2021 the original authors. +# Copyright © 2015 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -15,10 +15,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # -# Gradle start up script for POSIX generated by Gradle. +# gradlew start up script for POSIX generated by Gradle. # # Important for running: # @@ -27,7 +29,7 @@ # bash, then to run this script, type that shell name before the whole # command line, like: # -# ksh Gradle +# ksh gradlew # # Busybox and similar reduced shells will NOT work, because this script # requires all of these POSIX shell features: @@ -55,7 +57,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. @@ -84,7 +86,7 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -112,7 +114,6 @@ case "$( uname )" in #( NONSTOP* ) nonstop=true ;; esac -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -170,7 +171,6 @@ fi # For Cygwin or MSYS, switch paths to Windows format before running java if "$cygwin" || "$msys" ; then APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) - CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) JAVACMD=$( cygpath --unix "$JAVACMD" ) @@ -203,15 +203,14 @@ fi DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Collect all arguments for the java command: -# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, # and any embedded shellness will be escaped. # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be # treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ - -classpath "$CLASSPATH" \ - org.gradle.wrapper.GradleWrapperMain \ + -jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \ "$@" # Stop when "xargs" is not available. diff --git a/gradlew.bat b/gradlew.bat index 6689b85b..8508ef68 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,16 +13,18 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem -@rem Gradle startup script for Windows +@rem gradlew startup script for Windows @rem @rem ########################################################################## -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal +@rem Set local scope for the variables, and ensure extensions are enabled +setlocal EnableExtensions set DIRNAME=%~dp0 if "%DIRNAME%"=="" set DIRNAME=. @@ -43,13 +45,13 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 -goto fail +"%COMSPEC%" /c exit 1 :findJavaFromJavaHome set JAVA_HOME=%JAVA_HOME:"=% @@ -57,36 +59,24 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 -goto fail +"%COMSPEC%" /c exit 1 :execute @rem Setup the command line -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* - -:end -@rem End local scope for the variables with windows NT shell -if %ERRORLEVEL% equ 0 goto mainEnd -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -set EXIT_CODE=%ERRORLEVEL% -if %EXIT_CODE% equ 0 set EXIT_CODE=1 -if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% -exit /b %EXIT_CODE% -:mainEnd -if "%OS%"=="Windows_NT" endlocal +@rem Execute gradlew +@rem endlocal doesn't take effect until after the line is parsed and variables are expanded +@rem which allows us to clear the local environment before executing the java command +endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel -:omega +:exitWithErrorLevel +@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts +"%COMSPEC%" /c exit %ERRORLEVEL% diff --git a/kafka-connect-fitbit-source/Dockerfile b/kafka-connect-fitbit-source/Dockerfile index ca5fe3e7..38e84b1e 100644 --- a/kafka-connect-fitbit-source/Dockerfile +++ b/kafka-connect-fitbit-source/Dockerfile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM --platform=$BUILDPLATFORM gradle:8.14-jdk17 AS builder +FROM --platform=$BUILDPLATFORM gradle:9.6.0-jdk17 AS builder RUN mkdir /code WORKDIR /code @@ -25,6 +25,9 @@ COPY ./build.gradle.kts ./settings.gradle.kts ./gradle.properties /code/ COPY kafka-connect-rest-source/build.gradle.kts /code/kafka-connect-rest-source/ COPY kafka-connect-fitbit-source/build.gradle.kts /code/kafka-connect-fitbit-source/ +# Gradle 9 requires the directory of every included project to exist. +RUN mkdir -p /code/kafka-connect-oura-source /code/oura-library + RUN gradle downloadDependencies copyDependencies COPY ./kafka-connect-rest-source/src/ /code/kafka-connect-rest-source/src diff --git a/kafka-connect-oura-source/Dockerfile b/kafka-connect-oura-source/Dockerfile index b5d87718..bae7eece 100644 --- a/kafka-connect-oura-source/Dockerfile +++ b/kafka-connect-oura-source/Dockerfile @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM --platform=$BUILDPLATFORM gradle:8.14-jdk17 AS builder +FROM --platform=$BUILDPLATFORM gradle:9.6.0-jdk17 AS builder RUN mkdir /code WORKDIR /code @@ -25,6 +25,9 @@ COPY ./build.gradle.kts ./settings.gradle.kts ./gradle.properties /code/ COPY kafka-connect-oura-source/build.gradle.kts /code/kafka-connect-oura-source/ COPY oura-library/build.gradle /code/oura-library/ +# Gradle 9 requires the directory of every included project to exist. +RUN mkdir -p /code/kafka-connect-fitbit-source /code/kafka-connect-rest-source + RUN gradle downloadDependencies copyDependencies COPY ./kafka-connect-oura-source/src/ /code/kafka-connect-oura-source/src diff --git a/scripts/REDCAP-FITBIT-AUTH-AUTO/requirements.txt b/scripts/REDCAP-FITBIT-AUTH-AUTO/requirements.txt index 4e31460f..b65c2b66 100644 --- a/scripts/REDCAP-FITBIT-AUTH-AUTO/requirements.txt +++ b/scripts/REDCAP-FITBIT-AUTH-AUTO/requirements.txt @@ -2,8 +2,8 @@ certifi==2018.10.15 chardet==3.0.4 idna==2.7 PyCap==1.0.2 -PyYAML==5.3.1 -requests==2.22.0 +PyYAML==5.4 +requests==2.25.1 selenium==3.14.1 semantic-version==2.3.1 -urllib3==1.25.9 +urllib3==1.26.20