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.
104 lines
2.9 KiB
104 lines
2.9 KiB
|
|
#!/usr/bin/env bash
|
|
|
|
# We highly recommend to create a new user in the Servercow CP to only grant access to the DNS API
|
|
# https://cp.servercow.de/client/contacts/add/
|
|
|
|
#SCOW_User="username"
|
|
#SCOW_Pass="pass"
|
|
|
|
dns_scow_add() {
|
|
fulldomain=$1
|
|
txtvalue=$2
|
|
_debug fulldomain "$fulldomain"
|
|
_debug txtvalue "$txtvalue"
|
|
_info "Using Servercow DNS API"
|
|
|
|
if ! which dig > /dev/null; then
|
|
_err "Cannot find dig (Debian and derivates: dnsutils; CentOS, Arch, Alpine: bind-tools)"
|
|
fi
|
|
|
|
if [[ -z "$SCOW_Pass" ]] || [[ -z "$SCOW_User" ]]; then
|
|
SCOW_Pass=""
|
|
SCOW_User=""
|
|
_err "No Servercow login data provided."
|
|
_err "Please create a new user with access to the DNS API."
|
|
return 1
|
|
fi
|
|
|
|
if ! _get_root_domain "${fulldomain}"; then
|
|
_err "Cannot determine root domain"
|
|
return 1
|
|
fi
|
|
_info "Found zone ${_root_domain} for ${fulldomain}"
|
|
|
|
if _scow_api POST; then
|
|
_info "OK, added txt record to zone, please wait a few seconds..."
|
|
else
|
|
_err "Error, exiting."
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
#Usage: fulldomain txtvalue
|
|
#Remove the txt record after validation.
|
|
dns_scow_rm() {
|
|
fulldomain=$1
|
|
txtvalue=$2
|
|
_debug fulldomain "$fulldomain"
|
|
_debug txtvalue "$txtvalue"
|
|
_get_root_domain "${fulldomain}"
|
|
if [[ -z ${_root_domain} ]]; then
|
|
_err "Cannot determine root domain"
|
|
return 1
|
|
fi
|
|
_info "Found zone ${_root_domain} for ${fulldomain}"
|
|
if _scow_api DELETE; then
|
|
_info "OK, removed txt record from zone."
|
|
else
|
|
_err "Error, exiting."
|
|
return 1
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
#################### Private functions below ##################################
|
|
_get_root_domain() {
|
|
local domain=${1}
|
|
until [[ ! -z $(dig ns ${domain} +short | grep -iE 'ns.+\.servercow\.de') ]]; do
|
|
domain=${domain#*.}
|
|
[ $(echo ${domain} | awk -F. '{print NF-1}') -lt 1 ] && return 1
|
|
done
|
|
_root_domain=${domain}
|
|
return 0
|
|
}
|
|
_scow_api() {
|
|
method=${1}
|
|
if [[ ${method} == "POST" ]]; then
|
|
api_return=$(curl -sX POST "https://api.servercow.de/dns/v1/domains/${_root_domain}" \
|
|
-H "X-Auth-Username: ${SCOW_User}" \
|
|
-H "X-Auth-Password: ${SCOW_Pass}" \
|
|
-H "Content-Type: application/json" \
|
|
--data "{\"type\":\"TXT\",\"name\":\"${fulldomain}\",\"content\":\"${txtvalue}\",\"ttl\":10}")
|
|
echo ${api_return} | grep -qi '{"message":"ok"}'
|
|
if [[ $? != 0 ]]; then
|
|
_err "Post to API failed: ${api_return}"
|
|
return 1
|
|
fi
|
|
_debug "API: ${api_return}"
|
|
elif [[ ${method} == "DELETE" ]]; then
|
|
api_return=$(curl -sX DELETE "https://api.servercow.de/dns/v1/domains/${_root_domain}" \
|
|
-H "X-Auth-Username: ${SCOW_User}" \
|
|
-H "X-Auth-Password: ${SCOW_Pass}" \
|
|
-H "Content-Type: application/json" \
|
|
--data "{\"type\":\"TXT\",\"name\":\"${fulldomain}\"}")
|
|
echo ${api_return} | grep -qi '{"message":"ok"}'
|
|
if [[ $? != 0 ]]; then
|
|
_err "Delete request to API failed: ${api_return}"
|
|
return 1
|
|
fi
|
|
_debug "API: ${api_return}"
|
|
fi
|
|
return 0
|
|
}
|