André Peters
7 years ago
committed by
GitHub
1 changed files with 104 additions and 0 deletions
@ -0,0 +1,104 @@ |
|||
|
|||
#!/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 |
|||
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue