diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 0bd0ee062..f36e6e579 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1 +1,7 @@ -Fixes # (it's a good idea to open an issue first for context and/or discussion) \ No newline at end of file +Thank you for opening a Pull Request! Before submitting your PR, there are a few things you can do to make sure it goes smoothly: +- [ ] Make sure to open an issue as a [bug/issue](https://github.com/googleapis/google-http-java-client/issues/new/choose) before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea +- [ ] Ensure the tests and linter pass +- [ ] Code coverage does not decrease (if any source code was changed) +- [ ] Appropriate docs were updated (if necessary) + +Fixes # ☕️ diff --git a/.github/trusted-contribution.yml b/.github/trusted-contribution.yml new file mode 100644 index 000000000..f247d5c78 --- /dev/null +++ b/.github/trusted-contribution.yml @@ -0,0 +1,2 @@ +trustedContributors: +- renovate-bot \ No newline at end of file diff --git a/.kokoro/build.sh b/.kokoro/build.sh index f1ae58408..164a94c1a 100755 --- a/.kokoro/build.sh +++ b/.kokoro/build.sh @@ -20,36 +20,45 @@ scriptDir=$(realpath $(dirname "${BASH_SOURCE[0]}")) ## cd to the parent directory, i.e. the root of the git repo cd ${scriptDir}/.. +# include common functions +source ${scriptDir}/common.sh + # Print out Java version java -version echo ${JOB_TYPE} -mvn install -B -V \ - -DskipTests=true \ - -Dclirr.skip=true \ - -Denforcer.skip=true \ - -Dmaven.javadoc.skip=true \ - -Dgcloud.download.skip=true \ - -T 1C +# attempt to install 3 times with exponential backoff (starting with 10 seconds) +retry_with_backoff 3 10 \ + mvn install -B -V \ + -DskipTests=true \ + -Dclirr.skip=true \ + -Denforcer.skip=true \ + -Dmaven.javadoc.skip=true \ + -Dgcloud.download.skip=true \ + -T 1C # if GOOGLE_APPLICATION_CREDIENTIALS is specified as a relative path prepend Kokoro root directory onto it if [[ ! -z "${GOOGLE_APPLICATION_CREDENTIALS}" && "${GOOGLE_APPLICATION_CREDENTIALS}" != /* ]]; then export GOOGLE_APPLICATION_CREDENTIALS=$(realpath ${KOKORO_ROOT}/src/${GOOGLE_APPLICATION_CREDENTIALS}) fi +RETURN_CODE=0 +set +e + case ${JOB_TYPE} in test) mvn test -B -Dclirr.skip=true -Denforcer.skip=true - bash ${KOKORO_GFILE_DIR}/codecov.sh - bash .kokoro/coerce_logs.sh + RETURN_CODE=$? ;; lint) mvn \ -Penable-samples \ com.coveo:fmt-maven-plugin:check + RETURN_CODE=$? ;; javadoc) mvn javadoc:javadoc javadoc:test-javadoc + RETURN_CODE=$? ;; integration) mvn -B ${INTEGRATION_TEST_ARGS} \ @@ -59,21 +68,46 @@ integration) -Denforcer.skip=true \ -fae \ verify - bash .kokoro/coerce_logs.sh + RETURN_CODE=$? ;; samples) - mvn -B \ - -Penable-samples \ - -DtrimStackTrace=false \ - -Dclirr.skip=true \ - -Denforcer.skip=true \ - -fae \ - verify - bash .kokoro/coerce_logs.sh + if [[ -f samples/pom.xml ]] + then + pushd samples + mvn -B \ + -Penable-samples \ + -DtrimStackTrace=false \ + -Dclirr.skip=true \ + -Denforcer.skip=true \ + -fae \ + verify + RETURN_CODE=$? + popd + else + echo "no sample pom.xml found - skipping sample tests" + fi ;; clirr) mvn -B -Denforcer.skip=true clirr:check + RETURN_CODE=$? ;; *) ;; esac + +if [ "${REPORT_COVERAGE}" == "true" ] +then + bash ${KOKORO_GFILE_DIR}/codecov.sh +fi + +# fix output location of logs +bash .kokoro/coerce_logs.sh + +if [[ "${ENABLE_BUILD_COP}" == "true" ]] +then + chmod +x ${KOKORO_GFILE_DIR}/linux_amd64/buildcop + ${KOKORO_GFILE_DIR}/linux_amd64/buildcop -repo=googleapis/google-http-java-client +fi + +echo "exiting with ${RETURN_CODE}" +exit ${RETURN_CODE} diff --git a/.kokoro/common.sh b/.kokoro/common.sh new file mode 100644 index 000000000..8f09de5d3 --- /dev/null +++ b/.kokoro/common.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# Copyright 2020 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +function retry_with_backoff { + attempts_left=$1 + sleep_seconds=$2 + shift 2 + command=$@ + + + # store current flag state + flags=$- + + # allow a failures to continue + set +e + echo "${command}" + ${command} + exit_code=$? + + # restore "e" flag + if [[ ${flags} =~ e ]] + then set -e + else set +e + fi + + if [[ $exit_code == 0 ]] + then + return 0 + fi + + # failure + if [[ ${attempts_left} > 0 ]] + then + echo "failure (${exit_code}), sleeping ${sleep_seconds}..." + sleep ${sleep_seconds} + new_attempts=$((${attempts_left} - 1)) + new_sleep=$((${sleep_seconds} * 2)) + retry_with_backoff ${new_attempts} ${new_sleep} ${command} + fi + + return $exit_code +} diff --git a/.kokoro/continuous/java8.cfg b/.kokoro/continuous/java8.cfg index 3b017fc80..495cc7bac 100644 --- a/.kokoro/continuous/java8.cfg +++ b/.kokoro/continuous/java8.cfg @@ -5,3 +5,8 @@ env_vars: { key: "TRAMPOLINE_IMAGE" value: "gcr.io/cloud-devrel-kokoro-resources/java8" } + +env_vars: { + key: "REPORT_COVERAGE" + value: "true" +} diff --git a/.kokoro/dependencies.sh b/.kokoro/dependencies.sh index ccd3fe690..0aade871c 100755 --- a/.kokoro/dependencies.sh +++ b/.kokoro/dependencies.sh @@ -15,7 +15,13 @@ set -eo pipefail -cd github/google-http-java-client/ +## Get the directory of the build script +scriptDir=$(realpath $(dirname "${BASH_SOURCE[0]}")) +## cd to the parent directory, i.e. the root of the git repo +cd ${scriptDir}/.. + +# include common functions +source ${scriptDir}/common.sh # Print out Java java -version @@ -24,8 +30,9 @@ echo $JOB_TYPE export MAVEN_OPTS="-Xmx1024m -XX:MaxPermSize=128m" # this should run maven enforcer -mvn install -B -V \ - -DskipTests=true \ - -Dclirr.skip=true +retry_with_backoff 3 10 \ + mvn install -B -V \ + -DskipTests=true \ + -Dclirr.skip=true mvn -B dependency:analyze -DfailOnWarning=true diff --git a/.kokoro/linkage-monitor.sh b/.kokoro/linkage-monitor.sh index 5b1b65516..759ab4e2c 100755 --- a/.kokoro/linkage-monitor.sh +++ b/.kokoro/linkage-monitor.sh @@ -17,13 +17,26 @@ set -eo pipefail # Display commands being run. set -x -cd github/google-http-java-client/ +## Get the directory of the build script +scriptDir=$(realpath $(dirname "${BASH_SOURCE[0]}")) +## cd to the parent directory, i.e. the root of the git repo +cd ${scriptDir}/.. + +# include common functions +source ${scriptDir}/common.sh # Print out Java version java -version echo ${JOB_TYPE} -mvn install -DskipTests=true -Dmaven.javadoc.skip=true -Dgcloud.download.skip=true -B -V +# attempt to install 3 times with exponential backoff (starting with 10 seconds) +retry_with_backoff 3 10 \ + mvn install -B -V \ + -DskipTests=true \ + -Dclirr.skip=true \ + -Denforcer.skip=true \ + -Dmaven.javadoc.skip=true \ + -Dgcloud.download.skip=true # Kokoro job cloud-opensource-java/ubuntu/linkage-monitor-gcs creates this JAR JAR=linkage-monitor-latest-all-deps.jar diff --git a/.kokoro/nightly/integration.cfg b/.kokoro/nightly/integration.cfg index 3b017fc80..ca0274800 100644 --- a/.kokoro/nightly/integration.cfg +++ b/.kokoro/nightly/integration.cfg @@ -5,3 +5,32 @@ env_vars: { key: "TRAMPOLINE_IMAGE" value: "gcr.io/cloud-devrel-kokoro-resources/java8" } + +env_vars: { + key: "JOB_TYPE" + value: "integration" +} + +env_vars: { + key: "GCLOUD_PROJECT" + value: "gcloud-devel" +} + +env_vars: { + key: "ENABLE_BUILD_COP" + value: "true" +} + +env_vars: { + key: "GOOGLE_APPLICATION_CREDENTIALS" + value: "keystore/73713_java_it_service_account" +} + +before_action { + fetch_keystore { + keystore_resource { + keystore_config_id: 73713 + keyname: "java_it_service_account" + } + } +} diff --git a/.kokoro/nightly/java8.cfg b/.kokoro/nightly/java8.cfg index 3b017fc80..495cc7bac 100644 --- a/.kokoro/nightly/java8.cfg +++ b/.kokoro/nightly/java8.cfg @@ -5,3 +5,8 @@ env_vars: { key: "TRAMPOLINE_IMAGE" value: "gcr.io/cloud-devrel-kokoro-resources/java8" } + +env_vars: { + key: "REPORT_COVERAGE" + value: "true" +} diff --git a/.kokoro/nightly/samples.cfg b/.kokoro/nightly/samples.cfg index 9a9102490..b4b051cd0 100644 --- a/.kokoro/nightly/samples.cfg +++ b/.kokoro/nightly/samples.cfg @@ -2,23 +2,28 @@ # Configure the docker image for kokoro-trampoline. env_vars: { - key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java8" + key: "TRAMPOLINE_IMAGE" + value: "gcr.io/cloud-devrel-kokoro-resources/java8" } env_vars: { - key: "JOB_TYPE" - value: "samples" + key: "JOB_TYPE" + value: "samples" } env_vars: { - key: "GCLOUD_PROJECT" - value: "gcloud-devel" + key: "GCLOUD_PROJECT" + value: "gcloud-devel" } env_vars: { - key: "GOOGLE_APPLICATION_CREDENTIALS" - value: "keystore/73713_java_it_service_account" + key: "GOOGLE_APPLICATION_CREDENTIALS" + value: "keystore/73713_java_it_service_account" +} + +env_vars: { + key: "ENABLE_BUILD_COP" + value: "true" } before_action { diff --git a/.kokoro/presubmit/java8.cfg b/.kokoro/presubmit/java8.cfg index 3b017fc80..495cc7bac 100644 --- a/.kokoro/presubmit/java8.cfg +++ b/.kokoro/presubmit/java8.cfg @@ -5,3 +5,8 @@ env_vars: { key: "TRAMPOLINE_IMAGE" value: "gcr.io/cloud-devrel-kokoro-resources/java8" } + +env_vars: { + key: "REPORT_COVERAGE" + value: "true" +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 90bfb1e0b..f7ea60f05 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,38 @@ # Changelog +## [1.35.0](https://www.github.com/googleapis/google-http-java-client/compare/v1.34.2...v1.35.0) (2020-04-27) + + +### Features + +* add logic for verifying ES256 JsonWebSignatures ([#1033](https://www.github.com/googleapis/google-http-java-client/issues/1033)) ([bb4227f](https://www.github.com/googleapis/google-http-java-client/commit/bb4227f9daec44fc2976fa9947e2ff5ee07ed21a)) + + +### Bug Fixes + +* add linkage monitor plugin ([#1000](https://www.github.com/googleapis/google-http-java-client/issues/1000)) ([027c227](https://www.github.com/googleapis/google-http-java-client/commit/027c227e558164f77be204152fb47023850b543f)) +* Correctly handling chunked response streams with gzip ([#990](https://www.github.com/googleapis/google-http-java-client/issues/990)) ([1ba2197](https://www.github.com/googleapis/google-http-java-client/commit/1ba219743e65c89bc3fdb196acc5d2042e01f542)), closes [#367](https://www.github.com/googleapis/google-http-java-client/issues/367) +* FileDataStoreFactory will throw IOException for any permissions errors ([#1012](https://www.github.com/googleapis/google-http-java-client/issues/1012)) ([fd33073](https://www.github.com/googleapis/google-http-java-client/commit/fd33073da3674997897d7a9057d1d0e9d42d7cd4)) +* include request method and URL into HttpResponseException message ([#1002](https://www.github.com/googleapis/google-http-java-client/issues/1002)) ([15111a1](https://www.github.com/googleapis/google-http-java-client/commit/15111a1001d6f72cb92cd2d76aaed6f1229bc14a)) +* incorrect check for Windows OS in FileDataStoreFactory ([#927](https://www.github.com/googleapis/google-http-java-client/issues/927)) ([8b4eabe](https://www.github.com/googleapis/google-http-java-client/commit/8b4eabe985794fc64ad6a4a53f8f96201cf73fb8)) +* reuse reference instead of calling getter twice ([#983](https://www.github.com/googleapis/google-http-java-client/issues/983)) ([1f66222](https://www.github.com/googleapis/google-http-java-client/commit/1f662224d7bee6e27e8d66975fda39feae0c9359)), closes [#982](https://www.github.com/googleapis/google-http-java-client/issues/982) +* **android:** set minimum API level to 19 a.k.a. 4.4 Kit Kat ([#1016](https://www.github.com/googleapis/google-http-java-client/issues/1016)) ([b9a8023](https://www.github.com/googleapis/google-http-java-client/commit/b9a80232c9c8b16a3c3277458835f72e346f6b2c)), closes [#1015](https://www.github.com/googleapis/google-http-java-client/issues/1015) + + +### Documentation + +* android 4.4 or later is required ([#1008](https://www.github.com/googleapis/google-http-java-client/issues/1008)) ([bcc41dd](https://www.github.com/googleapis/google-http-java-client/commit/bcc41dd615af41ae6fb58287931cbf9c2144a075)) +* libraries-bom 4.0.1 ([#976](https://www.github.com/googleapis/google-http-java-client/issues/976)) ([fc21dc4](https://www.github.com/googleapis/google-http-java-client/commit/fc21dc412566ef60d23f1f82db5caf3cfd5d447b)) +* libraries-bom 4.1.1 ([#984](https://www.github.com/googleapis/google-http-java-client/issues/984)) ([635c813](https://www.github.com/googleapis/google-http-java-client/commit/635c81352ae383b3abfe6d7c141d987a6944b3e9)) +* libraries-bom 5.2.0 ([#1032](https://www.github.com/googleapis/google-http-java-client/issues/1032)) ([ca34202](https://www.github.com/googleapis/google-http-java-client/commit/ca34202bfa077adb70313b6c4562c7a5d904e064)) +* require Android 4.4 ([#1007](https://www.github.com/googleapis/google-http-java-client/issues/1007)) ([f9d2bb0](https://www.github.com/googleapis/google-http-java-client/commit/f9d2bb030398fe09e3c47b84ea468603355e08e9)) + + +### Dependencies + +* httpclient 4.5.12 ([#991](https://www.github.com/googleapis/google-http-java-client/issues/991)) ([79bc1c7](https://www.github.com/googleapis/google-http-java-client/commit/79bc1c76ebd48d396a080ef715b9f07cd056b7ef)) +* update to Guava 29 ([#1024](https://www.github.com/googleapis/google-http-java-client/issues/1024)) ([ca9520f](https://www.github.com/googleapis/google-http-java-client/commit/ca9520f2da4babc5bbd28c828da1deb7dbdc87e5)) + ### [1.34.2](https://www.github.com/googleapis/google-http-java-client/compare/v1.34.1...v1.34.2) (2020-02-12) diff --git a/README.md b/README.md index 5b5d4f1c2..de94456a2 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,8 @@ content. The JSON and XML libraries are also fully pluggable, and they include s The library supports the following Java environments: -- Java 7 (or higher) -- Android 4.0 (Ice Cream Sandwich) (or higher) +- Java 7 or higher +- Android 4.4 (Kit Kat) - GoogleAppEngine Google App Engine The following related projects are built on the Google HTTP Client Library for Java: diff --git a/docs/index.md b/docs/index.md index 5eb9ff04b..e6162bd8d 100644 --- a/docs/index.md +++ b/docs/index.md @@ -18,8 +18,8 @@ content. The JSON and XML libraries are also fully pluggable, and they include s The library supports the following Java environments: -- Java 7 (or higher) -- Android 4.0 (Ice Cream Sandwich) (or higher) +- Java 7 or higher +- Android 4.4 (Kit Kat) or higher - Google App Engine The following related projects are built on the Google HTTP Client Library for Java: diff --git a/docs/setup.md b/docs/setup.md index b77577572..2f3dc9258 100644 --- a/docs/setup.md +++ b/docs/setup.md @@ -23,7 +23,7 @@ the `dependencyManagement` section of your `pom.xml`: com.google.cloud libraries-bom - 4.0.0 + 5.2.0 pom import diff --git a/google-http-client-android-test/pom.xml b/google-http-client-android-test/pom.xml index 9e3dc9569..1946c910f 100644 --- a/google-http-client-android-test/pom.xml +++ b/google-http-client-android-test/pom.xml @@ -4,7 +4,7 @@ google-http-client google-http-client-android-test Test project for google-http-client-android. - 1.34.2 + 1.35.0 apk @@ -53,7 +53,7 @@ com.google.http-client google-http-client-android - 1.34.2 + 1.35.0 android @@ -72,7 +72,7 @@ com.google.http-client google-http-client-test - 1.34.2 + 1.35.0 junit diff --git a/google-http-client-android/AndroidManifest.xml b/google-http-client-android/AndroidManifest.xml index 9dc775d49..32d176f23 100644 --- a/google-http-client-android/AndroidManifest.xml +++ b/google-http-client-android/AndroidManifest.xml @@ -5,7 +5,7 @@ android:versionName="1.0" > + android:minSdkVersion="19" + android:targetSdkVersion="19" /> - \ No newline at end of file + diff --git a/google-http-client-android/pom.xml b/google-http-client-android/pom.xml index 6a474c559..391cf0a22 100644 --- a/google-http-client-android/pom.xml +++ b/google-http-client-android/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.34.2 + 1.35.0 ../pom.xml google-http-client-android - 1.34.2 + 1.35.0 Android Platform Extensions to the Google HTTP Client Library for Java. @@ -48,15 +48,15 @@ + + com.google.http-client + google-http-client + com.google.android android 4.1.1.4 provided - - com.google.http-client - google-http-client - diff --git a/google-http-client-apache-v2/pom.xml b/google-http-client-apache-v2/pom.xml index 2db004ef0..59c6930be 100644 --- a/google-http-client-apache-v2/pom.xml +++ b/google-http-client-apache-v2/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.34.2 + 1.35.0 ../pom.xml google-http-client-apache-v2 - 1.34.2 + 1.35.0 Apache HTTP transport v2 for the Google HTTP Client Library for Java. @@ -38,7 +38,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.0.0 + 3.1.0 add-test-source diff --git a/google-http-client-appengine/pom.xml b/google-http-client-appengine/pom.xml index d791810ad..7b3e610a6 100644 --- a/google-http-client-appengine/pom.xml +++ b/google-http-client-appengine/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.34.2 + 1.35.0 ../pom.xml google-http-client-appengine - 1.34.2 + 1.35.0 Google App Engine extensions to the Google HTTP Client Library for Java. diff --git a/google-http-client-assembly/pom.xml b/google-http-client-assembly/pom.xml index 3ab6bff00..0cbdbff0c 100644 --- a/google-http-client-assembly/pom.xml +++ b/google-http-client-assembly/pom.xml @@ -4,12 +4,12 @@ com.google.http-client google-http-client-parent - 1.34.2 + 1.35.0 ../pom.xml com.google.http-client google-http-client-assembly - 1.34.2 + 1.35.0 pom Assembly for the Google HTTP Client Library for Java diff --git a/google-http-client-bom/pom.xml b/google-http-client-bom/pom.xml index a8796f688..503118432 100644 --- a/google-http-client-bom/pom.xml +++ b/google-http-client-bom/pom.xml @@ -3,7 +3,7 @@ 4.0.0 com.google.http-client google-http-client-bom - 1.34.2 + 1.35.0 pom Google HTTP Client Library for Java BOM @@ -63,52 +63,52 @@ com.google.http-client google-http-client - 1.34.2 + 1.35.0 com.google.http-client google-http-client-android - 1.34.2 + 1.35.0 com.google.http-client google-http-client-apache-v2 - 1.34.2 + 1.35.0 com.google.http-client google-http-client-appengine - 1.34.2 + 1.35.0 com.google.http-client google-http-client-findbugs - 1.34.2 + 1.35.0 com.google.http-client google-http-client-gson - 1.34.2 + 1.35.0 com.google.http-client google-http-client-jackson2 - 1.34.2 + 1.35.0 com.google.http-client google-http-client-protobuf - 1.34.2 + 1.35.0 com.google.http-client google-http-client-test - 1.34.2 + 1.35.0 com.google.http-client google-http-client-xml - 1.34.2 + 1.35.0 @@ -128,7 +128,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.1.1 + 3.2.0 true @@ -136,7 +136,7 @@ org.apache.maven.plugins maven-site-plugin - 3.8.2 + 3.9.0 true diff --git a/google-http-client-findbugs/pom.xml b/google-http-client-findbugs/pom.xml index e9e33e565..5a7bdf120 100644 --- a/google-http-client-findbugs/pom.xml +++ b/google-http-client-findbugs/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.34.2 + 1.35.0 ../pom.xml google-http-client-findbugs - 1.34.2 + 1.35.0 Google APIs Client Library Findbugs custom plugin. diff --git a/google-http-client-gson/pom.xml b/google-http-client-gson/pom.xml index 463c9feda..07abaf4f0 100644 --- a/google-http-client-gson/pom.xml +++ b/google-http-client-gson/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.34.2 + 1.35.0 ../pom.xml google-http-client-gson - 1.34.2 + 1.35.0 GSON extensions to the Google HTTP Client Library for Java. @@ -39,7 +39,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.0.0 + 3.1.0 add-test-source diff --git a/google-http-client-jackson2/pom.xml b/google-http-client-jackson2/pom.xml index e3c9ba349..c33bc2edb 100644 --- a/google-http-client-jackson2/pom.xml +++ b/google-http-client-jackson2/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.34.2 + 1.35.0 ../pom.xml google-http-client-jackson2 - 1.34.2 + 1.35.0 Jackson 2 extensions to the Google HTTP Client Library for Java. @@ -39,7 +39,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.0.0 + 3.1.0 add-test-source diff --git a/google-http-client-protobuf/pom.xml b/google-http-client-protobuf/pom.xml index 11cfa76fc..96d74fda3 100644 --- a/google-http-client-protobuf/pom.xml +++ b/google-http-client-protobuf/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.34.2 + 1.35.0 ../pom.xml google-http-client-protobuf - 1.34.2 + 1.35.0 Protocol Buffer extensions to the Google HTTP Client Library for Java. diff --git a/google-http-client-test/pom.xml b/google-http-client-test/pom.xml index d2c9dc1c8..739364a99 100644 --- a/google-http-client-test/pom.xml +++ b/google-http-client-test/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.34.2 + 1.35.0 ../pom.xml google-http-client-test - 1.34.2 + 1.35.0 Shared classes used for testing of artifacts in the Google HTTP Client Library for Java. @@ -38,7 +38,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.0.0 + 3.1.0 add-test-source diff --git a/google-http-client-xml/pom.xml b/google-http-client-xml/pom.xml index ac1cb4a7b..aa8ce7c08 100644 --- a/google-http-client-xml/pom.xml +++ b/google-http-client-xml/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.34.2 + 1.35.0 ../pom.xml google-http-client-xml - 1.34.2 + 1.35.0 XML extensions to the Google HTTP Client Library for Java. @@ -38,7 +38,7 @@ org.codehaus.mojo build-helper-maven-plugin - 3.0.0 + 3.1.0 add-test-source diff --git a/google-http-client/pom.xml b/google-http-client/pom.xml index 1b033d480..dda3669b7 100644 --- a/google-http-client/pom.xml +++ b/google-http-client/pom.xml @@ -4,11 +4,11 @@ com.google.http-client google-http-client-parent - 1.34.2 + 1.35.0 ../pom.xml google-http-client - 1.34.2 + 1.35.0 Google HTTP Client Library for Java Google HTTP Client Library for Java. Functionality that works on all supported Java platforms, @@ -21,7 +21,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.1.1 + 3.1.2 io.opencensus:opencensus-impl diff --git a/google-http-client/src/main/java/com/google/api/client/http/HttpResponse.java b/google-http-client/src/main/java/com/google/api/client/http/HttpResponse.java index 3341720a6..276ce0e74 100644 --- a/google-http-client/src/main/java/com/google/api/client/http/HttpResponse.java +++ b/google-http-client/src/main/java/com/google/api/client/http/HttpResponse.java @@ -353,8 +353,13 @@ public InputStream getContent() throws IOException { if (!returnRawInputStream && this.contentEncoding != null) { String oontentencoding = this.contentEncoding.trim().toLowerCase(Locale.ENGLISH); if (CONTENT_ENCODING_GZIP.equals(oontentencoding) || CONTENT_ENCODING_XGZIP.equals(oontentencoding)) { + // Wrap the original stream in a ConsumingInputStream before passing it to + // GZIPInputStream. The GZIPInputStream leaves content unconsumed in the original + // stream (it almost always leaves the last chunk unconsumed in chunked responses). + // ConsumingInputStream ensures that any unconsumed bytes are read at close. + // GZIPInputStream.close() --> ConsumingInputStream.close() --> exhaust(ConsumingInputStream) lowLevelResponseContent = - new ConsumingInputStream(new GZIPInputStream(lowLevelResponseContent)); + new GZIPInputStream(new ConsumingInputStream(lowLevelResponseContent)); } } // logging (wrap content with LoggingInputStream) diff --git a/google-http-client/src/main/java/com/google/api/client/http/HttpResponseException.java b/google-http-client/src/main/java/com/google/api/client/http/HttpResponseException.java index 6e5349e18..a9d80a4f5 100644 --- a/google-http-client/src/main/java/com/google/api/client/http/HttpResponseException.java +++ b/google-http-client/src/main/java/com/google/api/client/http/HttpResponseException.java @@ -284,6 +284,17 @@ public static StringBuilder computeMessageBuffer(HttpResponse response) { } builder.append(statusMessage); } + HttpRequest request = response.getRequest(); + if (request != null) { + if (builder.length() > 0) { + builder.append('\n'); + } + String requestMethod = request.getRequestMethod(); + if (requestMethod != null) { + builder.append(requestMethod).append(' '); + } + builder.append(request.getUrl()); + } return builder; } } diff --git a/google-http-client/src/main/java/com/google/api/client/json/JsonParser.java b/google-http-client/src/main/java/com/google/api/client/json/JsonParser.java index 7ac07ff56..477640650 100644 --- a/google-http-client/src/main/java/com/google/api/client/json/JsonParser.java +++ b/google-http-client/src/main/java/com/google/api/client/json/JsonParser.java @@ -717,7 +717,7 @@ private final Object parseValue( // value type is now null, class, parameterized type, or generic array type JsonToken token = getCurrentToken(); try { - switch (getCurrentToken()) { + switch (token) { case START_ARRAY: case END_ARRAY: boolean isArray = Types.isArray(valueType); diff --git a/google-http-client/src/main/java/com/google/api/client/json/webtoken/DerEncoder.java b/google-http-client/src/main/java/com/google/api/client/json/webtoken/DerEncoder.java new file mode 100644 index 000000000..ce7c42f12 --- /dev/null +++ b/google-http-client/src/main/java/com/google/api/client/json/webtoken/DerEncoder.java @@ -0,0 +1,60 @@ +/* + * Copyright 2020 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.api.client.json.webtoken; + +import com.google.api.client.util.Preconditions; + +import java.math.BigInteger; +import java.util.Arrays; + +/** + * Utilities for re-encoding a signature byte array with DER encoding. + * + *

