|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +echo "Fetching gavs endpoint" |
| 4 | +curl -L --user "$CHAINGUARD_JAVA_IDENTITY_ID:$CHAINGUARD_JAVA_TOKEN" "$BASEURL-/api/gavs?page_size=1000" 2>/dev/null | jq > gavs.json |
| 5 | +echo "GAVs found: $(jq '.gavs | length' gavs.json)" |
| 6 | +echo ".cgr fixes: $(jq '[.gavs[] | capture("cgr\\.(?<n>[0-9]+)") | .n | tonumber] | add // 0' gavs.json)" |
| 7 | +echo ".cgp fixes: $(jq '[.gavs[] | capture("cgp\\.(?<n>[0-9]+)") | .n | tonumber] | add // 0' gavs.json)" |
| 8 | +echo "saving results to gavs.json" |
| 9 | + |
| 10 | +mkdir -p jars patches |
| 11 | +for gav in $(jq -r '.gavs[]' gavs.json); do |
| 12 | + |
| 13 | + group=$(echo "$gav" | cut -d: -f1) |
| 14 | + artifact=$(echo "$gav" | cut -d: -f2) |
| 15 | + version=$(echo "$gav" | cut -d: -f3) |
| 16 | + name="${group}:${artifact}" |
| 17 | + QUERYJSON=$(curl -s "$CONSOLE_API_URL_QUERY" \ |
| 18 | + -H "Authorization: Bearer $(chainctl auth token)" \ |
| 19 | + -H 'Content-Type: application/json' \ |
| 20 | + -d "{\"package\":{\"ecosystem\":\"Maven\",\"name\":\"${name}\"}}" | jq) |
| 21 | + |
| 22 | + if fixed_version=$(echo "$QUERYJSON" | jq -r '.vulns[].affected[].ranges[].events[] | select(has("fixed")) | .fixed' | head -1) && [ -n "$fixed_version" ]; then |
| 23 | + echo "OSV Fixed Data Found for Artifact: $group:$artifact:$fixed_version" |
| 24 | + fi |
| 25 | + |
| 26 | + VERSION_DIR="$BASEURL${group//.//}/${artifact//.//}/$version/" |
| 27 | + GAV_DIR="artifacts/${group//.//}/${artifact//.//}/$version" |
| 28 | + mkdir -p "$GAV_DIR" |
| 29 | + |
| 30 | + LISTING=$(curl -L --user "$CHAINGUARD_JAVA_IDENTITY_ID:$CHAINGUARD_JAVA_TOKEN" -s "$VERSION_DIR") |
| 31 | + FILES=$(echo "$LISTING" | grep -oP '(?<=href=")[^"]+' | grep -v '^\.\./$') |
| 32 | + |
| 33 | + if [ -z "$FILES" ]; then |
| 34 | + echo "Failed: no listing returned for $VERSION_DIR" |
| 35 | + echo "Attempting to guess the .jar and -patches.zip URLs" |
| 36 | + |
| 37 | + # Fall back to guessing standard jar/patches URLs since the listing-based fetch failed |
| 38 | + JARURL="$BASEURL${group//.//}/${artifact//.//}/$version/$artifact-$version.jar" |
| 39 | + PATCHURL="$BASEURL${group//.//}/${artifact//.//}/$version/$artifact-$version-patches.zip" |
| 40 | + JAR_URL_HTTP_CODE=$(curl -L --user "$CHAINGUARD_JAVA_IDENTITY_ID:$CHAINGUARD_JAVA_TOKEN" -s -o "$GAV_DIR/$(basename "$JARURL")" -w "%{http_code}" "$JARURL") |
| 41 | + [ "$JAR_URL_HTTP_CODE" = "200" ] && echo "Saved: $DEST" || echo "Failed ($JAR_URL_HTTP_CODE): $JARURL" |
| 42 | + PATCH_URL_HTTP_CODE=$(curl -L --user "$CHAINGUARD_JAVA_IDENTITY_ID:$CHAINGUARD_JAVA_TOKEN" -s -o "$GAV_DIR/$(basename "$PATCHURL")" -w "%{http_code}" "$PATCHURL") |
| 43 | + [ "$PATCH_URL_HTTP_CODE" = "200" ] && echo "Saved: $DEST" || echo "Failed ($PATCH_URL_HTTP_CODE): $PATCHURL" |
| 44 | + else |
| 45 | + echo "Found file listing for $VERSION_DIR" |
| 46 | + while IFS= read -r FNAME; do |
| 47 | + FILEURL="${VERSION_DIR}${FNAME}" |
| 48 | + DEST="$GAV_DIR/$FNAME" |
| 49 | + |
| 50 | + HTTP_CODE=$(curl -L --user "$CHAINGUARD_JAVA_IDENTITY_ID:$CHAINGUARD_JAVA_TOKEN" -s -o "$DEST" -w "%{http_code}" "$FILEURL") |
| 51 | + [ "$HTTP_CODE" = "200" ] && echo "Saved: $DEST" || echo "Failed ($HTTP_CODE): $FILEURL" |
| 52 | + done <<< "$FILES" |
| 53 | + fi |
| 54 | +done |
0 commit comments