Browse Source

Merge pull request #1318 from raidenii/master

New DNS plugin for name.com for new API.
dnsconf
neil 7 years ago
committed by GitHub
parent
commit
fd56fe6eb2
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 73
      dnsapi/dns_namecom.sh

73
dnsapi/dns_namecom.sh

@ -1,11 +1,12 @@
#!/usr/bin/env sh #!/usr/bin/env sh
#Author: RaidneII
#Author: RaidenII
#Created 06/28/2017 #Created 06/28/2017
#Updated 03/01/2018, rewrote to support name.com API v4
#Utilize name.com API to finish dns-01 verifications. #Utilize name.com API to finish dns-01 verifications.
######## Public functions ##################### ######## Public functions #####################
Namecom_API="https://api.name.com/api"
Namecom_API="https://api.name.com/v4"
#Usage: dns_namecom_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs" #Usage: dns_namecom_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns_namecom_add() { dns_namecom_add() {
@ -39,21 +40,18 @@ dns_namecom_add() {
# Find domain in domain list. # Find domain in domain list.
if ! _namecom_get_root "$fulldomain"; then if ! _namecom_get_root "$fulldomain"; then
_err "Unable to find domain specified." _err "Unable to find domain specified."
_namecom_logout
return 1 return 1
fi fi
# Add TXT record. # Add TXT record.
_namecom_addtxt_json="{\"hostname\":\"$_sub_domain\",\"type\":\"TXT\",\"content\":\"$txtvalue\",\"ttl\":\"300\",\"priority\":\"10\"}"
if _namecom_rest POST "dns/create/$_domain" "$_namecom_addtxt_json"; then
retcode=$(printf "%s\n" "$response" | _egrep_o "\"code\":100")
if [ "$retcode" ]; then
_namecom_addtxt_json="{\"host\":\"$_sub_domain\",\"type\":\"TXT\",\"answer\":\"$txtvalue\",\"ttl\":\"300\"}"
if _namecom_rest POST "domains/$_domain/records" "$_namecom_addtxt_json"; then
_retvalue=$(printf "%s\n" "$response" | _egrep_o "\"$_sub_domain\"")
if [ "$_retvalue" ]; then
_info "Successfully added TXT record, ready for validation." _info "Successfully added TXT record, ready for validation."
_namecom_logout
return 0 return 0
else else
_err "Unable to add the DNS record." _err "Unable to add the DNS record."
_namecom_logout
return 1 return 1
fi fi
fi fi
@ -72,38 +70,29 @@ dns_namecom_rm() {
# Find domain in domain list. # Find domain in domain list.
if ! _namecom_get_root "$fulldomain"; then if ! _namecom_get_root "$fulldomain"; then
_err "Unable to find domain specified." _err "Unable to find domain specified."
_namecom_logout
return 1 return 1
fi fi
# Get the record id. # Get the record id.
if _namecom_rest GET "dns/list/$_domain"; then
retcode=$(printf "%s\n" "$response" | _egrep_o "\"code\":100")
if [ "$retcode" ]; then
_record_id=$(printf "%s\n" "$response" | _egrep_o "\"record_id\":\"[0-9]+\",\"name\":\"$fulldomain\",\"type\":\"TXT\"" | cut -d \" -f 4)
if _namecom_rest GET "domains/$_domain/records"; then
_record_id=$(printf "%s\n" "$response" | _egrep_o "\"id\":[0-9]+,\"domainName\":\"$_domain\",\"host\":\"$_sub_domain\",\"fqdn\":\"$fulldomain.\",\"type\":\"TXT\",\"answer\":\"$txtvalue\"" | cut -d \" -f 3 | _egrep_o [0-9]+)
_debug record_id "$_record_id" _debug record_id "$_record_id"
if [ "$_record_id" ]; then
_info "Successfully retrieved the record id for ACME challenge." _info "Successfully retrieved the record id for ACME challenge."
else else
_err "Unable to retrieve the record id." _err "Unable to retrieve the record id."
_namecom_logout
return 1 return 1
fi fi
fi fi
# Remove the DNS record using record id. # Remove the DNS record using record id.
_namecom_rmtxt_json="{\"record_id\":\"$_record_id\"}"
if _namecom_rest POST "dns/delete/$_domain" "$_namecom_rmtxt_json"; then
retcode=$(printf "%s\n" "$response" | _egrep_o "\"code\":100")
if [ "$retcode" ]; then
if _namecom_rest DELETE "domains/$_domain/records/$_record_id"; then
_info "Successfully removed the TXT record." _info "Successfully removed the TXT record."
_namecom_logout
return 0 return 0
else else
_err "Unable to remove the DNS record."
_namecom_logout
_err "Unable to delete record id."
return 1 return 1
fi fi
fi
} }
#################### Private functions below ################################## #################### Private functions below ##################################
@ -112,8 +101,9 @@ _namecom_rest() {
param=$2 param=$2
data=$3 data=$3
export _H1="Content-Type: application/json"
export _H2="Api-Session-Token: $sessionkey"
export _H1="Authorization: Basic $_namecom_auth"
export _H2="Content-Type: application/json"
if [ "$method" != "GET" ]; then if [ "$method" != "GET" ]; then
response="$(_post "$data" "$Namecom_API/$param" "" "$method")" response="$(_post "$data" "$Namecom_API/$param" "" "$method")"
else else
@ -130,20 +120,15 @@ _namecom_rest() {
} }
_namecom_login() { _namecom_login() {
namecom_login_json="{\"username\":\"$Namecom_Username\",\"api_token\":\"$Namecom_Token\"}"
# Auth string
# Name.com API v4 uses http basic auth to authenticate
# need to convert the token for http auth
_namecom_auth=$(printf "%s:%s" "$Namecom_Username" "$Namecom_Token" | base64)
if _namecom_rest POST "login" "$namecom_login_json"; then
retcode=$(printf "%s\n" "$response" | _egrep_o "\"code\":100")
if _namecom_rest GET "hello"; then
retcode=$(printf "%s\n" "$response" | _egrep_o "\"username\"\:\"$Namecom_Username\"")
if [ "$retcode" ]; then if [ "$retcode" ]; then
_info "Successfully logged in. Fetching session token..."
sessionkey=$(printf "%s\n" "$response" | _egrep_o "\"session_token\":\".+" | cut -d \" -f 4)
if [ ! -z "$sessionkey" ]; then
_debug sessionkey "$sessionkey"
_info "Session key obtained."
else
_err "Unable to get session key."
return 1
fi
_info "Successfully logged in."
else else
_err "Logging in failed." _err "Logging in failed."
return 1 return 1
@ -151,24 +136,12 @@ _namecom_login() {
fi fi
} }
_namecom_logout() {
if _namecom_rest GET "logout"; then
retcode=$(printf "%s\n" "$response" | _egrep_o "\"code\":100")
if [ "$retcode" ]; then
_info "Successfully logged out."
else
_err "Error logging out."
return 1
fi
fi
}
_namecom_get_root() { _namecom_get_root() {
domain=$1 domain=$1
i=2 i=2
p=1 p=1
if ! _namecom_rest GET "domain/list"; then
if ! _namecom_rest GET "domains"; then
return 1 return 1
fi fi

Loading…
Cancel
Save