Note: that this is not a general purpose encoder and currently only + * handles 512 bit signatures. ES256 verification algorithms expect the + * signature bytes in DER encoding. + */ +public class DerEncoder { + private static byte DER_TAG_SIGNATURE_OBJECT = 0x30; + private static byte DER_TAG_ASN1_INTEGER = 0x02; + + static byte[] encode(byte[] signature) { + // expect the signature to be 64 bytes long + Preconditions.checkState(signature.length == 64); + + byte[] int1 = new BigInteger(1, Arrays.copyOfRange(signature, 0, 32)).toByteArray(); + byte[] int2 = new BigInteger(1, Arrays.copyOfRange(signature, 32, 64)).toByteArray(); + byte[] der = new byte[6 + int1.length + int2.length]; + + // Mark that this is a signature object + der[0] = DER_TAG_SIGNATURE_OBJECT; + der[1] = (byte) (der.length - 2); + + // Start ASN1 integer and write the first 32 bits + der[2] = DER_TAG_ASN1_INTEGER; + der[3] = (byte) int1.length; + System.arraycopy(int1, 0, der, 4, int1.length); + + // Start ASN1 integer and write the second 32 bits + int offset = int1.length + 4; + der[offset] = DER_TAG_ASN1_INTEGER; + der[offset + 1] = (byte) int2.length; + System.arraycopy(int2, 0, der, offset + 2, int2.length); + + return der; + } +} diff --git a/google-http-client/src/main/java/com/google/api/client/json/webtoken/JsonWebSignature.java b/google-http-client/src/main/java/com/google/api/client/json/webtoken/JsonWebSignature.java index 7e3990d40..aa21dbe2e 100644 --- a/google-http-client/src/main/java/com/google/api/client/json/webtoken/JsonWebSignature.java +++ b/google-http-client/src/main/java/com/google/api/client/json/webtoken/JsonWebSignature.java @@ -23,6 +23,7 @@ import com.google.api.client.util.StringUtils; import java.io.ByteArrayInputStream; import java.io.IOException; +import java.math.BigInteger; import java.security.GeneralSecurityException; import java.security.KeyStore; import java.security.KeyStoreException; @@ -349,30 +350,30 @@ public Header getHeader() { /** * Verifies the signature of the content. * - *

Currently only {@code "RS256"} algorithm is verified, but others may be added in the future. - * For any other algorithm it returns {@code false}. + *

Currently only {@code "RS256"} and {@code "ES256"} algorithms are verified, but others may be added in the + * future. For any other algorithm it returns {@code false}. * * @param publicKey public key * @return whether the algorithm is recognized and it is verified * @throws GeneralSecurityException */ public final boolean verifySignature(PublicKey publicKey) throws GeneralSecurityException { - Signature signatureAlg = null; String algorithm = getHeader().getAlgorithm(); if ("RS256".equals(algorithm)) { - signatureAlg = SecurityUtils.getSha256WithRsaSignatureAlgorithm(); + return SecurityUtils.verify(SecurityUtils.getSha256WithRsaSignatureAlgorithm(), publicKey, signatureBytes, signedContentBytes); + } else if ("ES256".equals(algorithm)) { + return SecurityUtils.verify(SecurityUtils.getEs256SignatureAlgorithm(), publicKey, DerEncoder.encode(signatureBytes), signedContentBytes); } else { return false; } - return SecurityUtils.verify(signatureAlg, publicKey, signatureBytes, signedContentBytes); } /** * {@link Beta}
* Verifies the signature of the content using the certificate chain embedded in the signature. * - *

Currently only {@code "RS256"} algorithm is verified, but others may be added in the future. - * For any other algorithm it returns {@code null}. + *

Currently only {@code "RS256"} and {@code "ES256"} algorithms are verified, but others may be added in the + * future. For any other algorithm it returns {@code null}. * *

The leaf certificate of the certificate chain must be an SSL server certificate. * @@ -390,14 +391,13 @@ public final X509Certificate verifySignature(X509TrustManager trustManager) return null; } String algorithm = getHeader().getAlgorithm(); - Signature signatureAlg = null; if ("RS256".equals(algorithm)) { - signatureAlg = SecurityUtils.getSha256WithRsaSignatureAlgorithm(); + return SecurityUtils.verify(SecurityUtils.getSha256WithRsaSignatureAlgorithm(), trustManager, x509Certificates, signatureBytes, signedContentBytes); + } else if ("ES256".equals(algorithm)) { + return SecurityUtils.verify(SecurityUtils.getEs256SignatureAlgorithm(), trustManager, x509Certificates, DerEncoder.encode(signatureBytes), signedContentBytes); } else { return null; } - return SecurityUtils.verify( - signatureAlg, trustManager, x509Certificates, signatureBytes, signedContentBytes); } /** diff --git a/google-http-client/src/main/java/com/google/api/client/util/SecurityUtils.java b/google-http-client/src/main/java/com/google/api/client/util/SecurityUtils.java index 59d3af24e..cf08e03ad 100644 --- a/google-http-client/src/main/java/com/google/api/client/util/SecurityUtils.java +++ b/google-http-client/src/main/java/com/google/api/client/util/SecurityUtils.java @@ -127,6 +127,11 @@ public static Signature getSha256WithRsaSignatureAlgorithm() throws NoSuchAlgori return Signature.getInstance("SHA256withRSA"); } + /** Returns the SHA-256 with ECDSA signature algorithm */ + public static Signature getEs256SignatureAlgorithm() throws NoSuchAlgorithmException { + return Signature.getInstance("SHA256withECDSA"); + } + /** * Signs content using a private key. * @@ -157,7 +162,7 @@ public static boolean verify( throws InvalidKeyException, SignatureException { signatureAlgorithm.initVerify(publicKey); signatureAlgorithm.update(contentBytes); - // SignatureException may be thrown if we are tring the wrong key. + // SignatureException may be thrown if we are trying the wrong key. try { return signatureAlgorithm.verify(signatureBytes); } catch (SignatureException e) { diff --git a/google-http-client/src/main/java/com/google/api/client/util/store/FileDataStoreFactory.java b/google-http-client/src/main/java/com/google/api/client/util/store/FileDataStoreFactory.java index 230af26e2..838dcb5dd 100644 --- a/google-http-client/src/main/java/com/google/api/client/util/store/FileDataStoreFactory.java +++ b/google-http-client/src/main/java/com/google/api/client/util/store/FileDataStoreFactory.java @@ -32,18 +32,19 @@ import java.nio.file.attribute.AclEntryPermission; import java.nio.file.attribute.AclEntryType; import java.nio.file.attribute.AclFileAttributeView; +import java.nio.file.attribute.FileOwnerAttributeView; import java.nio.file.attribute.PosixFilePermission; import java.nio.file.attribute.UserPrincipal; import java.util.HashSet; +import java.util.Locale; import java.util.Set; import java.util.logging.Logger; /** * Thread-safe file implementation of a credential store. * - *

For security purposes, the file's permissions are set to be accessible only by the file's - * owner. Note that Java 1.5 does not support manipulating file permissions, and must be done - * manually or using the JNI. + *

For security purposes, the file's permissions are set such that the + * file is only accessible by the file's owner. * * @since 1.16 * @author Yaniv Inbar @@ -53,7 +54,7 @@ public class FileDataStoreFactory extends AbstractDataStoreFactory { private static final Logger LOGGER = Logger.getLogger(FileDataStoreFactory.class.getName()); private static final boolean IS_WINDOWS = StandardSystemProperty.OS_NAME.value() - .startsWith("WINDOWS"); + .toLowerCase(Locale.ENGLISH).startsWith("windows"); /** Directory to store data. */ private final File dataDirectory; @@ -134,29 +135,24 @@ public FileDataStoreFactory getDataStoreFactory() { * executed by the file's owner. * * @param file the file's permissions to modify - * @throws IOException + * @throws IOException if the permissions can't be set */ - static void setPermissionsToOwnerOnly(File file) throws IOException { + private static void setPermissionsToOwnerOnly(File file) throws IOException { Set permissions = new HashSet(); permissions.add(PosixFilePermission.OWNER_READ); permissions.add(PosixFilePermission.OWNER_WRITE); permissions.add(PosixFilePermission.OWNER_EXECUTE); try { Files.setPosixFilePermissions(Paths.get(file.getAbsolutePath()), permissions); - } catch (UnsupportedOperationException exception) { - LOGGER.warning("Unable to set permissions for " + file - + ", because you are running on a non-POSIX file system."); - } catch (SecurityException exception) { - // ignored - } catch (IllegalArgumentException exception) { - // ignored + } catch (RuntimeException exception) { + throw new IOException("Unable to set permissions for " + file, exception); } } - static void setPermissionsToOwnerOnlyWindows(File file) throws IOException { + private static void setPermissionsToOwnerOnlyWindows(File file) throws IOException { Path path = Paths.get(file.getAbsolutePath()); - UserPrincipal owner = path.getFileSystem().getUserPrincipalLookupService() - .lookupPrincipalByName("OWNER@"); + FileOwnerAttributeView fileAttributeView = Files.getFileAttributeView(path, FileOwnerAttributeView.class); + UserPrincipal owner = fileAttributeView.getOwner(); // get view AclFileAttributeView view = Files.getFileAttributeView(path, AclFileAttributeView.class); @@ -186,6 +182,11 @@ static void setPermissionsToOwnerOnlyWindows(File file) throws IOException { .build(); // Overwrite the ACL with only this permission - view.setAcl(ImmutableList.of(entry)); + try { + view.setAcl(ImmutableList.of(entry)); + } catch (SecurityException ex) { + throw new IOException("Unable to set permissions for " + file, ex); + } + } } diff --git a/google-http-client/src/test/java/com/google/api/client/http/HttpResponseExceptionTest.java b/google-http-client/src/test/java/com/google/api/client/http/HttpResponseExceptionTest.java index 4d651aecb..9066e9d70 100644 --- a/google-http-client/src/test/java/com/google/api/client/http/HttpResponseExceptionTest.java +++ b/google-http-client/src/test/java/com/google/api/client/http/HttpResponseExceptionTest.java @@ -14,12 +14,15 @@ package com.google.api.client.http; +import static com.google.api.client.testing.http.HttpTesting.SIMPLE_GENERIC_URL; +import static com.google.api.client.util.StringUtils.LINE_SEPARATOR; +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertThrows; + import com.google.api.client.http.HttpResponseException.Builder; -import com.google.api.client.testing.http.HttpTesting; import com.google.api.client.testing.http.MockHttpTransport; import com.google.api.client.testing.http.MockLowLevelHttpRequest; import com.google.api.client.testing.http.MockLowLevelHttpResponse; -import com.google.api.client.util.StringUtils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -27,6 +30,7 @@ import java.io.ObjectOutput; import java.io.ObjectOutputStream; import junit.framework.TestCase; +import org.junit.function.ThrowingRunnable; /** * Tests {@link HttpResponseException}. @@ -37,16 +41,15 @@ public class HttpResponseExceptionTest extends TestCase { public void testConstructor() throws Exception { HttpTransport transport = new MockHttpTransport(); - HttpRequest request = - transport.createRequestFactory().buildGetRequest(HttpTesting.SIMPLE_GENERIC_URL); + HttpRequest request = transport.createRequestFactory().buildGetRequest(SIMPLE_GENERIC_URL); HttpResponse response = request.execute(); HttpHeaders headers = response.getHeaders(); - HttpResponseException e = new HttpResponseException(response); - assertEquals("200", e.getMessage()); - assertNull(e.getContent()); - assertEquals(200, e.getStatusCode()); - assertNull(e.getStatusMessage()); - assertTrue(headers == e.getHeaders()); + HttpResponseException responseException = new HttpResponseException(response); + assertThat(responseException).hasMessageThat().isEqualTo("200\nGET " + SIMPLE_GENERIC_URL); + assertNull(responseException.getContent()); + assertEquals(200, responseException.getStatusCode()); + assertNull(responseException.getStatusMessage()); + assertTrue(headers == responseException.getHeaders()); } public void testBuilder() throws Exception { @@ -83,11 +86,10 @@ public LowLevelHttpResponse execute() throws IOException { }; } }; - HttpRequest request = - transport.createRequestFactory().buildGetRequest(HttpTesting.SIMPLE_GENERIC_URL); + HttpRequest request = transport.createRequestFactory().buildGetRequest(SIMPLE_GENERIC_URL); HttpResponse response = request.execute(); - HttpResponseException e = new HttpResponseException(response); - assertEquals("OK", e.getStatusMessage()); + HttpResponseException responseException = new HttpResponseException(response); + assertEquals("OK", responseException.getStatusMessage()); } public void testConstructor_noStatusCode() throws Exception { @@ -105,14 +107,18 @@ public LowLevelHttpResponse execute() throws IOException { }; } }; - HttpRequest request = - transport.createRequestFactory().buildGetRequest(HttpTesting.SIMPLE_GENERIC_URL); - try { - request.execute(); - fail(); - } catch (HttpResponseException e) { - assertEquals("", e.getMessage()); - } + final HttpRequest request = + transport.createRequestFactory().buildGetRequest(SIMPLE_GENERIC_URL); + HttpResponseException responseException = + assertThrows( + HttpResponseException.class, + new ThrowingRunnable() { + @Override + public void run() throws Throwable { + request.execute(); + } + }); + assertThat(responseException).hasMessageThat().isEqualTo("GET " + SIMPLE_GENERIC_URL); } public void testConstructor_messageButNoStatusCode() throws Exception { @@ -131,14 +137,18 @@ public LowLevelHttpResponse execute() throws IOException { }; } }; - HttpRequest request = - transport.createRequestFactory().buildGetRequest(HttpTesting.SIMPLE_GENERIC_URL); - try { - request.execute(); - fail(); - } catch (HttpResponseException e) { - assertEquals("Foo", e.getMessage()); - } + final HttpRequest request = + transport.createRequestFactory().buildGetRequest(SIMPLE_GENERIC_URL); + HttpResponseException responseException = + assertThrows( + HttpResponseException.class, + new ThrowingRunnable() { + @Override + public void run() throws Throwable { + request.execute(); + } + }); + assertThat(responseException).hasMessageThat().isEqualTo("Foo\nGET " + SIMPLE_GENERIC_URL); } public void testComputeMessage() throws Exception { @@ -156,10 +166,10 @@ public LowLevelHttpResponse execute() throws IOException { }; } }; - HttpRequest request = - transport.createRequestFactory().buildGetRequest(HttpTesting.SIMPLE_GENERIC_URL); + HttpRequest request = transport.createRequestFactory().buildGetRequest(SIMPLE_GENERIC_URL); HttpResponse response = request.execute(); - assertEquals("200 Foo", HttpResponseException.computeMessageBuffer(response).toString()); + assertThat(HttpResponseException.computeMessageBuffer(response).toString()) + .isEqualTo("200 Foo\nGET " + SIMPLE_GENERIC_URL); } public void testThrown() throws Exception { @@ -179,15 +189,25 @@ public LowLevelHttpResponse execute() throws IOException { }; } }; - HttpRequest request = - transport.createRequestFactory().buildGetRequest(HttpTesting.SIMPLE_GENERIC_URL); - try { - request.execute(); - fail(); - } catch (HttpResponseException e) { - assertEquals( - "404 Not Found" + StringUtils.LINE_SEPARATOR + "Unable to find resource", e.getMessage()); - } + final HttpRequest request = + transport.createRequestFactory().buildGetRequest(SIMPLE_GENERIC_URL); + HttpResponseException responseException = + assertThrows( + HttpResponseException.class, + new ThrowingRunnable() { + @Override + public void run() throws Throwable { + request.execute(); + } + }); + + assertThat(responseException) + .hasMessageThat() + .isEqualTo( + "404 Not Found\nGET " + + SIMPLE_GENERIC_URL + + LINE_SEPARATOR + + "Unable to find resource"); } public void testInvalidCharset() throws Exception { @@ -208,14 +228,21 @@ public LowLevelHttpResponse execute() throws IOException { }; } }; - HttpRequest request = - transport.createRequestFactory().buildGetRequest(HttpTesting.SIMPLE_GENERIC_URL); - try { - request.execute(); - fail(); - } catch (HttpResponseException e) { - assertEquals("404 Not Found", e.getMessage()); - } + final HttpRequest request = + transport.createRequestFactory().buildGetRequest(SIMPLE_GENERIC_URL); + HttpResponseException responseException = + assertThrows( + HttpResponseException.class, + new ThrowingRunnable() { + @Override + public void run() throws Throwable { + request.execute(); + } + }); + + assertThat(responseException) + .hasMessageThat() + .isEqualTo("404 Not Found\nGET " + SIMPLE_GENERIC_URL); } public void testUnsupportedCharset() throws Exception { @@ -236,30 +263,35 @@ public LowLevelHttpResponse execute() throws IOException { }; } }; - HttpRequest request = - transport.createRequestFactory().buildGetRequest(HttpTesting.SIMPLE_GENERIC_URL); - try { - request.execute(); - fail(); - } catch (HttpResponseException e) { - assertEquals("404 Not Found", e.getMessage()); - } + final HttpRequest request = + transport.createRequestFactory().buildGetRequest(SIMPLE_GENERIC_URL); + HttpResponseException responseException = + assertThrows( + HttpResponseException.class, + new ThrowingRunnable() { + @Override + public void run() throws Throwable { + request.execute(); + } + }); + assertThat(responseException) + .hasMessageThat() + .isEqualTo("404 Not Found\nGET " + SIMPLE_GENERIC_URL); } public void testSerialization() throws Exception { HttpTransport transport = new MockHttpTransport(); - HttpRequest request = - transport.createRequestFactory().buildGetRequest(HttpTesting.SIMPLE_GENERIC_URL); + HttpRequest request = transport.createRequestFactory().buildGetRequest(SIMPLE_GENERIC_URL); HttpResponse response = request.execute(); - HttpResponseException e = new HttpResponseException(response); + HttpResponseException responseException = new HttpResponseException(response); ByteArrayOutputStream out = new ByteArrayOutputStream(); ObjectOutput s = new ObjectOutputStream(out); - s.writeObject(e); + s.writeObject(responseException); ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()); ObjectInputStream objectInput = new ObjectInputStream(in); HttpResponseException e2 = (HttpResponseException) objectInput.readObject(); - assertEquals(e.getMessage(), e2.getMessage()); - assertEquals(e.getStatusCode(), e2.getStatusCode()); + assertEquals(responseException.getMessage(), e2.getMessage()); + assertEquals(responseException.getStatusCode(), e2.getStatusCode()); assertNull(e2.getHeaders()); } } diff --git a/google-http-client/src/test/java/com/google/api/client/http/HttpResponseTest.java b/google-http-client/src/test/java/com/google/api/client/http/HttpResponseTest.java index f7638d675..57b400e40 100644 --- a/google-http-client/src/test/java/com/google/api/client/http/HttpResponseTest.java +++ b/google-http-client/src/test/java/com/google/api/client/http/HttpResponseTest.java @@ -567,6 +567,12 @@ private void do_testGetContent_gzipEncoding_finishReading(String contentEncoding ) { zipStream.write(dataToCompress); zipStream.close(); + + // GZIPInputStream uses a default buffer of 512B. Add enough content to exceed this + // limit, so that some content will be left in the connection. + for (int i = 0; i < 1024; i++) { + byteStream.write('7'); + } mockBytes = byteStream.toByteArray(); } final MockLowLevelHttpResponse mockResponse = new MockLowLevelHttpResponse(); @@ -594,6 +600,8 @@ public LowLevelHttpResponse execute() throws IOException { assertFalse(output.isClosed()); assertEquals("abcd", response.parseAsString()); assertTrue(output.isClosed()); + // The underlying stream should be fully consumed, even if gzip only returns some of it. + assertEquals(-1, output.read()); } } diff --git a/google-http-client/src/test/java/com/google/api/client/json/webtoken/JsonWebSignatureTest.java b/google-http-client/src/test/java/com/google/api/client/json/webtoken/JsonWebSignatureTest.java index 8bff77f93..9a02c0750 100644 --- a/google-http-client/src/test/java/com/google/api/client/json/webtoken/JsonWebSignatureTest.java +++ b/google-http-client/src/test/java/com/google/api/client/json/webtoken/JsonWebSignatureTest.java @@ -19,14 +19,27 @@ import com.google.api.client.testing.util.SecurityTestUtils; import java.io.IOException; +import java.math.BigInteger; +import java.security.AlgorithmParameters; import java.security.GeneralSecurityException; +import java.security.KeyFactory; +import java.security.NoSuchAlgorithmException; +import java.security.PublicKey; import java.security.cert.X509Certificate; import java.security.interfaces.RSAPrivateKey; +import java.security.spec.ECGenParameterSpec; +import java.security.spec.ECParameterSpec; +import java.security.spec.ECPoint; +import java.security.spec.ECPublicKeySpec; +import java.security.spec.InvalidKeySpecException; +import java.security.spec.InvalidParameterSpecException; import java.util.ArrayList; import java.util.List; import javax.net.ssl.X509TrustManager; +import com.google.api.client.util.Base64; +import com.google.api.client.util.StringUtils; import org.junit.Assert; import org.junit.Test; @@ -114,4 +127,38 @@ public void testVerifyX509() throws Exception { public void testVerifyX509WrongCa() throws Exception { Assert.assertNull(verifyX509WithCaCert(TestCertificates.BOGUS_CA_CERT)); } + + private static final String ES256_CONTENT = "eyJhbGciOiJFUzI1NiIsInR5cCI6IkpXVCIsImtpZCI6Im1wZjBEQSJ9.eyJhdWQiOiIvcHJvamVjdHMvNjUyNTYyNzc2Nzk4L2FwcHMvY2xvdWQtc2FtcGxlcy10ZXN0cy1waHAtaWFwIiwiZW1haWwiOiJjaGluZ29yQGdvb2dsZS5jb20iLCJleHAiOjE1ODQwNDc2MTcsImdvb2dsZSI6eyJhY2Nlc3NfbGV2ZWxzIjpbImFjY2Vzc1BvbGljaWVzLzUxODU1MTI4MDkyNC9hY2Nlc3NMZXZlbHMvcmVjZW50U2VjdXJlQ29ubmVjdERhdGEiLCJhY2Nlc3NQb2xpY2llcy81MTg1NTEyODA5MjQvYWNjZXNzTGV2ZWxzL3Rlc3ROb09wIiwiYWNjZXNzUG9saWNpZXMvNTE4NTUxMjgwOTI0L2FjY2Vzc0xldmVscy9ldmFwb3JhdGlvblFhRGF0YUZ1bGx5VHJ1c3RlZCJdfSwiaGQiOiJnb29nbGUuY29tIiwiaWF0IjoxNTg0MDQ3MDE3LCJpc3MiOiJodHRwczovL2Nsb3VkLmdvb2dsZS5jb20vaWFwIiwic3ViIjoiYWNjb3VudHMuZ29vZ2xlLmNvbToxMTIxODE3MTI3NzEyMDE5NzI4OTEifQ"; + private static final String ES256_SIGNATURE = "yKNtdFY5EKkRboYNexBdfugzLhC3VuGyFcuFYA8kgpxMqfyxa41zkML68hYKrWu2kOBTUW95UnbGpsIi_u1fiA"; + + // x, y values for keyId "mpf0DA" from https://www.gstatic.com/iap/verify/public_key-jwk + private static final String GOOGLE_ES256_X = "fHEdeT3a6KaC1kbwov73ZwB_SiUHEyKQwUUtMCEn0aI"; + private static final String GOOGLE_ES256_Y = "QWOjwPhInNuPlqjxLQyhveXpWqOFcQPhZ3t-koMNbZI"; + + private PublicKey buildEs256PublicKey(String x, String y) + throws NoSuchAlgorithmException, InvalidParameterSpecException, InvalidKeySpecException { + AlgorithmParameters parameters = AlgorithmParameters.getInstance("EC"); + parameters.init(new ECGenParameterSpec("secp256r1")); + ECPublicKeySpec ecPublicKeySpec = new ECPublicKeySpec( + new ECPoint( + new BigInteger(1, Base64.decodeBase64(x)), + new BigInteger(1, Base64.decodeBase64(y)) + ), + parameters.getParameterSpec(ECParameterSpec.class) + ); + KeyFactory keyFactory = KeyFactory.getInstance("EC"); + return keyFactory.generatePublic(ecPublicKeySpec); + } + + @Test + public void testVerifyES256() throws Exception { + PublicKey publicKey = buildEs256PublicKey(GOOGLE_ES256_X, GOOGLE_ES256_Y); + JsonWebSignature.Header header = new JsonWebSignature.Header(); + header.setAlgorithm("ES256"); + JsonWebSignature.Payload payload = new JsonWebToken.Payload(); + byte[] signatureBytes = Base64.decodeBase64(ES256_SIGNATURE); + byte[] signedContentBytes = StringUtils.getBytesUtf8(ES256_CONTENT); + JsonWebSignature jsonWebSignature = new JsonWebSignature(header, payload, signatureBytes, signedContentBytes); + Assert.assertTrue(jsonWebSignature.verifySignature(publicKey)); + } } diff --git a/pom.xml b/pom.xml index eeb364004..cea300fb9 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 com.google.http-client google-http-client-parent - 1.34.2 + 1.35.0 pom Parent for the Google HTTP Client Library for Java Google HTTP Client Library for Java @@ -306,7 +306,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.1.1 + 3.2.0 attach-javadocs @@ -364,18 +364,23 @@ org.apache.maven.plugins maven-site-plugin - 3.8.2 + 3.9.0 org.apache.maven.plugins maven-dependency-plugin - 3.1.1 + 3.1.2 org.apache.maven.plugins maven-resources-plugin 3.1.0 + + org.apache.maven.plugins + maven-enforcer-plugin + 3.0.0-M3 + @@ -393,6 +398,10 @@ [3.5.2,4.0.0) + + [1.7,) + + @@ -544,17 +553,17 @@ - google-api-java-client/google-api-client-assembly/android-properties (make the filenames match the version here) - Internally, update the default features.json file --> - 1.34.2 + 1.35.0 1.9.71 UTF-8 3.0.2 2.8.6 - 2.10.2 - 3.11.3 - 28.2-android + 2.11.0 + 3.11.4 + 29.0-android 1.1.4c 1.2 - 4.5.11 + 4.5.12 4.4.13 0.24.0 .. diff --git a/samples/dailymotion-simple-cmdline-sample/pom.xml b/samples/dailymotion-simple-cmdline-sample/pom.xml index a735456a7..78e316f4a 100644 --- a/samples/dailymotion-simple-cmdline-sample/pom.xml +++ b/samples/dailymotion-simple-cmdline-sample/pom.xml @@ -4,7 +4,7 @@ com.google.http-client google-http-client-parent - 1.34.2 + 1.35.0 ../../pom.xml dailymotion-simple-cmdline-sample diff --git a/samples/install-without-bom/pom.xml b/samples/install-without-bom/pom.xml new file mode 100644 index 000000000..89688c724 --- /dev/null +++ b/samples/install-without-bom/pom.xml @@ -0,0 +1,84 @@ + + + 4.0.0 + com.google.cloud + google-http-client-install-without-bom + jar + Google Google HTTP Java Client Install Without Bom + https://github.com/googleapis/google-http-java-client + + + + com.google.cloud.samples + shared-configuration + 1.0.17 + + + + 1.8 + 1.8 + UTF-8 + + + + + + + com.google.http-client + google-http-client + + + + + + junit + junit + 4.13 + test + + + com.google.truth + truth + 1.0.1 + test + + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.1.0 + + + add-snippets-source + + add-source + + + + ../snippets/src/main/java + + + + + add-snippets-tests + + add-test-source + + + + ../snippets/src/test/java + + + + + + + + diff --git a/samples/pom.xml b/samples/pom.xml new file mode 100644 index 000000000..22ebf1618 --- /dev/null +++ b/samples/pom.xml @@ -0,0 +1,56 @@ + + + 4.0.0 + com.google.cloud + google-cloud-google-http-client-samples + 0.0.1-SNAPSHOT + pom + Google Google HTTP Java Client Samples Parent + https://github.com/googleapis/google-http-java-client + + Java idiomatic client for Google Cloud Platform services. + + + + + com.google.cloud.samples + shared-configuration + 1.0.17 + + + + 1.8 + 1.8 + UTF-8 + + + + install-without-bom + snapshot + snippets + + + + + + org.apache.maven.plugins + maven-deploy-plugin + 2.8.2 + + true + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.8 + + true + + + + + diff --git a/samples/snapshot/pom.xml b/samples/snapshot/pom.xml new file mode 100644 index 000000000..fa6b36800 --- /dev/null +++ b/samples/snapshot/pom.xml @@ -0,0 +1,83 @@ + + + 4.0.0 + com.google.cloud + google-http-client-snapshot + jar + Google Google HTTP Java Client Snapshot Samples + https://github.com/googleapis/google-http-java-client + + + + com.google.cloud.samples + shared-configuration + 1.0.17 + + + + 1.8 + 1.8 + UTF-8 + + + + + + com.google.http-client + google-http-client + + + + + junit + junit + 4.13 + test + + + com.google.truth + truth + 1.0.1 + test + + + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.1.0 + + + add-snippets-source + + add-source + + + + ../snippets/src/main/java + + + + + add-snippets-tests + + add-test-source + + + + ../snippets/src/test/java + + + + + + + + \ No newline at end of file diff --git a/samples/snippets/pom.xml b/samples/snippets/pom.xml new file mode 100644 index 000000000..cb7949972 --- /dev/null +++ b/samples/snippets/pom.xml @@ -0,0 +1,60 @@ + + + 4.0.0 + com.google.cloud + google-http-client-snippets + jar + Google Google HTTP Java Client Snippets + https://github.com/googleapis/google-http-java-client + + + + com.google.cloud.samples + shared-configuration + 1.0.17 + + + + 1.8 + 1.8 + UTF-8 + + + + + + + + com.google.cloud + libraries-bom + + pom + import + + + + + + + com.google.http-client + google-http-client + + + + + junit + junit + 4.13 + test + + + com.google.truth + truth + 1.0.1 + test + + + diff --git a/synth.metadata b/synth.metadata index 7b71dfbb3..972287a13 100644 --- a/synth.metadata +++ b/synth.metadata @@ -1,1403 +1,19 @@ { - "updateTime": "2020-01-07T08:32:34.360210Z", "sources": [ { - "template": { - "name": "java_library", - "origin": "synthtool.gcp", - "version": "2019.10.17" + "git": { + "name": ".", + "remote": "https://github.com/googleapis/google-http-java-client.git", + "sha": "1f6328755fe32cacc7cfcf253493b652bb007186" } - } - ], - "newFiles": [ - { - "path": ".repo-metadata.json" - }, - { - "path": "checkstyle.xml" - }, - { - "path": "renovate.json" - }, - { - "path": "findbugs-exclude.xml" - }, - { - "path": "synth.py" - }, - { - "path": "CHANGELOG.md" - }, - { - "path": "codecov.yaml" - }, - { - "path": "LICENSE" - }, - { - "path": "instructions.html" - }, - { - "path": "checkstyle-suppressions.xml" - }, - { - "path": ".gitignore" - }, - { - "path": "pom.xml" - }, - { - "path": "CODE_OF_CONDUCT.md" - }, - { - "path": ".travis.yml" - }, - { - "path": "synth.metadata" - }, - { - "path": "README.md" - }, - { - "path": "versions.txt" - }, - { - "path": "CONTRIBUTING.md" - }, - { - "path": "clirr-ignored-differences.xml" - }, - { - "path": "google-http-client-assembly/readme.html" - }, - { - "path": "google-http-client-assembly/LICENSE.txt" - }, - { - "path": "google-http-client-assembly/pom.xml" - }, - { - "path": "google-http-client-assembly/proguard-google-http-client.txt" - }, - { - "path": "google-http-client-assembly/classpath-include" - }, - { - "path": "google-http-client-assembly/assembly.xml" - }, - { - "path": "google-http-client-assembly/licenses/CDDL-LICENSE.txt" - }, - { - "path": "google-http-client-assembly/licenses/xpp3_LICENSE.txt" - }, - { - "path": "google-http-client-assembly/licenses/APACHE-LICENSE.txt" - }, - { - "path": "google-http-client-assembly/licenses/BSD-LICENSE.txt" - }, - { - "path": "google-http-client-assembly/properties/google-http-client.jar.properties" - }, - { - "path": "google-http-client-assembly/properties/google-http-client-android.jar.properties" - }, - { - "path": "google-http-client-assembly/properties/google-http-client-gson.jar.properties" - }, - { - "path": "google-http-client-assembly/properties/google-http-client-jackson2.jar.properties" - }, - { - "path": "google-http-client-assembly/properties/protobuf-java.jar.properties" - }, - { - "path": "google-http-client-assembly/properties/jackson-core.jar.properties" - }, - { - "path": "google-http-client-assembly/properties/google-http-client-xml.jar.properties" - }, - { - "path": "google-http-client-assembly/properties/gson.jar.properties" - }, - { - "path": "google-http-client-assembly/properties/google-http-client-apache-v2.jar.properties" - }, - { - "path": "google-http-client-assembly/properties/google-http-client-protobuf.jar.properties" - }, - { - "path": "google-http-client-protobuf/pom.xml" - }, - { - "path": "google-http-client-protobuf/src/test/proto/simple_proto.proto" - }, - { - "path": "google-http-client-protobuf/src/test/java/com/google/api/client/protobuf/ProtocolBuffersTest.java" - }, - { - "path": "google-http-client-protobuf/src/main/java/com/google/api/client/protobuf/ProtocolBuffers.java" - }, - { - "path": "google-http-client-protobuf/src/main/java/com/google/api/client/protobuf/package-info.java" - }, - { - "path": "google-http-client-protobuf/src/main/java/com/google/api/client/protobuf/ProtoObjectParser.java" - }, - { - "path": "google-http-client-protobuf/src/main/java/com/google/api/client/http/protobuf/ProtoHttpContent.java" - }, - { - "path": "google-http-client-protobuf/src/main/java/com/google/api/client/http/protobuf/package-info.java" - }, - { - "path": "google-http-client-xml/pom.xml" - }, - { - "path": "google-http-client-xml/src/test/resources/sample-atom.xml" - }, - { - "path": "google-http-client-xml/src/test/java/com/google/api/client/xml/GenericXmlTest.java" - }, - { - "path": "google-http-client-xml/src/test/java/com/google/api/client/xml/AtomTest.java" - }, - { - "path": "google-http-client-xml/src/test/java/com/google/api/client/xml/XmlNamespaceDictionaryTest.java" - }, - { - "path": "google-http-client-xml/src/test/java/com/google/api/client/xml/XmlEnumTest.java" - }, - { - "path": "google-http-client-xml/src/test/java/com/google/api/client/xml/GenericXmlListTest.java" - }, - { - "path": "google-http-client-xml/src/test/java/com/google/api/client/xml/XmlListTest.java" - }, - { - "path": "google-http-client-xml/src/test/java/com/google/api/client/xml/XmlTest.java" - }, - { - "path": "google-http-client-xml/src/main/java/com/google/api/client/xml/XmlNamespaceDictionary.java" - }, - { - "path": "google-http-client-xml/src/main/java/com/google/api/client/xml/GenericXml.java" - }, - { - "path": "google-http-client-xml/src/main/java/com/google/api/client/xml/Xml.java" - }, - { - "path": "google-http-client-xml/src/main/java/com/google/api/client/xml/package-info.java" - }, - { - "path": "google-http-client-xml/src/main/java/com/google/api/client/xml/XmlObjectParser.java" - }, - { - "path": "google-http-client-xml/src/main/java/com/google/api/client/xml/atom/Atom.java" - }, - { - "path": "google-http-client-xml/src/main/java/com/google/api/client/xml/atom/AbstractAtomFeedParser.java" - }, - { - "path": "google-http-client-xml/src/main/java/com/google/api/client/xml/atom/package-info.java" - }, - { - "path": "google-http-client-xml/src/main/java/com/google/api/client/http/xml/AbstractXmlHttpContent.java" - }, - { - "path": "google-http-client-xml/src/main/java/com/google/api/client/http/xml/XmlHttpContent.java" - }, - { - "path": "google-http-client-xml/src/main/java/com/google/api/client/http/xml/package-info.java" - }, - { - "path": "google-http-client-xml/src/main/java/com/google/api/client/http/xml/atom/AtomFeedParser.java" - }, - { - "path": "google-http-client-xml/src/main/java/com/google/api/client/http/xml/atom/package-info.java" - }, - { - "path": "google-http-client-xml/src/main/java/com/google/api/client/http/xml/atom/AtomContent.java" - }, - { - "path": "google-http-client-gson/pom.xml" - }, - { - "path": "google-http-client-gson/src/test/java/com/google/api/client/json/gson/GsonParserTest.java" - }, - { - "path": "google-http-client-gson/src/test/java/com/google/api/client/json/gson/GsonFactoryTest.java" - }, - { - "path": "google-http-client-gson/src/test/java/com/google/api/client/json/gson/GsonGeneratorTest.java" - }, - { - "path": "google-http-client-gson/src/main/java/com/google/api/client/json/gson/GsonFactory.java" - }, - { - "path": "google-http-client-gson/src/main/java/com/google/api/client/json/gson/GsonGenerator.java" - }, - { - "path": "google-http-client-gson/src/main/java/com/google/api/client/json/gson/package-info.java" - }, - { - "path": "google-http-client-gson/src/main/java/com/google/api/client/json/gson/GsonParser.java" - }, - { - "path": "google-http-client-jackson2/pom.xml" - }, - { - "path": "google-http-client-jackson2/src/test/java/com/google/api/client/json/jackson2/JacksonFactoryTest.java" - }, - { - "path": "google-http-client-jackson2/src/test/java/com/google/api/client/json/jackson2/JacksonGeneratorTest.java" - }, - { - "path": "google-http-client-jackson2/src/test/java/com/google/api/client/json/jackson2/JacksonParserTest.java" - }, - { - "path": "google-http-client-jackson2/src/main/java/com/google/api/client/json/jackson2/JacksonParser.java" - }, - { - "path": "google-http-client-jackson2/src/main/java/com/google/api/client/json/jackson2/package-info.java" - }, - { - "path": "google-http-client-jackson2/src/main/java/com/google/api/client/json/jackson2/JacksonFactory.java" - }, - { - "path": "google-http-client-jackson2/src/main/java/com/google/api/client/json/jackson2/JacksonGenerator.java" - }, - { - "path": "google-http-client-appengine/pom.xml" - }, - { - "path": "google-http-client-appengine/src/test/java/com/google/api/client/extensions/appengine/datastore/AppEngineDataStoreFactoryTest.java" - }, - { - "path": "google-http-client-appengine/src/test/java/com/google/api/client/extensions/appengine/datastore/AppEngineNoMemcacheDataStoreFactoryTest.java" - }, - { - "path": "google-http-client-appengine/src/test/java/com/google/api/client/extensions/appengine/http/UrlFetchTransportTest.java" - }, - { - "path": "google-http-client-appengine/src/main/java/com/google/api/client/extensions/appengine/datastore/package-info.java" - }, - { - "path": "google-http-client-appengine/src/main/java/com/google/api/client/extensions/appengine/datastore/AppEngineDataStoreFactory.java" - }, - { - "path": "google-http-client-appengine/src/main/java/com/google/api/client/extensions/appengine/http/UrlFetchTransport.java" - }, - { - "path": "google-http-client-appengine/src/main/java/com/google/api/client/extensions/appengine/http/UrlFetchResponse.java" - }, - { - "path": "google-http-client-appengine/src/main/java/com/google/api/client/extensions/appengine/http/package-info.java" - }, - { - "path": "google-http-client-appengine/src/main/java/com/google/api/client/extensions/appengine/http/UrlFetchRequest.java" - }, - { - "path": "samples/dailymotion-simple-cmdline-sample/logging.properties" - }, - { - "path": "samples/dailymotion-simple-cmdline-sample/instructions.html" - }, - { - "path": "samples/dailymotion-simple-cmdline-sample/pom.xml" - }, - { - "path": "samples/dailymotion-simple-cmdline-sample/DailyMotionSample.launch" - }, - { - "path": "samples/dailymotion-simple-cmdline-sample/.settings/org.eclipse.jdt.ui.prefs" - }, - { - "path": "samples/dailymotion-simple-cmdline-sample/src/main/java/com/google/api/services/samples/dailymotion/cmdline/simple/DailyMotionSample.java" - }, - { - "path": "google-http-client-android/AndroidManifest.xml" - }, - { - "path": "google-http-client-android/project.properties" - }, - { - "path": "google-http-client-android/pom.xml" - }, - { - "path": "google-http-client-android/src/main/java/com/google/api/client/extensions/android/package-info.java" - }, - { - "path": "google-http-client-android/src/main/java/com/google/api/client/extensions/android/AndroidUtils.java" - }, - { - "path": "google-http-client-android/src/main/java/com/google/api/client/extensions/android/json/AndroidJsonParser.java" - }, - { - "path": "google-http-client-android/src/main/java/com/google/api/client/extensions/android/json/AndroidJsonGenerator.java" - }, - { - "path": "google-http-client-android/src/main/java/com/google/api/client/extensions/android/json/AndroidJsonFactory.java" - }, - { - "path": "google-http-client-android/src/main/java/com/google/api/client/extensions/android/json/package-info.java" - }, - { - "path": "google-http-client-android/src/main/java/com/google/api/client/extensions/android/http/AndroidHttp.java" - }, - { - "path": "google-http-client-android/src/main/java/com/google/api/client/extensions/android/http/package-info.java" - }, - { - "path": "google-http-client-test/pom.xml" - }, - { - "path": "google-http-client-test/src/test/java/com/google/api/client/test/util/store/MemoryDataStoreFactoryTest.java" - }, - { - "path": "google-http-client-test/src/test/java/com/google/api/client/test/util/store/FileDataStoreFactoryTest.java" - }, - { - "path": "google-http-client-test/src/main/java/com/google/api/client/test/json/AbstractJsonFactoryTest.java" - }, - { - "path": "google-http-client-test/src/main/java/com/google/api/client/test/json/package-info.java" - }, - { - "path": "google-http-client-test/src/main/java/com/google/api/client/test/json/AbstractJsonGeneratorTest.java" - }, - { - "path": "google-http-client-test/src/main/java/com/google/api/client/test/json/AbstractJsonParserTest.java" - }, - { - "path": "google-http-client-test/src/main/java/com/google/api/client/test/util/store/AbstractDataStoreFactoryTest.java" - }, - { - "path": "google-http-client-test/src/main/java/com/google/api/client/test/util/store/package-info.java" - }, - { - "path": ".kokoro/build.bat" - }, - { - "path": ".kokoro/build.sh" - }, - { - "path": ".kokoro/dependencies.sh" - }, - { - "path": ".kokoro/common.cfg" - }, - { - "path": ".kokoro/trampoline.sh" - }, - { - "path": ".kokoro/coerce_logs.sh" - }, - { - "path": ".kokoro/linkage-monitor.sh" - }, - { - "path": ".kokoro/continuous/dependencies.cfg" - }, - { - "path": ".kokoro/continuous/samples.cfg" - }, - { - "path": ".kokoro/continuous/java7.cfg" - }, - { - "path": ".kokoro/continuous/java8-osx.cfg" - }, - { - "path": ".kokoro/continuous/java10.cfg" - }, - { - "path": ".kokoro/continuous/java8-win.cfg" - }, - { - "path": ".kokoro/continuous/propose_release.sh" - }, - { - "path": ".kokoro/continuous/lint.cfg" - }, - { - "path": ".kokoro/continuous/java11.cfg" - }, - { - "path": ".kokoro/continuous/common.cfg" - }, - { - "path": ".kokoro/continuous/propose_release.cfg" - }, - { - "path": ".kokoro/continuous/java8.cfg" - }, - { - "path": ".kokoro/continuous/integration.cfg" - }, - { - "path": ".kokoro/release/drop.sh" - }, - { - "path": ".kokoro/release/stage.cfg" - }, - { - "path": ".kokoro/release/promote.cfg" - }, - { - "path": ".kokoro/release/publish_javadoc.cfg" - }, - { - "path": ".kokoro/release/bump_snapshot.cfg" - }, - { - "path": ".kokoro/release/promote.sh" - }, - { - "path": ".kokoro/release/stage.sh" - }, - { - "path": ".kokoro/release/snapshot.sh" - }, - { - "path": ".kokoro/release/snapshot.cfg" - }, - { - "path": ".kokoro/release/common.cfg" - }, - { - "path": ".kokoro/release/bump_snapshot.sh" - }, - { - "path": ".kokoro/release/common.sh" - }, - { - "path": ".kokoro/release/drop.cfg" - }, - { - "path": ".kokoro/release/publish_javadoc.sh" - }, - { - "path": ".kokoro/presubmit/dependencies.cfg" - }, - { - "path": ".kokoro/presubmit/samples.cfg" - }, - { - "path": ".kokoro/presubmit/java7.cfg" - }, - { - "path": ".kokoro/presubmit/java8-osx.cfg" - }, - { - "path": ".kokoro/presubmit/linkage-monitor.cfg" - }, - { - "path": ".kokoro/presubmit/java10.cfg" - }, - { - "path": ".kokoro/presubmit/java8-win.cfg" - }, - { - "path": ".kokoro/presubmit/lint.cfg" - }, - { - "path": ".kokoro/presubmit/java11.cfg" - }, - { - "path": ".kokoro/presubmit/common.cfg" - }, - { - "path": ".kokoro/presubmit/clirr.cfg" - }, - { - "path": ".kokoro/presubmit/java8.cfg" - }, - { - "path": ".kokoro/presubmit/integration.cfg" - }, - { - "path": ".kokoro/nightly/dependencies.cfg" - }, - { - "path": ".kokoro/nightly/samples.cfg" - }, - { - "path": ".kokoro/nightly/java7.cfg" - }, - { - "path": ".kokoro/nightly/java8-osx.cfg" - }, - { - "path": ".kokoro/nightly/java8-win.cfg" - }, - { - "path": ".kokoro/nightly/lint.cfg" - }, - { - "path": ".kokoro/nightly/java11.cfg" - }, - { - "path": ".kokoro/nightly/common.cfg" - }, - { - "path": ".kokoro/nightly/java8.cfg" - }, - { - "path": ".kokoro/nightly/integration.cfg" - }, - { - "path": "google-http-client/pom.xml" - }, - { - "path": "google-http-client/src/test/resources/file.txt" - }, - { - "path": "google-http-client/src/test/resources/com/google/api/client/util/secret.pem" - }, - { - "path": "google-http-client/src/test/resources/com/google/api/client/util/secret.p12" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/json/GenericJsonTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/json/JsonParserTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/json/JsonObjectParserTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/json/webtoken/JsonWebSignatureTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/testing/http/MockHttpTransportTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/testing/http/MockLowLevelHttpRequestTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/testing/http/FixedClockTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/testing/http/javanet/MockHttpUrlConnectionTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/testing/util/MockBackOffTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/HttpMediaTypeTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/OpenCensusUtilsTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/GZipEncodingTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/ExponentialBackOffPolicyTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/EmptyContentTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/GenericUrlTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/HttpResponseExceptionTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/ConsumingInputStreamTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/MultipartContentTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/HttpRequestTracingTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/HttpResponseTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/HttpRequestTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/HttpHeadersTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/UriTemplateTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/HttpEncodingStreamingContentTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/AbstractHttpContentTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/HttpStatusCodesTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/HttpBackOffIOExpcetionHandlerTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/UrlEncodedParserTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/ByteArrayContentTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/UrlEncodedContentTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/HttpBackOffUnsuccessfulResponseHandlerTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/BasicAuthenticationTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/javanet/NetHttpRequestTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/javanet/NetHttpResponseTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/http/javanet/NetHttpTransportTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/ArrayMapTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/DataMapTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/NanoClockTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/LoggingStreamingContentTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/DataTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/TypesTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/ObjectsTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/ClassInfoTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/GenericDataTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/ExponentialBackOffTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/BackOffTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/DateTimeTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/IOUtilsTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/Base64Test.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/ClockTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/StringUtilsTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/SecurityUtilsTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/FieldInfoTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/PemReaderTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/BackOffUtilsTest.java" - }, - { - "path": "google-http-client/src/test/java/com/google/api/client/util/escape/CharEscapersTest.java" - }, - { - "path": "google-http-client/src/main/resources/google-http-client.properties" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/json/JsonParser.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/json/JsonGenerator.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/json/JsonFactory.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/json/JsonToken.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/json/Json.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/json/package-info.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/json/JsonObjectParser.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/json/GenericJson.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/json/JsonPolymorphicTypeMap.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/json/JsonString.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/json/CustomizeJsonParser.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/json/webtoken/JsonWebToken.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/json/webtoken/package-info.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/json/webtoken/JsonWebSignature.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/json/rpc2/JsonRpcRequest.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/json/rpc2/package-info.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/json/MockJsonFactory.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/json/MockJsonParser.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/json/MockJsonGenerator.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/json/package-info.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/json/webtoken/TestCertificates.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/json/webtoken/package-info.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/http/MockHttpTransport.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/http/package-info.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/http/MockLowLevelHttpResponse.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/http/MockHttpContent.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/http/FixedClock.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/http/HttpTesting.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/http/MockHttpUnsuccessfulResponseHandler.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/http/MockLowLevelHttpRequest.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/http/javanet/package-info.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/http/javanet/MockHttpURLConnection.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/http/apache/package-info.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/http/apache/MockHttpClient.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/util/MockBackOff.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/util/SecurityTestUtils.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/util/MockSleeper.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/util/package-info.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/util/TestableByteArrayOutputStream.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/util/TestableByteArrayInputStream.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/testing/util/LogRecordingHandler.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpResponseException.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/UrlEncodedParser.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/MultipartContent.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/BasicAuthentication.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpBackOffUnsuccessfulResponseHandler.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpUnsuccessfulResponseHandler.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpEncoding.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpEncodingStreamingContent.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpExecuteInterceptor.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/ByteArrayContent.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpRequest.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/EmptyContent.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/FileContent.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/LowLevelHttpRequest.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpStatusCodes.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/UriTemplate.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpBackOffIOExceptionHandler.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/GZipEncoding.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/OpenCensusUtils.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/package-info.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpContent.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpResponse.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpMediaType.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpIOExceptionHandler.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/UrlEncodedContent.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpMethods.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/ExponentialBackOffPolicy.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpRequestFactory.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/AbstractHttpContent.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/AbstractInputStreamContent.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/BackOffPolicy.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/InputStreamContent.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpHeaders.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/GenericUrl.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/LowLevelHttpResponse.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpResponseInterceptor.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/ConsumingInputStream.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpTransport.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/HttpRequestInitializer.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/json/package-info.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/json/JsonHttpContent.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/javanet/ConnectionFactory.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/javanet/NetHttpRequest.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/javanet/NetHttpTransport.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/javanet/NetHttpResponse.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/javanet/package-info.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/javanet/DefaultConnectionFactory.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/apache/HttpExtensionMethod.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/apache/ContentEntity.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/apache/ApacheHttpRequest.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/apache/package-info.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/apache/ApacheHttpResponse.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/apache/ApacheHttpTransport.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/http/apache/SSLSocketFactoryExtension.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/LoggingByteArrayOutputStream.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Maps.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/NullValue.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/StreamingContent.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/SslUtils.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Lists.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/GenericData.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Types.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Collections2.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Key.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/BackOff.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Joiner.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/ArrayMap.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Clock.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/ArrayValueMap.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/DateTime.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/StringUtils.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/ObjectParser.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Beta.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/LoggingOutputStream.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/LoggingInputStream.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/LoggingStreamingContent.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/ExponentialBackOff.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/ByteCountingOutputStream.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/ClassInfo.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Data.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/DataMap.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Sleeper.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Value.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/NanoClock.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/ByteArrayStreamingContent.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/package-info.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Throwables.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/IOUtils.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Charsets.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/SecurityUtils.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Objects.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/FieldInfo.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Base64.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/ByteStreams.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/BackOffUtils.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Preconditions.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Strings.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/PemReader.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/Sets.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/store/AbstractDataStore.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/store/DataStoreFactory.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/store/DataStoreUtils.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/store/AbstractDataStoreFactory.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/store/DataStore.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/store/MemoryDataStoreFactory.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/store/package-info.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/store/FileDataStoreFactory.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/store/AbstractMemoryDataStore.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/escape/Escaper.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/escape/CharEscapers.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/escape/Platform.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/escape/PercentEscaper.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/escape/package-info.java" - }, - { - "path": "google-http-client/src/main/java/com/google/api/client/util/escape/UnicodeEscaper.java" - }, - { - "path": ".github/CODEOWNERS" - }, - { - "path": ".github/.release-please.yml" - }, - { - "path": ".github/ISSUE_TEMPLATE.md" - }, - { - "path": ".github/release-please.yml" - }, - { - "path": ".github/PULL_REQUEST_TEMPLATE.md" - }, - { - "path": ".github/ISSUE_TEMPLATE/bug_report.md" - }, - { - "path": ".github/ISSUE_TEMPLATE/support_request.md" - }, - { - "path": ".github/ISSUE_TEMPLATE/feature_request.md" - }, - { - "path": "__pycache__/synth.cpython-36.pyc" - }, - { - "path": "google-http-client-findbugs/pom.xml" - }, - { - "path": "google-http-client-findbugs/src/main/resources/messages.xml" - }, - { - "path": "google-http-client-findbugs/src/main/resources/bugrank.txt" - }, - { - "path": "google-http-client-findbugs/src/main/resources/findbugs.xml" - }, - { - "path": "google-http-client-findbugs/src/main/java/com/google/api/client/findbugs/BetaDetector.java" - }, - { - "path": "google-http-client-findbugs/src/main/java/com/google/api/client/findbugs/package-info.java" - }, - { - "path": "google-http-client-findbugs/google-http-client-findbugs-test/.project" - }, - { - "path": "google-http-client-findbugs/google-http-client-findbugs-test/.classpath" - }, - { - "path": "google-http-client-findbugs/google-http-client-findbugs-test/pom.xml" - }, - { - "path": "google-http-client-findbugs/google-http-client-findbugs-test/.settings/org.eclipse.jdt.core.prefs" - }, - { - "path": "google-http-client-findbugs/google-http-client-findbugs-test/.settings/org.eclipse.jdt.ui.prefs" - }, - { - "path": "google-http-client-findbugs/google-http-client-findbugs-test/src/main/java/com/google/api/client/findbugs/test/BetaClass.java" - }, - { - "path": "google-http-client-findbugs/google-http-client-findbugs-test/src/main/java/com/google/api/client/findbugs/test/BetaClass2.java" - }, - { - "path": "google-http-client-findbugs/google-http-client-findbugs-test/src/main/java/com/google/api/client/findbugs/test/ClassWithBetaField.java" - }, - { - "path": "google-http-client-findbugs/google-http-client-findbugs-test/src/main/java/com/google/api/client/findbugs/test/Test.java" - }, - { - "path": "google-http-client-findbugs/google-http-client-findbugs-test/src/main/java/com/google/api/client/findbugs/test/ClassWithBetaMethod.java" - }, - { - "path": ".git/index" - }, - { - "path": ".git/packed-refs" - }, - { - "path": ".git/HEAD" - }, - { - "path": ".git/config" - }, - { - "path": ".git/shallow" - }, - { - "path": ".git/objects/pack/pack-05aa278ffdf8a410aeb04cb592a33d2cb1daf479.idx" - }, - { - "path": ".git/objects/pack/pack-05aa278ffdf8a410aeb04cb592a33d2cb1daf479.pack" - }, - { - "path": ".git/refs/remotes/origin/HEAD" - }, - { - "path": ".git/refs/heads/autosynth" - }, - { - "path": ".git/refs/heads/master" - }, - { - "path": ".git/logs/HEAD" - }, - { - "path": ".git/logs/refs/remotes/origin/HEAD" - }, - { - "path": ".git/logs/refs/heads/autosynth" - }, - { - "path": ".git/logs/refs/heads/master" - }, - { - "path": "google-http-client-apache-v2/pom.xml" - }, - { - "path": "google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpTransportTest.java" - }, - { - "path": "google-http-client-apache-v2/src/test/java/com/google/api/client/http/apache/v2/ApacheHttpRequestTest.java" - }, - { - "path": "google-http-client-apache-v2/src/main/java/com/google/api/client/http/apache/v2/HttpExtensionMethod.java" - }, - { - "path": "google-http-client-apache-v2/src/main/java/com/google/api/client/http/apache/v2/ContentEntity.java" - }, - { - "path": "google-http-client-apache-v2/src/main/java/com/google/api/client/http/apache/v2/ApacheHttpRequest.java" - }, - { - "path": "google-http-client-apache-v2/src/main/java/com/google/api/client/http/apache/v2/package-info.java" - }, - { - "path": "google-http-client-apache-v2/src/main/java/com/google/api/client/http/apache/v2/ApacheHttpResponse.java" - }, - { - "path": "google-http-client-apache-v2/src/main/java/com/google/api/client/http/apache/v2/ApacheHttpTransport.java" - }, - { - "path": "docs/index.md" - }, - { - "path": "docs/exponential-backoff.md" - }, - { - "path": "docs/_config.yml" - }, - { - "path": "docs/android.md" - }, - { - "path": "docs/component-modules.md" - }, - { - "path": "docs/google-app-engine.md" - }, - { - "path": "docs/support.md" - }, - { - "path": "docs/http-transport.md" - }, - { - "path": "docs/unit-testing.md" - }, - { - "path": "docs/json.md" - }, - { - "path": "docs/setup.md" - }, - { - "path": "docs/_layouts/default.html" - }, - { - "path": "docs/_data/navigation.yml" - }, - { - "path": "google-http-client-android-test/AndroidManifest.xml" - }, - { - "path": "google-http-client-android-test/pom.xml" - }, - { - "path": "google-http-client-android-test/src/main/java/com/google/api/client/extensions/android/json/FakeTest.java" - }, - { - "path": "google-http-client-android-test/src/main/java/com/google/api/client/extensions/android/json/AndroidJsonFactoryTest.java" - }, - { - "path": "google-http-client-android-test/src/main/java/com/google/api/client/extensions/android/json/package-info.java" - }, - { - "path": "google-http-client-bom/pom.xml" }, { - "path": "google-http-client-bom/README.md" + "git": { + "name": "synthtool", + "remote": "https://github.com/googleapis/synthtool.git", + "sha": "c7e0e517d7f46f77bebd27da2e5afcaa6eee7e25", + "log": "c7e0e517d7f46f77bebd27da2e5afcaa6eee7e25\nbuild(java): fix nightly integration test config to run integrations (#465)\n\nThis was only running the units.\nbd69a2aa7b70875f3c988e269706b22fefbef40e\nbuild(java): fix retry_with_backoff when -e option set (#475)\n\n\nd9b173c427bfa0c6cca818233562e7e8841a357c\nfix: record version of working repo in synth.metadata (#473)\n\nPartial revert of b37cf74d12e9a42b9de9e61a4f26133d7cd9c168.\nf73a541770d95a609e5be6bf6b3b220d17cefcbe\nfeat(discogapic): allow local discovery-artifact-manager (#474)\n\n\n8cf0f5d93a70c3dcb0b4999d3152c46d4d9264bf\ndoc: describe the Autosynth & Synthtool protocol (#472)\n\n* doc: describe the Autosynth & Synthtool protocol\n\n* Accommodate review comments.\n980baaa738a1ad8fa02b4fdbd56be075ee77ece5\nfix: pin sphinx to <3.0.0 as new version causes new error (#471)\n\nThe error `toctree contains reference to document changlelog that doesn't have a title: no link will be generated` occurs as of 3.0.0. Pinning to 2.x until we address the docs build issue.\n\nTowards #470\n\nI did this manually for python-datastore https://github.com/googleapis/python-datastore/pull/22\n928b2998ac5023e7c7e254ab935f9ef022455aad\nchore(deps): update dependency com.google.cloud.samples:shared-configuration to v1.0.15 (#466)\n\nCo-authored-by: Jeffrey Rennie \n188f1b1d53181f739b98f8aa5d40cfe99eb90c47\nfix: allow local and external deps to be specified (#469)\n\nModify noxfile.py to allow local and external dependencies for\nsystem tests to be specified.\n1df68ed6735ddce6797d0f83641a731c3c3f75b4\nfix: apache license URL (#468)\n\n\nf4a59efa54808c4b958263de87bc666ce41e415f\nfeat: Add discogapic support for GAPICBazel generation (#459)\n\n* feat: Add discogapic support for GAPICBazel generation\n\n* reformat with black\n\n* Rename source repository variable\n\nCo-authored-by: Jeffrey Rennie \n" + } } ] } \ No newline at end of file diff --git a/versions.txt b/versions.txt index fef459c2e..b58945bd6 100644 --- a/versions.txt +++ b/versions.txt @@ -1,17 +1,17 @@ # Format: # module:released-version:current-version -google-http-client:1.34.2:1.34.2 -google-http-client-bom:1.34.2:1.34.2 -google-http-client-parent:1.34.2:1.34.2 -google-http-client-android:1.34.2:1.34.2 -google-http-client-android-test:1.34.2:1.34.2 -google-http-client-apache-v2:1.34.2:1.34.2 -google-http-client-appengine:1.34.2:1.34.2 -google-http-client-assembly:1.34.2:1.34.2 -google-http-client-findbugs:1.34.2:1.34.2 -google-http-client-gson:1.34.2:1.34.2 -google-http-client-jackson2:1.34.2:1.34.2 -google-http-client-protobuf:1.34.2:1.34.2 -google-http-client-test:1.34.2:1.34.2 -google-http-client-xml:1.34.2:1.34.2 +google-http-client:1.35.0:1.35.0 +google-http-client-bom:1.35.0:1.35.0 +google-http-client-parent:1.35.0:1.35.0 +google-http-client-android:1.35.0:1.35.0 +google-http-client-android-test:1.35.0:1.35.0 +google-http-client-apache-v2:1.35.0:1.35.0 +google-http-client-appengine:1.35.0:1.35.0 +google-http-client-assembly:1.35.0:1.35.0 +google-http-client-findbugs:1.35.0:1.35.0 +google-http-client-gson:1.35.0:1.35.0 +google-http-client-jackson2:1.35.0:1.35.0 +google-http-client-protobuf:1.35.0:1.35.0 +google-http-client-test:1.35.0:1.35.0 +google-http-client-xml:1.35.0:1.35.0