3 # Author: Boyan Peychev <boyan at cloudns dot net>
4 # Repository: https://github.com/ClouDNS/acme.sh/
7 #CLOUDNS_AUTH_PASSWORD="YYYYYYYYY"
8 CLOUDNS_API
="https://api.cloudns.net"
10 ######## Public functions #####################
12 #Usage: dns_cloudns_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
16 if ! _dns_cloudns_init_check
; then
20 zone
="$(_dns_cloudns_get_zone_name "$1")"
21 if [ -z "$zone" ]; then
22 _err
"Missing DNS zone at ClouDNS. Please log into your control panel and create the required DNS zone for the initial setup."
26 host="$(echo "$1" | sed "s
/\.
$zone\$
//")"
28 record_id
=$
(_dns_cloudns_get_record_id
"$zone" "$host")
32 _debug record
"$record"
33 _debug record_id
"$record_id"
35 if [ -z "$record_id" ]; then
36 _info
"Adding the TXT record for $1"
37 _dns_cloudns_http_api_call
"dns/add-record.json" "domain-name=$zone&record-type=TXT&host=$host&record=$record&ttl=60"
38 if ! _contains
"$response" "\"status\":\"Success\""; then
39 _err
"Record cannot be added."
44 _info
"Updating the TXT record for $1"
45 _dns_cloudns_http_api_call
"dns/mod-record.json" "domain-name=$zone&record-id=$record_id&record-type=TXT&host=$host&record=$record&ttl=60"
46 if ! _contains
"$response" "\"status\":\"Success\""; then
47 _err
"The TXT record for $1 cannot be updated."
56 #Usage: dns_cloudns_rm _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
60 if ! _dns_cloudns_init_check
; then
64 if [ -z "$zone" ]; then
65 zone
="$(_dns_cloudns_get_zone_name "$1")"
66 if [ -z "$zone" ]; then
67 _err
"Missing DNS zone at ClouDNS. Please log into your control panel and create the required DNS zone for the initial setup."
72 host="$(echo "$1" | sed "s
/\.
$zone\$
//")"
74 record_id
=$
(_dns_cloudns_get_record_id
"$zone" "$host")
78 _debug record
"$record"
79 _debug record_id
"$record_id"
81 if [ ! -z "$record_id" ]; then
82 _info
"Deleting the TXT record for $1"
83 _dns_cloudns_http_api_call
"dns/delete-record.json" "domain-name=$zone&record-id=$record_id"
84 if ! _contains
"$response" "\"status\":\"Success\""; then
85 _err
"The TXT record for $1 cannot be deleted."
93 #################### Private functions below ##################################
94 _dns_cloudns_init_check
() {
95 if [ ! -z "$CLOUDNS_INIT_CHECK_COMPLETED" ]; then
99 CLOUDNS_AUTH_ID
="${CLOUDNS_AUTH_ID:-$(_readaccountconf_mutable CLOUDNS_AUTH_ID)}"
100 CLOUDNS_AUTH_PASSWORD
="${CLOUDNS_AUTH_PASSWORD:-$(_readaccountconf_mutable CLOUDNS_AUTH_PASSWORD)}"
101 if [ -z "$CLOUDNS_AUTH_ID" ] ||
[ -z "$CLOUDNS_AUTH_PASSWORD" ]; then
103 CLOUDNS_AUTH_PASSWORD
=""
104 _err
"You don't specify cloudns api id and password yet."
105 _err
"Please create you id and password and try again."
109 if [ -z "$CLOUDNS_AUTH_ID" ]; then
110 _err
"CLOUDNS_AUTH_ID is not configured"
114 if [ -z "$CLOUDNS_AUTH_PASSWORD" ]; then
115 _err
"CLOUDNS_AUTH_PASSWORD is not configured"
119 _dns_cloudns_http_api_call
"dns/login.json" ""
121 if ! _contains
"$response" "\"status\":\"Success\""; then
122 _err
"Invalid CLOUDNS_AUTH_ID or CLOUDNS_AUTH_PASSWORD. Please check your login credentials."
126 #save the api id and password to the account conf file.
127 _saveaccountconf_mutable CLOUDNS_AUTH_ID
"$CLOUDNS_AUTH_ID"
128 _saveaccountconf_mutable CLOUDNS_AUTH_PASSWORD
"$CLOUDNS_AUTH_PASSWORD"
130 CLOUDNS_INIT_CHECK_COMPLETED
=1
135 _dns_cloudns_get_zone_name
() {
138 zoneForCheck
=$
(printf "%s" "$1" | cut
-d .
-f $i-100)
140 if [ -z "$zoneForCheck" ]; then
144 _debug zoneForCheck
"$zoneForCheck"
146 _dns_cloudns_http_api_call
"dns/get-zone-info.json" "domain-name=$zoneForCheck"
148 if ! _contains
"$response" "\"status\":\"Failed\""; then
158 _dns_cloudns_get_record_id
() {
159 _dns_cloudns_http_api_call
"dns/records.json" "domain-name=$1&host=$2&type=TXT"
160 if _contains
"$response" "\"id\":"; then
161 echo "$response" | cut
-d '"' -f 2
167 _dns_cloudns_http_api_call
() {
170 _debug CLOUDNS_AUTH_ID
"$CLOUDNS_AUTH_ID"
171 _debug CLOUDNS_AUTH_PASSWORD
"$CLOUDNS_AUTH_PASSWORD"
174 data
="auth-id=$CLOUDNS_AUTH_ID&auth-password=$CLOUDNS_AUTH_PASSWORD"
176 data
="auth-id=$CLOUDNS_AUTH_ID&auth-password=$CLOUDNS_AUTH_PASSWORD&$2"
179 response
="$(_get "$CLOUDNS_API/$method?
$data")"
181 _debug2 response
"$response"