#!/bin/sh # Records Kepr 2's §22.4 compatibility routes from kepr.uk, GET only, into this folder: # .headers (status line plus the headers the contract tests read) and .body. # Downloads are recorded without their body (`--max-filesize 1` stops before the file). # Re-run before cutover (§28) and review the diff. set -eu out=$(cd "$(dirname "$0")" && pwd) tmp=$(mktemp -d) rec() { # path [nobody] slug=$(printf '%s' "$1" | sed 's#^/##; s#/#_#g') # A fresh file each time, so a failed request can never leave the previous one's headers behind. raw=$(mktemp "$tmp/headers.XXXXXX") code=0 if [ "${2:-}" = nobody ]; then curl -sS -D "$raw" -o /dev/null --max-filesize 1 "https://kepr.uk$1" || code=$? # 63 is curl stopping at --max-filesize, the expected end of a download once its headers are in. [ "$code" = 63 ] && code=0 else curl -sS -D "$raw" -o "$out/$slug.body" "https://kepr.uk$1" || code=$? fi if [ "$code" != 0 ] || [ ! -s "$raw" ]; then echo "$1: request failed (curl exit $code)" >&2 exit 1 fi { head -1 "$raw" | tr -d '\r'; grep -i -E '^(content-type|access-control-allow-origin|location|cache-control|content-disposition):' "$raw" | tr -d '\r' || true; } > "$out/$slug.headers" echo "$1 -> $(head -1 "$out/$slug.headers")" } for r in haven kepr koh nina peach-android; do rec /api/$r/releases/latest rec /api/$r/releases/history rec /$r/update-info rec /$r/meta rec /$r/releases/latest rec /$r/releases/latest/version.txt v=$(cat "$out/${r}_releases_latest_version.txt.body") rec /$r/releases/$v/checksums.txt p=$(sed 's/.*"platforms":{"\([^"]*\)".*/\1/' "$out/api_${r}_releases_latest.body") rec /$r/releases/$v/$p nobody rec /$r/releases/$v/$r-$p nobody done rec /api/koh/releases/latest for p in linux-x86_64 macos-aarch64; do rec /api/koh/releases/2.1.0/$p nobody; done rec /api/koh/releases/2.1.16/linux-x86_64 rec /api/peach-relay/releases/latest rec /api/peach-relay/releases/history rec /peach-relay/meta rec /peach-relay/update-info rec /api/nowhere/releases/latest