You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
4.4 KiB
189 lines
4.4 KiB
#!/bin/bash
|
|
#
|
|
# GET DOMAIN
|
|
# https://eu.api.ovh.com/createToken/?GET=/domain*&POST=/domain*&PUT=/domain*&DELETE=/domain*
|
|
|
|
function usage {
|
|
echo 'usage: <ACTION: list|get|set> <DOMAIN> [CNAME] [TARGET]'
|
|
echo ' - list <DOMAIN>'
|
|
echo ' - get <DOMAIN> <CNAME>'
|
|
echo ' - set <DOMAIN> <CNAME> <TARGET>'
|
|
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
|