commit 1f923ec33de097e018bca61000db2138474c7a29 Author: Christian Maier Date: Wed Apr 22 22:54:21 2026 +0200 Initialer Import home/maier/bin diff --git a/curldesec.sh b/curldesec.sh new file mode 100644 index 0000000..672ad48 --- /dev/null +++ b/curldesec.sh @@ -0,0 +1,2 @@ +TOKEN=$(keepassxc-cli show Nextcloud/Keepass/Keepass202503.kdbx "desec api token" -a password) +curl -sH "Authorization: Token $TOKEN" https://desec.io/api/v1/domains/ma3000.de/rrsets/srv1/A/ diff --git a/get_record.sh b/get_record.sh new file mode 100644 index 0000000..8f96e63 --- /dev/null +++ b/get_record.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# --- KONFIGURATION --- +: "${TOKEN:="DEIN_DEFAULT_API_TOKEN"}" +DOMAIN="ma3000.de" +# --------------------- + +# Abfrage der API +# Wir nutzen -s für Silent und -H für den Header +response=$(curl -s -H "Authorization: Token $TOKEN" \ + "https://desec.io/api/v1/domains/$DOMAIN/rrsets/") + +# Prüfen, ob die Antwort leer ist oder einen Fehler enthält +if [[ -z "$response" || "$response" == *"detail"* ]]; then + echo "Fehler: Konnte Daten nicht abrufen. Token korrekt?" + exit 1 +fi + +# Parsing mit jq: +# 1. Wir gehen durch jedes RRset (.[]). +# 2. Wir speichern Typ und Name in Variablen. +# 3. Wir gehen durch das 'records' Array des jeweiligen RRsets (.records[]). +# 4. Wir geben Typ, Name und den einzelnen Record formatiert aus. + +echo "$response" | jq -r '.[] | {type: .type, name: .name, records: .records} | .type as $t | .name as $n | .records[] | "\($t)\t\($n)\t\(.)"' diff --git a/update_record.sh b/update_record.sh new file mode 100644 index 0000000..b54ecc2 --- /dev/null +++ b/update_record.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +# --- Konfiguration --- +: "${TOKEN:="DEIN_API_TOKEN"}" +DOMAIN="ma3000.de" +# --------------------- + +if [ "$#" -ne 3 ]; then + echo "Nutzung: $0 " + exit 1 +fi + +SUBNAME=$1 +TYPE=$2 +NEW_VALUE=$3 + +[[ "$SUBNAME" == "@" ]] && SUBNAME="" + +# Wir nutzen den allgemeinen Endpunkt für die Abfrage UND das Senden +BASE_URL="https://desec.io/api/v1/domains/$DOMAIN/rrsets/" +SPECIFIC_URL="${BASE_URL}${SUBNAME}/${TYPE}/" + +# 1. Bestehende Records abfragen +response=$(curl -s -H "Authorization: Token $TOKEN" "$SPECIFIC_URL") + +# Prüfen, ob der Record existiert oder neu ist +if echo "$response" | jq -e '.detail' > /dev/null 2>&1; then + existing_records="[]" + echo "Info: Record existiert noch nicht. Erstelle neu..." +else + existing_records=$(echo "$response" | jq -c '.records') +fi + +# 2. Prüfen, ob der Wert schon vorhanden ist +if echo "$existing_records" | jq -e ". | contains([\"$NEW_VALUE\"])" > /dev/null; then + echo "Info: Wert '$NEW_VALUE' ist bereits vorhanden. Nichts zu tun." + exit 0 +fi + +# 3. Den neuen Wert zum Set hinzufügen +updated_records=$(echo "$existing_records" | jq -c ". + [\"$NEW_VALUE\"] | unique") + +# 4. Senden an den BASIS-Endpunkt (funktioniert für Erstellung und Update) +# Wichtig: Wir nutzen hier POST gegen den Listen-Endpunkt oder PUT gegen den spezifischen +# Bei deSEC ist POST auf /rrsets/ der universelle Weg für "Upsert" (Update oder Insert) +update_response=$(curl -s -X POST "$BASE_URL" \ + -H "Authorization: Token $TOKEN" \ + -H "Content-Type: application/json" \ + -d "[{ + \"subname\": \"$SUBNAME\", + \"type\": \"$TYPE\", + \"ttl\": 3600, + \"records\": $updated_records + }]") + +# Erfolgsprüfung (Die API gibt bei Erfolg eine Liste zurück) +if echo "$update_response" | jq -e '.[0].records' > /dev/null; then + echo "Erfolg: $TYPE Record für '$SUBNAME' ist jetzt: $updated_records" +else + echo "Fehler beim Update:" + echo "$update_response" | jq . + exit 1 +fi