Browse Source

Merge pull request #1318 from raidenii/master

New DNS plugin for name.com for new API.
neil 7 years ago
parent
commit
fd56fe6eb2
1 changed files with 28 additions and 55 deletions
  1. 28 55
      dnsapi/dns_namecom.sh

+ 28 - 55
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,37 +70,28 @@ 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)
-      _debug record_id "$_record_id"
+  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"
+    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
-      _info "Successfully removed the TXT record."
-      _namecom_logout
-      return 0
-    else
-      _err "Unable to remove the DNS record."
-      _namecom_logout
-      return 1
-    fi
+  if _namecom_rest DELETE "domains/$_domain/records/$_record_id"; then
+    _info "Successfully removed the TXT record."
+    return 0
+  else
+    _err "Unable to delete record id."
+    return 1
   fi
   fi
 }
 }
 
 
@@ -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