#!/usr/bin/env bash set -euo pipefail httpAddress="${SKALD_HTTP:-:8443}" hallName="${SKALD_TEST_HALL:-test}" insecure="${SKALD_INSECURE:-0}" staticDir="${SKALD_STATIC_DIR:-static}" binary="${SKALD_BINARY:-./skald}" json_string() { local value="$1" value="${value//\\/\\\\}" value="${value//\"/\\\"}" value="${value//$'\n'/\\n}" value="${value//$'\r'/\\r}" value="${value//$'\t'/\\t}" printf '%s' "$value" } adminUsername="${SKALD_TEST_ADMIN_USER:-admin}" adminPassword="${SKALD_TEST_ADMIN_PASSWORD:-password}" guestPassword="${SKALD_TEST_GUEST_PASSWORD:-guest}" workDir="$(mktemp -d "${TMPDIR:-/tmp}/skald-local.XXXXXXXXXX")" dataDir="$workDir/data" hallsDir="$workDir/halls" recordingsDir="$workDir/recordings" serverPid="" cleanup() { if [[ -n "$serverPid" ]] && kill -0 "$serverPid" 2>/dev/null; then kill "$serverPid" 2>/dev/null || true wait "$serverPid" 2>/dev/null || true fi rm -rf "$workDir" } trap cleanup EXIT INT TERM mkdir -p "$dataDir" "$hallsDir" "$recordingsDir/$hallName" hallFile="$hallsDir/$hallName.json" escapedAdminUsername="$(json_string "$adminUsername")" escapedAdminPassword="$(json_string "$adminPassword")" escapedGuestPassword="$(json_string "$guestPassword")" cat > "$hallFile" <$urlPort/hall/$hallName/" fi echo "Admin username: $adminUsername" echo "Admin password: $adminPassword" echo "Guest password: $guestPassword" echo "Recording output: $recordingsDir/$hallName/" echo "Temporary data: $workDir" if [[ "$protocol" == "https" ]]; then echo "Browser note: accept the self-signed certificate warning before testing microphone access." else echo "Browser note: insecure HTTP is only useful for localhost; remote browsers may block microphone access." fi echo "Press Ctrl+C to stop and clean up the temporary hall." "$binary" \ "${insecureFlag[@]}" \ -http "$httpAddress" \ -data "$dataDir" \ -halls "$hallsDir" \ -recordings "$recordingsDir" \ -static "$staticDir" & serverPid="$!" wait "$serverPid"