Selaa lähdekoodia

Add dns.la api support

Add dns.la api support
stephen 3 vuotta sitten
vanhempi
sitoutus
2a05f24cb6
1 muutettua tiedostoa jossa 53 lisäystä ja 60 poistoa
  1. 53 60
      dnsapi/dns_la.sh

+ 53 - 60
dnsapi/dns_la.sh

@@ -1,11 +1,12 @@
 #!/usr/bin/env sh
-# dns.la Domain api
-#
+
 #LA_Id="test123"
-#
 #LA_Key="d1j2fdo4dee3948"
-DNSLA_API="https://api.dns.la/api/"
+
+LA_Api="https://api.dns.la/api"
+
 ########  Public functions #####################
+
 #Usage: dns_la_add  _acme-challenge.www.domain.com   "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
 dns_la_add() {
   fulldomain=$1
@@ -13,11 +14,11 @@ dns_la_add() {
 
   LA_Id="${LA_Id:-$(_readaccountconf_mutable LA_Id)}"
   LA_Key="${LA_Key:-$(_readaccountconf_mutable LA_Key)}"
+
   if [ -z "$LA_Id" ] || [ -z "$LA_Key" ]; then
     LA_Id=""
     LA_Key=""
-    _err "You don't specify dnsla api id and key yet."
-    _err "Please create your key and try again."
+    _err "You didn't specify a dnsla api id and key yet."
     return 1
   fi
 
@@ -25,13 +26,30 @@ dns_la_add() {
   _saveaccountconf_mutable LA_Id "$LA_Id"
   _saveaccountconf_mutable LA_Key "$LA_Key"
 
-  _debug "detect the root zone"
+  _debug "First detect the root zone"
   if ! _get_root "$fulldomain"; then
     _err "invalid domain"
     return 1
   fi
-
-  add_record "$_domain" "$_sub_domain" "$txtvalue"
+  _debug _domain_id "$_domain_id"
+  _debug _sub_domain "$_sub_domain"
+  _debug _domain "$_domain"
+
+  _info "Adding record"
+  if _la_rest "record.ashx?cmd=create&apiid=$LA_Id&apipass=$LA_Key&rtype=json&domainid=$_domain_id&host=$_sub_domain&recordtype=TXT&recorddata=$txtvalue&recordline="; then
+    if _contains "$response" '"resultid":'; then
+      _info "Added, OK"
+      return 0
+    elif _contains "$response" '"code":532'; then
+      _info "Already exists, OK"
+      return 0
+    else
+      _err "Add txt record error."
+      return 1
+    fi
+  fi
+  _err "Add txt record error."
+  return 1
 
 }
 
@@ -48,45 +66,33 @@ dns_la_rm() {
     _err "invalid domain"
     return 1
   fi
+  _debug _domain_id "$_domain_id"
+  _debug _sub_domain "$_sub_domain"
+  _debug _domain "$_domain"
 
-  if ! _rest GET "record.ashx?cmd=listn&apiid=$LA_Id&apipass=$LA_Key&rtype=json&domainid=$_domain_id&domain=$_domain&host=$_sub_domain&recordtype=TXT&recorddata=$txtvalue"; then
-    _err "get record list error."
+  _debug "Getting txt records"
+  if ! _la_rest "record.ashx?cmd=listn&apiid=$LA_Id&apipass=$LA_Key&rtype=json&domainid=$_domain_id&domain=$_domain&host=$_sub_domain&recordtype=TXT&recorddata=$txtvalue"; then
+    _err "Error"
     return 1
   fi
 
-  if ! _contains "$response" "recordid"; then
-    _info "no need to remove record."
+  if ! _contains "$response" '"recordid":'; then
+    _info "Don't need to remove."
     return 0
   fi
 
-  _record_id=$(printf "%s" "$response" | grep '"recordid":' | cut -d : -f 2 | cut -d , -f 1 | tr -d '\r' | tr -d '\n')
-
-  _debug delete_rid "$_record_id"
-  if ! _rest GET "record.ashx?cmd=remove&apiid=$LA_Id&apipass=$LA_Key&rtype=json&domainid=$_domain_id&domain=$_domain&recordid=$_record_id"; then
-    _err "record remove error."
+  record_id=$(printf "%s" "$response" | grep '"recordid":' | cut -d : -f 2 | cut -d , -f 1 | tr -d '\r' | tr -d '\n')
+  _debug "record_id" "$record_id"
+  if [ -z "$record_id" ]; then
+    _err "Can not get record id to remove."
     return 1
   fi
-
-  _contains "$response" "\"code\":300"
-}
-
-#add the txt record.
-#usage: root  sub  txtvalue
-add_record() {
-  root=$1
-  sub=$2
-  txtvalue=$3
-  fulldomain="$sub.$root"
-
-  _info "adding txt record"
-  if ! _rest GET "record.ashx?cmd=create&apiid=$LA_Id&apipass=$LA_Key&rtype=json&domainid=$_domain_id&host=$_sub_domain&recordtype=TXT&recorddata=$txtvalue&recordline="; then
+  if ! _la_rest "record.ashx?cmd=remove&apiid=$LA_Id&apipass=$LA_Key&rtype=json&domainid=$_domain_id&domain=$_domain&recordid=$record_id"; then
+    _err "Delete record error."
     return 1
   fi
+  _contains "$response" '"code":300'
 
-  if _contains "$response" "resultid" || _contains "$response" "\"code\":532"; then
-    return 0
-  fi
-  return 1
 }
 
 ####################  Private functions below ##################################
@@ -99,6 +105,7 @@ _get_root() {
   domain=$1
   i=1
   p=1
+
   while true; do
     h=$(printf "%s" "$domain" | cut -d . -f $i-100)
     if [ -z "$h" ]; then
@@ -106,18 +113,15 @@ _get_root() {
       return 1
     fi
 
-    if ! _rest GET "domain.ashx?cmd=get&apiid=$LA_Id&apipass=$LA_Key&rtype=json&domain=$h"; then
+    if ! _la_rest "domain.ashx?cmd=get&apiid=$LA_Id&apipass=$LA_Key&rtype=json&domain=$h"; then
       return 1
     fi
 
-    if _contains "$response" "\"code\":300"; then
-      _domain_id=$(printf "%s" "$response" | grep '"domainid"' | cut -d : -f 2 | cut -d , -f 1 | tr -d '\r' | tr -d '\n')
-      _debug _domain_id "$_domain_id"
+    if _contains "$response" '"domainid":'; then
+      _domain_id=$(printf "%s" "$response" | grep '"domainid":' | cut -d : -f 2 | cut -d , -f 1 | tr -d '\r' | tr -d '\n')
       if [ "$_domain_id" ]; then
         _sub_domain=$(printf "%s" "$domain" | cut -d . -f 1-$p)
-        _debug _sub_domain "$_sub_domain"
         _domain="$h"
-        _debug _domain "$_domain"
         return 0
       fi
       return 1
@@ -128,27 +132,16 @@ _get_root() {
   return 1
 }
 
-#Usage: method  URI  data
-_rest() {
-  m="$1"
-  ep="$2"
-  data="$3"
-  _debug "$ep"
-  url="$DNSLA_API$ep"
-
-  _debug url "$url"
-
-  if [ "$m" = "GET" ]; then
-    response="$(_get "$url" | tr -d ' ' | tr "}" ",")"
-  else
-    _debug2 data "$data"
-    response="$(_post "$data" "$url" | tr -d ' ' | tr "}" ",")"
-  fi
+#Usage:  URI
+_la_rest() {
+  url="$LA_Api/$1"
+  _debug "$url"
 
-  if [ "$?" != "0" ]; then
-    _err "error $ep"
+  if ! response="$(_get "$url" | tr -d ' ' | tr "}" ",")"; then
+    _err "Error: $url"
     return 1
   fi
+
   _debug2 response "$response"
   return 0
 }