Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

update for dns.la new version api #4828

Closed
wants to merge 4 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
94 changes: 73 additions & 21 deletions dnsapi/dns_la.sh
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
#!/usr/bin/env sh

#LA_Id="test123"
#LA_Key="d1j2fdo4dee3948"
# LA_Ak="123"
# LA_Sk="456"
# LA_Token=""

LA_Api="https://api.dns.la/api"

Expand All @@ -12,19 +13,24 @@ dns_la_add() {
fulldomain=$1
txtvalue=$2

LA_Id="${LA_Id:-$(_readaccountconf_mutable LA_Id)}"
LA_Key="${LA_Key:-$(_readaccountconf_mutable LA_Key)}"
LA_Ak="${LA_Ak:-$(_readaccountconf_mutable LA_Ak)}"
LA_Sk="${LA_Sk:-$(_readaccountconf_mutable LA_Sk)}"
_log "LA_Ak=$LA_Ak"
_log "LA_Sk=$LA_Sk"

if [ -z "$LA_Id" ] || [ -z "$LA_Key" ]; then
LA_Id=""
LA_Key=""
if [ -z "$LA_Ak" ] || [ -z "$LA_Sk" ]; then
LA_Ak=""
LA_Sk=""
_err "You didn't specify a dnsla api id and key yet."
return 1
fi

#save the api key and email to the account conf file.
_saveaccountconf_mutable LA_Id "$LA_Id"
_saveaccountconf_mutable LA_Key "$LA_Key"
_saveaccountconf_mutable LA_Ak "$LA_Ak"
_saveaccountconf_mutable LA_Sk "$LA_Sk"

# generate dnsla token
_la_token

_debug "First detect the root zone"
if ! _get_root "$fulldomain"; then
Expand All @@ -36,19 +42,21 @@ dns_la_add() {
_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

# record type is enum in new api, 16 for TXT
if _la_post "{\"domainId\":\"$_domain_id\",\"type\":16,\"host\":\"$_sub_domain\",\"data\":\"$txtvalue\",\"ttl\":600}" "record"; then
if _contains "$response" '"id":'; then
_info "Added, OK"
return 0
elif _contains "$response" '"code":532'; then
elif _contains "$response" '"msg":"与已有记录冲突"'; then
_info "Already exists, OK"
return 0
else
_err "Add txt record error."
return 1
fi
fi
_err "Add txt record error."
_err "Add txt record failed."
return 1

}
Expand All @@ -58,8 +66,8 @@ dns_la_rm() {
fulldomain=$1
txtvalue=$2

LA_Id="${LA_Id:-$(_readaccountconf_mutable LA_Id)}"
LA_Key="${LA_Key:-$(_readaccountconf_mutable LA_Key)}"
LA_Ak="${LA_Ak:-$(_readaccountconf_mutable LA_Ak)}"
LA_Sk="${LA_Sk:-$(_readaccountconf_mutable LA_Sk)}"

_debug "First detect the root zone"
if ! _get_root "$fulldomain"; then
Expand All @@ -71,7 +79,8 @@ dns_la_rm() {
_debug _domain "$_domain"

_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
# record type is enum in new api, 16 for TXT
if ! _la_get "recordList?pageIndex=1&pageSize=10&domainid=$_domain_id&domain=$_domain&host=$_sub_domain&type=16&recorddata=$txtvalue"; then
_err "Error"
return 1
fi
Expand All @@ -87,7 +96,8 @@ dns_la_rm() {
_err "Can not get record id to remove."
return 1
fi
if ! _la_rest "record.ashx?cmd=remove&apiid=$LA_Id&apipass=$LA_Key&rtype=json&domainid=$_domain_id&domain=$_domain&recordid=$record_id"; then
# remove record in new api is RESTful
if ! _la_post "" "record?id=$record_id" "DELETE"; then
_err "Delete record error."
return 1
fi
Expand All @@ -113,12 +123,13 @@ _get_root() {
return 1
fi

if ! _la_rest "domain.ashx?cmd=get&apiid=$LA_Id&apipass=$LA_Key&rtype=json&domain=$h"; then
if ! _la_get "domain?domain=$h"; then
return 1
fi

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 _contains "$response" '"domain":'; then
_domain_id=$(printf "%s" "$response" | grep '"domain":' | cut -d : -f 5 | cut -d , -f 1 | tr -d '\r' | tr -d '\n' | sed 's/\"//g')
_log "_domain_id" "$_domain_id"
if [ "$_domain_id" ]; then
_sub_domain=$(printf "%s" "$domain" | cut -d . -f 1-$p)
_domain="$h"
Expand All @@ -137,11 +148,52 @@ _la_rest() {
url="$LA_Api/$1"
_debug "$url"

if ! response="$(_get "$url" | tr -d ' ' | tr "}" ",")"; then
if ! response="$(_get "$url" "Authorization: Basic $LA_Token" | tr -d ' ' | tr "}" ",")"; then
_err "Error: $url"
return 1
fi

_debug2 response "$response"
return 0
}

_la_get() {
url="$LA_Api/$1"
_debug "$url"

export _H1="Authorization: Basic $LA_Token"

if ! response="$(_get "$url" | tr -d ' ' | tr "}" ",")"; then
_err "Error: $url"
return 1
fi

_debug2 response "$response"
return 0
}

# Usage: _la_post body url [POST|PUT|DELETE]
_la_post() {
body=$1
url="$LA_Api/$2"
http_method=$3
_debug "$body"
_debug "$url"

export _H1="Authorization: Basic $LA_Token"

if ! response="$(_post "$body" "$url" "" "$http_method")"; then
_err "Error: $url"
return 1
fi

_debug2 response "$response"
return 0
}

_la_token() {
LA_Token=$(printf "%s:%s" "$LA_Ak" "$LA_Sk" | base64 -w 0)
_debug "$LA_Token"

return 0
}
Loading