#!/bin/bash
#
# pdns-tools
# https://git.stack-source.com/msb/pdns-tools
# Copyright (c) 2022 Matthew Saunders Brown <matthewsaundersbrown@gmail.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)

# load include file
source $(dirname $0)/pdns.sh

help()
{
  echo "Export full DNS zone in AXFR format."
  echo ""
  echo "usage: $thisfilename -z <zone> [-h]"
  echo ""
  echo "  -h            Print this help."
  echo "  -z <zone>     Zone to export."
  echo "  -c            Output in csv format instead of columns."
}

pdns:getoptions "$@"

# check for zone
if [[ -z $zone ]]; then
  echo "zone is required"
  exit
fi

tmpfile=$(mktemp)
echo "name,ttl,class,type,value" > $tmpfile.csv

# export zone and check http status
zone_status=$(/usr/bin/curl --silent --output "$tmpfile" --write-out "%{http_code}" -H "X-API-Key: $api_key" $api_base_url/zones/$zone/export)

if [[ $zone_status = 200 ]]; then

  # convert tabs to commas
  sed -i 's/\t/,/g' $tmpfile
  # zone level records
  grep ^$zone. $tmpfile >> $tmpfile.csv
  # subdomain records
  grep -v ^$zone. $tmpfile >> $tmpfile.csv

  if [[ $csv ]]; then
    cat $tmpfile.csv
  else
    column -t -s , $tmpfile.csv
  fi
elif [[ $zone_status = 404 ]]; then
  echo 404 Not Found, $zone does not exist
else
  echo Unexecpted http response checking for existence of zone $zone: $zone_status
fi

rm $tmpfile.csv
rm $tmpfile