mirror of
https://github.com/acmesh-official/acme.sh.git
synced 2025-05-10 07:02:56 +00:00
Added DNS plugin for WEDOS.com
This commit is contained in:
parent
f90a2ae195
commit
be4ef7c803
@ -320,6 +320,7 @@ You don't have to do anything manually!
|
||||
1. Loopia.se API
|
||||
1. acme-dns (https://github.com/joohoi/acme-dns)
|
||||
1. TELE3 (https://www.tele3.cz)
|
||||
1. WEDOS WAPI (https://hosting.wedos.com/en/)
|
||||
|
||||
And:
|
||||
|
||||
|
@ -876,6 +876,21 @@ acme.sh --issue --dns dns_tele3 -d example.com -d *.example.com
|
||||
```
|
||||
|
||||
The TELE3_Key and TELE3_Secret will be saved in ~/.acme.sh/account.conf and will be reused when needed.
|
||||
## 47. Use WEDOS WAPI
|
||||
|
||||
First you need login to WEDOS customer administration to set your WAPI password and allowed IP addresses.
|
||||
https://client.wedos.com/client/wapi.html
|
||||
|
||||
```
|
||||
export WEDOS_Email="customer@example.com"
|
||||
export WEDOS_ApiPassword="1l+C+}mcFT0c38"
|
||||
|
||||
acme.sh --issue --dns dns_wedos --dnssleep 1800 -d example.com -d *.example.com
|
||||
```
|
||||
|
||||
The `WEDOS_Email` and `WEDOS_ApiPassword` will be saved in `~/.acme.sh/account.conf` and will be reused when needed.
|
||||
|
||||
**Notice:** Verifying a single domain (creating and deleting a record) generates 7 requests to WAPI. The limit is 1000 requests per hour.
|
||||
# Use custom API
|
||||
|
||||
If your API is not supported yet, you can write your own DNS API.
|
||||
|
198
dnsapi/dns_wedos.sh
Normal file
198
dnsapi/dns_wedos.sh
Normal file
@ -0,0 +1,198 @@
|
||||
#!/usr/bin/env sh
|
||||
#
|
||||
# WEDOS DNS WAPI
|
||||
# https://hosting.wedos.com/en/
|
||||
#
|
||||
# Author: Ondřej Budín
|
||||
# Report Bugs here: https://github.com/obud/acme.sh
|
||||
#
|
||||
# --
|
||||
# export WEDOS_Email="customer@example.com"
|
||||
# export WEDOS_ApiPassword="1l+C+}mcFT0c38"
|
||||
# --
|
||||
|
||||
WEDOS_URL="https://api.wedos.com/wapi/json"
|
||||
WEDOS_PREFIX="WEDOS WAPI:"
|
||||
|
||||
|
||||
##################################
|
||||
# Private functions #
|
||||
##################################
|
||||
|
||||
_wedos_init() {
|
||||
WEDOS_Email="${WEDOS_Email:-$(_readaccountconf_mutable WEDOS_Email)}"
|
||||
WEDOS_ApiPassword="${WEDOS_ApiPassword:-$(_readaccountconf_mutable WEDOS_ApiPassword)}"
|
||||
if [ -z "$WEDOS_Email" ] || [ -z "$WEDOS_ApiPassword" ]; then
|
||||
WEDOS_Email=""
|
||||
WEDOS_ApiPassword=""
|
||||
_err "You must export variables: WEDOS_Email and WEDOS_ApiPassword"
|
||||
return 1
|
||||
fi
|
||||
_saveaccountconf_mutable WEDOS_Email "$WEDOS_Email"
|
||||
_saveaccountconf_mutable WEDOS_ApiPassword "$WEDOS_ApiPassword"
|
||||
}
|
||||
|
||||
_wedos_call() {
|
||||
WEDOS_Auth="$(printf "%s" "$WEDOS_ApiPassword" | _digest sha1 hex)"
|
||||
WEDOS_Auth="$(printf "%s" "$WEDOS_Email$WEDOS_Auth$(date --date="TZ=\"Europe/Prague\" today" "+%H")" | _digest sha1 hex)"
|
||||
data="request={\"request\":{\"user\":\"$WEDOS_Email\",\"auth\":\"$WEDOS_Auth\",\"command\":\"$1\",\"clTRID\":\"acme.sh - WEDOS WAPI\",\"data\":$data}}"
|
||||
_debug data "$data"
|
||||
response="$(_post "$data" "$WEDOS_URL" "" "POST")"
|
||||
_debug response "$response"
|
||||
code=$(printf "%s" "$response" | cut -c 21-24)
|
||||
if [ "$code" = "2006" ]; then
|
||||
_err "$WEDOS_PREFIX API ERROR. Requests limit exceeded."
|
||||
return 1
|
||||
fi
|
||||
if [ "$code" = "2050" ]; then
|
||||
_err "$WEDOS_PREFIX API ERROR. Authentication failure."
|
||||
return 1
|
||||
fi
|
||||
if [ "$code" = "2051" ]; then
|
||||
_err "$WEDOS_PREFIX API ERROR. Access not allowed from this IP address."
|
||||
return 1
|
||||
fi
|
||||
if [ "$code" = "2052" ]; then
|
||||
_err "$WEDOS_PREFIX API ERROR. IP address temporarily blocked due to too many failed requests."
|
||||
return 1
|
||||
fi
|
||||
if [ "$code" = "2310" ]; then
|
||||
_err "$WEDOS_PREFIX API ERROR. DNS domain - rows count limit reached. Please contact WEDOS customer support to increase limit."
|
||||
return 1
|
||||
fi
|
||||
if [ "$code" != "1000" ]; then
|
||||
_err "$WEDOS_PREFIX API ERROR."
|
||||
_info ""
|
||||
_err "RESPONSE: $response"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
_wedos_get_root() {
|
||||
_info "$WEDOS_PREFIX Searching root zone..."
|
||||
data="[]"
|
||||
if ! _wedos_call "dns-domains-list"; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
domain=$1
|
||||
i=2
|
||||
p=1
|
||||
while true; do
|
||||
candidate=$(printf "%s" "$domain" | cut -d . -f "$i-100")
|
||||
_debug candidate "$candidate"
|
||||
|
||||
if [ -z "$candidate" ]; then
|
||||
_err "$WEDOS_PREFIX ERROR. Root zone not found."
|
||||
return 1
|
||||
fi
|
||||
|
||||
if _contains "$response" "\"name\":\"$candidate\"" >/dev/null && _contains "$response" "\"status\":\"active\"" >/dev/null; then
|
||||
_domain="$candidate"
|
||||
_sub_domain=$(printf "%s" "$domain" | cut -d . -f "1-$p")
|
||||
_info "$WEDOS_PREFIX OK."
|
||||
_debug _domain "$_domain"
|
||||
_debug _sub_domain "$_sub_domain"
|
||||
return 0
|
||||
fi
|
||||
p="$i"
|
||||
i=$(_math "$i" + 1)
|
||||
done
|
||||
return 1
|
||||
}
|
||||
|
||||
_wedos_get_record_id() {
|
||||
_info "$WEDOS_PREFIX Searching DNS record..."
|
||||
domain=$1
|
||||
sub_domain=$2
|
||||
r_data=$3
|
||||
|
||||
data="{\"domain\":\"$domain\"}"
|
||||
if ! _wedos_call "dns-rows-list"; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
if _contains "$response" "\"name\":\"$sub_domain\"" >/dev/null; then
|
||||
i=1
|
||||
while true; do
|
||||
row=$(printf "%s" "$response" | cut -d "}" -f "$i")
|
||||
_debug row "$row"
|
||||
|
||||
if [ -z "$row" ]; then
|
||||
_err "$WEDOS_PREFIX ERROR."
|
||||
return 1
|
||||
fi
|
||||
|
||||
if _contains "$row" "\"name\":\"$sub_domain\"" >/dev/null && _contains "$row" "\"rdata\":\"$r_data\"" >/dev/null; then
|
||||
_record_id=$(printf "%s" "$row" | _egrep_o "\[*\"ID\":\"[^\"]*\"" | head -n 1 | cut -d : -f 2 | tr -d \")
|
||||
if [ "$_record_id" ]; then
|
||||
_info "$WEDOS_PREFIX OK."
|
||||
return 0
|
||||
fi
|
||||
_err "$WEDOS_PREFIX ERROR."
|
||||
return 1
|
||||
fi
|
||||
i=$(_math "$i" + 1)
|
||||
done
|
||||
fi
|
||||
_err "$WEDOS_PREFIX ERROR. Record not found."
|
||||
return 1
|
||||
}
|
||||
|
||||
_wedos_commit() {
|
||||
_info "$WEDOS_PREFIX Committing changes..."
|
||||
data="{\"name\":\"$1\"}"
|
||||
if ! _wedos_call "dns-domain-commit"; then
|
||||
return 1
|
||||
fi
|
||||
_info "$WEDOS_PREFIX OK."
|
||||
}
|
||||
|
||||
|
||||
|
||||
##################################
|
||||
# Public functions #
|
||||
##################################
|
||||
|
||||
dns_wedos_add() {
|
||||
if ! _wedos_init; then
|
||||
return 1
|
||||
fi
|
||||
_info "$WEDOS_PREFIX $1"
|
||||
if ! _wedos_get_root "$1"; then
|
||||
return 1
|
||||
fi
|
||||
_info "$WEDOS_PREFIX Adding record..."
|
||||
data="{\"domain\":\"$_domain\",\"name\":\"$_sub_domain\",\"ttl\":300,\"type\":\"TXT\",\"rdata\":\"$2\"}"
|
||||
if ! _wedos_call "dns-row-add"; then
|
||||
return 1
|
||||
fi
|
||||
_info "$WEDOS_PREFIX OK."
|
||||
if ! _wedos_commit "$_domain"; then
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
dns_wedos_rm() {
|
||||
if ! _wedos_init; then
|
||||
return 1
|
||||
fi
|
||||
_info "$WEDOS_PREFIX $1"
|
||||
if ! _wedos_get_root "$1"; then
|
||||
return 1
|
||||
fi
|
||||
if ! _wedos_get_record_id "$_domain" "$_sub_domain" "$2"; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
_info "$WEDOS_PREFIX Removing record..."
|
||||
data="{\"domain\":\"$_domain\",\"row_id\":\"$_record_id\"}"
|
||||
if ! _wedos_call "dns-row-delete"; then
|
||||
return 1
|
||||
fi
|
||||
_info "$WEDOS_PREFIX OK."
|
||||
|
||||
if ! _wedos_commit "$_domain"; then
|
||||
return 1
|
||||
fi
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user