Browse Source

add versio API (dns_versio.sh)

pull/1838/head
lebaned 6 years ago
committed by Tom Blauwendraat
parent
commit
b145569be0
  1. 19
      README.md
  2. 1
      dnsapi/README.md
  3. 211
      dnsapi/dns_versio.sh

19
README.md

@ -329,6 +329,25 @@ See: https://github.com/acmesh-official/acme.sh/wiki/dns-manual-mode first.
If your dns provider doesn't support any api access, you can add the txt record by hand. If your dns provider doesn't support any api access, you can add the txt record by hand.
And:
**lexicon DNS API: https://github.com/Neilpang/acme.sh/wiki/How-to-use-lexicon-dns-api
(DigitalOcean, DNSimple, DNSMadeEasy, DNSPark, EasyDNS, Namesilo, NS1, PointHQ, Rage4 and Vultr etc.)**
**More APIs coming soon...**
If your DNS provider is not on the supported list above, you can write your own DNS API script easily. If you do, please consider submitting a [Pull Request](https://github.com/Neilpang/acme.sh/pulls) and contribute it to the project.
For more details: [How to use DNS API](dnsapi)
# 8. Use DNS manual mode:
See: https://github.com/Neilpang/acme.sh/wiki/dns-manual-mode first.
If your dns provider doesn't support any api access, you can add the txt record by your hand.
>>>>>>> 10a24dc... add versio API (dns_versio.sh)
```bash ```bash
acme.sh --issue --dns -d example.com -d www.example.com -d cp.example.com acme.sh --issue --dns -d example.com -d www.example.com -d cp.example.com
``` ```

1
dnsapi/README.md

@ -3,4 +3,3 @@ DNS api usage:
https://github.com/acmesh-official/acme.sh/wiki/dnsapi https://github.com/acmesh-official/acme.sh/wiki/dnsapi

211
dnsapi/dns_versio.sh

@ -0,0 +1,211 @@
#!/usr/bin/env sh
#
# DNS API for Versio.nl
# Author: lebaned <github@bakker.cloud>
# Report Bugs here: https://github.com/lebaned/acme.sh
#
######## Public functions #####################
#Usage: dns_versio_add _acme-challenge.www.domain.com "[txtvalue]"
dns_versio_add() {
fulldomain=$1
txtvalue=$2
_info "Using Versio"
_debug fulldomain "$fulldomain"
_debug txtvalue "$txtvalue"
if ! _get_credentials; then
return 1
fi
#save the credentials to the account conf file.
_saveaccountconf_mutable Versio_Username "$Versio_Username"
_saveaccountconf_mutable Versio_Password "$Versio_Password"
_debug "First detect the root zone"
if ! _get_root "$fulldomain"; then
_err "invalid domain"
return 1
fi
_info fulldomain "$fulldomain"
_info _domain "$_domain"
_info _sub_domain "$_sub_domain"
if ! _get_dns_records "$_domain"; then
_err "invalid domain"
return 1
fi
_debug "orginal dnsrecords" "$_dns_records"
_delete_dns_record "TXT" "$fulldomain."
_debug "dnsrecords after deleted old record" "$_dns_records"
_add_dns_record "TXT" "$fulldomain" "\\\"$txtvalue\\\"" 0 300
_debug "dnsrecords after add record" "{\"dns_records\":[$_dns_records]}"
if _versio_rest POST "domains/$_domain/update" "{\"dns_records\":[$_dns_records]}"; then
_debug "rest update response" "$response"
return 0
fi
_err "Error!"
return 1
}
#Usage: fulldomain txtvalue
#Remove the txt record after validation.
dns_versio_rm() {
fulldomain=$1
txtvalue=$2
_info "Using Versio"
_debug fulldomain "$fulldomain"
_debug txtvalue "$txtvalue"
if ! _get_credentials; then
return 1
fi
_debug "First detect the root zone"
if ! _get_root "$fulldomain"; then
_err "invalid domain"
return 1
fi
_debug fulldomain "$fulldomain"
_debug _domain "$_domain"
_debug _sub_domain "$_sub_domain"
if ! _get_dns_records "$_domain"; then
_err "invalid domain"
return 1
fi
_debug "orginal dnsrecords" "$_dns_records"
_delete_dns_record "TXT" "$fulldomain."
_debug "dnsrecords after deleted old record" "$_dns_records"
if _versio_rest POST "domains/$_domain/update" "{\"dns_records\":[$_dns_records]}"; then
_debug "rest update response" "$response"
return 0
fi
_err "Error!"
return 1
}
#################### Private functions below ##################################
#_acme-challenge.www.domain.com
#returns
# _sub_domain=_acme-challenge.www
# _domain=domain.com
_get_root() {
domain=$1
i=2
p=1
if _versio_rest GET "domains?status=OK"; then
response="$(echo "$response" | tr -d "\n" | sed 's/{/\n&/g')"
while true; do
h=$(printf "%s" "$domain" | cut -d . -f $i-100)
_info h "$h"
_debug h "$h"
if [ -z "$h" ]; then
#not valid
return 1
fi
hostedzone="$(echo "$response" | _egrep_o "{.*\"domain\":\s*\"$h\".*}")"
if [ "$hostedzone" ]; then
_sub_domain=$(printf "%s" "$domain" | cut -d . -f 1-$p)
_domain=$h
return 0
fi
p=$i
i=$(_math "$i" + 1)
done
fi
return 1
}
#parameters: [record type] [record name]
_delete_dns_record() {
_dns_records=$(echo "$_dns_records" | sed 's/{"type":"'"$1"'","name":"'"$2"'"[^}]*}[,]\?//' | sed 's/,$//')
}
#parameters: [type] [name] [value] [prio] [ttl]
_add_dns_record() {
_dns_records="$_dns_records,{\"type\":\"$1\",\"name\":\"$2\",\"value\":\"$3\",\"prio\":$4,\"ttl\":$5}"
}
#parameters: [root domain]
#returns
# _dns_records
_get_dns_records() {
if _versio_rest GET "domains/$1?show_dns_records=true"; then
_dns_records=$(echo "$response" | grep -oP '(?<="dns_records":\[)[^\]]*')
return 0
fi
return 1
}
#method uri qstr data
_versio_rest() {
mtd="$1"
ep="$2"
data="$3"
_debug mtd "$mtd"
_debug ep "$ep"
VERSIO_API_URL="https://www.versio.nl/api/v1"
VERSIO_CREDENTIALS_BASE64=$(printf "%s:%s" "$Versio_Username" "$Versio_Password" | openssl enc -base64)
export _H1="Accept: application/json"
export _H2="Content-Type: application/json"
export _H3="Authorization: Basic $VERSIO_CREDENTIALS_BASE64"
if [ "$mtd" != "GET" ]; then
# both POST and DELETE.
_debug data "$data"
response="$(_post "$data" "$VERSIO_API_URL/$ep" "" "$mtd")"
else
response="$(_get "$VERSIO_API_URL/$ep")"
fi
case $? in
0)
_debug response "$response"
return 0
;;
6)
_err "Authentication failure. Check your Versio email address and password"
return 1
;;
*)
_err "Unknown error"
return 1
;;
esac
}
#parameters: []
#returns:
# Versio_Username
# Versio_Password
_get_credentials() {
Versio_Username="${Versio_Username:-$(_readaccountconf_mutable Versio_Username)}"
Versio_Password="${Versio_Password:-$(_readaccountconf_mutable Versio_Password)}"
if [ -z "$Versio_Username" ] || [ -z "$Versio_Password" ]; then
Versio_Username=""
Versio_Password=""
_err "You don't specify Versio email address and/or password yet."
_err "Example:"
_err "export Versio_Username=[email address]"
_err "export Versio_Password=[password]"
return 1
fi
return 0
}
Loading…
Cancel
Save