#!/bin/bash
# ===========================================
# Liste tous les enregistrements DNS
# Usage: ./list-records.sh [filter]
# ===========================================
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "$SCRIPT_DIR/../lib/config.sh"
source "$SCRIPT_DIR/../lib/colors.sh"
FILTER="$1"
print_header "Enregistrements DNS - $O2SWITCH_DOMAIN"
# Récupérer la zone DNS
RESPONSE=$(curl -s -u "$O2SWITCH_USERNAME:$O2SWITCH_PASSWORD" \
"$O2SWITCH_API_URL/json-api/cpanel?cpanel_jsonapi_apiversion=2&cpanel_jsonapi_module=ZoneEdit&cpanel_jsonapi_func=fetchzone&domain=$O2SWITCH_DOMAIN")
# Vérifier si la réponse est valide
if ! echo "$RESPONSE" | grep -q '"status":1'; then
log_error "Erreur lors de la récupération des enregistrements DNS"
exit 1
fi
# Parser et afficher les enregistrements
echo ""
printf "%-5s %-40s %-8s %-20s %-8s\n" "LINE" "NAME" "TYPE" "VALUE" "TTL"
print_separator
echo "$RESPONSE" | jq -r '.cpanelresult.data[0].record[] |
select(.type == "A" or .type == "CNAME" or .type == "TXT") |
[.line, .name, .type, (.address // .cname // (.txtdata | if length > 30 then .[0:30] + "..." else . end) // "N/A"), .ttl] |
@tsv' 2>/dev/null | while IFS=$'\t' read -r line name type value ttl; do
# Appliquer le filtre si spécifié
if [ -n "$FILTER" ]; then
if ! echo "$name" | grep -qi "$FILTER"; then
continue
fi
fi
# Colorer selon le type
case "$type" in
A) type_color="${GREEN}$type${NC}" ;;
CNAME) type_color="${BLUE}$type${NC}" ;;
TXT) type_color="${YELLOW}$type${NC}" ;;
*) type_color="$type" ;;
esac
printf "%-5s %-40s %-8b %-20s %-8s\n" "$line" "$name" "$type_color" "$value" "$ttl"
done
echo ""
log_info "Utilisez './list-records.sh <filtre>' pour filtrer (ex: ./list-records.sh 33800)"