diff --git a/userkeys.sh b/userkeys.sh index ba147be..6c995a3 100644 --- a/userkeys.sh +++ b/userkeys.sh @@ -1,13 +1,49 @@ -#!/bin/bash +#!/usr/bin/env bash +set -euo pipefail -# Zeitlimits für curl (Sekunden) +# Konfiguration CONNECT_TIMEOUT=2 MAX_TIME=2 -# Zuerst die URL auf git.nauheimtech.de versuchen -curl -sf --connect-timeout $CONNECT_TIMEOUT --max-time $MAX_TIME \ - https://git.nauheimtech.de/StefanMewes/keyserver/raw/branch/main/$1/keys && exit 0 +URLS=( + "https://git.nauheimtech.de/StefanMewes/keyserver/raw/branch/main/$1/keys" + "https://raw.githubusercontent.com/Hobbabobba/keyserver/refs/heads/main/$1/keys" +) -# Falls die erste URL fehlschlägt, die GitHub-URL versuchen -curl -sf --connect-timeout $CONNECT_TIMEOUT --max-time $MAX_TIME \ - https://raw.githubusercontent.com/Hobbabobba/keyserver/refs/heads/main/$1/keys +pids=() +tmpfiles=() + +# Curl-Requests parallel starten, Output in Tempfiles +for url in "${URLS[@]}"; do + tmp=$(mktemp) + tmpfiles+=("$tmp") + ( + if curl -fsS --connect-timeout "$CONNECT_TIMEOUT" --max-time "$MAX_TIME" \ + "$url" >"$tmp" 2>/dev/null; then + echo "$tmp" # signalisiert Erfolg + fi + ) & + pids+=($!) +done + +# Auf den ersten erfolgreichen Job warten +while ((${#pids[@]})); do + if wait -n; then + # Erfolgreichen Output suchen + for tmp in "${tmpfiles[@]}"; do + if [[ -s "$tmp" ]]; then + cat "$tmp" + rm -f "${tmpfiles[@]}" + # Restprozesse beenden & aufräumen + for pid in "${pids[@]}"; do kill "$pid" 2>/dev/null || true; done + wait || true + exit 0 + fi + done + fi +done + +# Falls keiner erfolgreich war +rm -f "${tmpfiles[@]}" +echo "❌ Keine Keys abrufbar (URLs: ${URLS[*]})" >&2 +exit 1