#!/bin/bash # # GET DOMAIN # https://eu.api.ovh.com/createToken/?GET=/domain*&POST=/domain*&PUT=/domain*&DELETE=/domain* function usage { echo 'usage: [CNAME] [TARGET]' echo ' - list ' echo ' - get ' echo ' - set ' exit 1 } function set_base { BASE_URL="https://eu.api.ovh.com/1.0" BASEDIR=$(dirname "$0") source "$BASEDIR"/.ovh-credential } function build_url_list_records { zone="$1" result="${BASE_URL}/domain/zone/$zone/record" fieldType="${2:-}" subDomain="${3:-}" any="$fieldType$subDomain" [[ -n $any ]] && result+="?" [[ -n $fieldType ]] && result+="fieldType=$fieldType&" [[ -n $subDomain ]] && result+="subDomain=$subDomain&" result=${result::-1} echo "$result" } function list_records { zone="$1" fieldType="${2:-}" subDomain="${3:-}" query=$(build_url_list_records "$zone" "$fieldType" "$subDomain") method="GET" body="" tstamp=$(date +%s) sha=$(echo -n "$AS+$CK+$method+$query+$body+$tstamp" | shasum | cut -d ' ' -f 1) signature="\$1\$$sha" echo BEFORE CURL output=$(curl -s \ -X $method \ -H "Content-type: application/json" \ -H "X-Ovh-Application: $AK" \ -H "X-Ovh-Consumer: $CK" \ -H "X-Ovh-Signature: $signature" \ -H "X-Ovh-Timestamp: $tstamp" \ "$query") echo "" echo "output=$output" echo "ERROR" exit 1 # echo "$output" | yq .[] # values of array } function get_record { zone="$1" record="$2" method="GET" query="${BASE_URL}/domain/zone/$zone/record/$record" body="" tstamp=$(date +%s) sha=$(echo -n "$AS+$CK+$method+$query+$body+$tstamp" | shasum | cut -d ' ' -f 1) signature="\$1\$$sha" curl -s \ -X $method \ -H "Content-type: application/json" \ -H "X-Ovh-Application: $AK" \ -H "X-Ovh-Consumer: $CK" \ -H "X-Ovh-Signature: $signature" \ -H "X-Ovh-Timestamp: $tstamp" \ "$query" | yq -o=props } function set_record { zone="$1" method="POST" query="${BASE_URL}/domain/zone/$zone/record" body="{\"fieldType\":\"CNAME\",\"subDomain\":\"$CNAME\",\"target\":\"$TARGET\",\"ttl\":0}" tstamp=$(date +%s) sha=$(echo -n "$AS+$CK+$method+$query+$body+$tstamp" | shasum | cut -d ' ' -f 1) signature="\$1\$$sha" curl -s \ -X $method \ -H "Content-type: application/json" \ -H 'Accept: application/json' \ -H "X-Ovh-Application: $AK" \ -H "X-Ovh-Consumer: $CK" \ -H "X-Ovh-Signature: $signature" \ -H "X-Ovh-Timestamp: $tstamp" \ --data-raw "$body" \ "$query" | yq -o=props } function refresh { zone="$1" method="POST" query="${BASE_URL}/domain/zone/$zone/refresh" body="" tstamp=$(date +%s) sha=$(echo -n "$AS+$CK+$method+$query+$body+$tstamp" | shasum | cut -d ' ' -f 1) signature="\$1\$$sha" curl -s \ -X $method \ -H "Content-type: application/json" \ -H 'Accept: application/json' \ -H "X-Ovh-Application: $AK" \ -H "X-Ovh-Consumer: $CK" \ -H "X-Ovh-Signature: $signature" \ -H "X-Ovh-Timestamp: $tstamp" \ "$query" | yq -o=props } function action_list { for record_id in $(list_records "$DOMAIN" CNAME "$CNAME"); do get_record "$DOMAIN" "$record_id" done } function action_get { local record_id #TODO: to delete after testing... list_records "$DOMAIN" CNAME "$CNAME" record_id=$(list_records "$DOMAIN" CNAME "$CNAME") get_record "$DOMAIN" "$record_id" } function append_dot_target { local old_target=$TARGET [[ $TARGET == *\. ]] || TARGET="$TARGET." [[ $old_target != "$TARGET" ]] && echo "TARGET has been suffixed with '.' (the dot symbol)!" } function action_set { append_dot_target echo set_record "$DOMAIN" "$CNAME" "$TARGET" set_record "$DOMAIN" "$CNAME" "$TARGET" echo refresh "$DOMAIN" refresh "$DOMAIN" } ##----------- ## -- MAIN -- ##----------- . "$MIAOU_BASEDIR/lib/init.sh" [[ $# -lt 2 ]] && usage && exit 1 ACTION="$1" DOMAIN="$2" CNAME="${3:-}" TARGET="${4:-}" set_base case $ACTION in list) action_list ;; get) arg3_required "$@" || usage action_get ;; set) arg4_required "$@" || usage action_set ;; *) echoerr "unknown action <$ACTION> !" && usage && exit 2 ;; esac