75 lines
1.9 KiB
Bash
75 lines
1.9 KiB
Bash
#!/usr/bin/env bash
|
|
# Validate that token/bridge/networks list URLs return valid JSON.
|
|
# Usage: ./validate-token-lists.sh [URL1] [URL2] ...
|
|
# If no URLs given, reads from env: TOKEN_LIST_JSON_URL, BRIDGE_LIST_JSON_URL, NETWORKS_JSON_URL.
|
|
# Requires: curl, jq (or python3 for fallback).
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
VALID=0
|
|
INVALID=0
|
|
|
|
validate_url() {
|
|
local url="$1"
|
|
local name="${2:-$url}"
|
|
local body
|
|
if ! body="$(curl -sS -L --connect-timeout 15 --max-time 30 "$url" 2>/dev/null)"; then
|
|
echo "❌ $name: failed to fetch"
|
|
((INVALID++)) || true
|
|
return 1
|
|
fi
|
|
if [ -z "$body" ]; then
|
|
echo "❌ $name: empty response"
|
|
((INVALID++)) || true
|
|
return 1
|
|
fi
|
|
if command -v jq &>/dev/null; then
|
|
if echo "$body" | jq . &>/dev/null; then
|
|
echo "✅ $name: valid JSON"
|
|
((VALID++)) || true
|
|
return 0
|
|
fi
|
|
else
|
|
if echo "$body" | python3 -c "import sys,json; json.load(sys.stdin)" 2>/dev/null; then
|
|
echo "✅ $name: valid JSON"
|
|
((VALID++)) || true
|
|
return 0
|
|
fi
|
|
fi
|
|
echo "❌ $name: invalid JSON"
|
|
((INVALID++)) || true
|
|
return 1
|
|
}
|
|
|
|
echo "=============================================="
|
|
echo "Token / bridge / networks list JSON validation"
|
|
echo "=============================================="
|
|
echo ""
|
|
|
|
if [ $# -gt 0 ]; then
|
|
for url in "$@"; do
|
|
validate_url "$url" "$url"
|
|
done
|
|
else
|
|
for var in TOKEN_LIST_JSON_URL BRIDGE_LIST_JSON_URL NETWORKS_JSON_URL; do
|
|
url="${!var:-}"
|
|
if [ -n "$url" ]; then
|
|
validate_url "$url" "$var"
|
|
else
|
|
echo "⏭ $var not set, skipping"
|
|
fi
|
|
done
|
|
if [ "$VALID" -eq 0 ] && [ "$INVALID" -eq 0 ]; then
|
|
echo "Set TOKEN_LIST_JSON_URL, BRIDGE_LIST_JSON_URL, or NETWORKS_JSON_URL, or pass URLs as arguments."
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
echo ""
|
|
echo "Result: $VALID valid, $INVALID invalid"
|
|
if [ "$INVALID" -gt 0 ]; then
|
|
exit 1
|
|
fi
|
|
exit 0
|