2017-03-15 18:40:32 +00:00
#!/usr/bin/env sh
#Client ID
2017-03-28 15:11:04 +00:00
#Dynu_ClientId="0b71cae7-a099-4f6b-8ddf-94571cdb760d"
2017-03-15 18:40:32 +00:00
#
#Secret
2017-03-28 15:11:04 +00:00
#Dynu_Secret="aCUEY4BDCV45KI8CSIC3sp2LKQ9"
2017-03-15 18:40:32 +00:00
#
#Token
Dynu_Token = ""
#
#Endpoint
Dynu_EndPoint = "https://api.dynu.com/v1"
######## Public functions #####################
#Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
dns_dynu_add( ) {
fulldomain = $1
txtvalue = $2
if [ -z " $Dynu_ClientId " ] || [ -z " $Dynu_Secret " ] ; then
Dynu_ClientId = ""
Dynu_Secret = ""
_err "Dynu client id and secret is not specified."
_err "Please create you API client id and secret and try again."
return 1
fi
#save the client id and secret to the account conf file.
_saveaccountconf Dynu_ClientId " $Dynu_ClientId "
_saveaccountconf Dynu_Secret " $Dynu_Secret "
if [ -z " $Dynu_Token " ] ; then
_info "Getting Dynu token"
if ! _dynu_authentication; then
_err "Can not get token."
fi
fi
_debug "Detect root zone"
if ! _get_root " $fulldomain " ; then
_err "Invalid domain"
return 1
2017-03-27 20:39:31 +00:00
fi
2017-03-15 18:40:32 +00:00
_debug _node " $_node "
_debug _domain_name " $_domain_name "
_info "Creating TXT record"
if ! _dynu_rest POST "dns/record/add" " {\"domain_name\":\" $_domain_name \",\"node_name\":\" $_node \",\"record_type\":\"TXT\",\"text_data\":\" $txtvalue \",\"state\":true,\"ttl\":90} " ; then
return 1
fi
if ! _contains " $response " "text_data" ; then
_err "Could not add TXT record"
return 1
fi
return 0
}
#fulldomain
dns_dynu_rm( ) {
fulldomain = $1
}
######## Private functions below ##################################
#_acme-challenge.www.domain.com
#returns
# _node=_acme-challenge.www
# _domain_name=domain.com
_get_root( ) {
domain = $1
if ! _dynu_rest GET " dns/getroot/ $domain " ; then
return 1
fi
if ! _contains " $response " "domain_name" ; then
_debug "Domain name not found"
return 1
fi
_domain_name = $( printf "%s" " $response " | tr -d "{}" | cut -d , -f 1 | cut -d : -f 2 | cut -d '"' -f 2)
_node = $( printf "%s" " $response " | tr -d "{}" | cut -d , -f 3 | cut -d : -f 2 | cut -d '"' -f 2)
2017-03-27 20:39:31 +00:00
return 0
2017-03-15 18:40:32 +00:00
}
_dynu_rest( ) {
m = $1
ep = " $2 "
data = " $3 "
_debug " $ep "
export _H1 = " Authorization: Bearer $Dynu_Token "
export _H2 = "Content-Type: application/json"
if [ " $data " ] ; then
_debug data " $data "
response = " $( _post " $data " " $Dynu_EndPoint / $ep " "" " $m " ) "
else
echo " Getting $Dynu_EndPoint / $ep "
response = " $( _get " $Dynu_EndPoint / $ep " ) "
fi
if [ " $? " != "0" ] ; then
_err " error $ep "
return 1
fi
_debug2 response " $response "
return 0
}
_dynu_authentication( ) {
2017-03-27 19:38:12 +00:00
realm = " $( printf "%s" " $Dynu_ClientId : $Dynu_Secret " | _base64) "
2017-03-27 20:39:31 +00:00
2017-03-27 19:27:21 +00:00
export _H1 = " Authorization: Basic $realm "
2017-03-15 18:40:32 +00:00
export _H2 = "Content-Type: application/json"
response = " $( _get " $Dynu_EndPoint /oauth2/token " ) "
if [ " $? " != "0" ] ; then
_err "Authentication failed."
return 1
fi
if _contains " $response " "accessToken" ; then
Dynu_Token = $( printf "%s" " $response " | tr -d "[]" | cut -d , -f 2 | cut -d : -f 2 | cut -d '"' -f 2)
fi
if _contains " $Dynu_Token " "null" ; then
Dynu_Token = ""
fi
2017-03-27 20:39:31 +00:00
2017-03-15 18:40:32 +00:00
_debug2 response " $response "
return 0
}