]> git.proxmox.com Git - mirror_acme.sh.git/blame - dnsapi/dns_fornex.sh
Merge pull request #4542 from alexleigh/master
[mirror_acme.sh.git] / dnsapi / dns_fornex.sh
CommitLineData
7278fd25
TU
1#!/usr/bin/env sh
2
3#Author: Timur Umarov <inbox@tumarov.com>
4
5FORNEX_API_URL="https://fornex.com/api/dns/v0.1"
6
7######## Public functions #####################
8
9#Usage: dns_fornex_add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
10dns_fornex_add() {
11 fulldomain=$1
12 txtvalue=$2
13
14 if ! _Fornex_API; then
15 return 1
16 fi
17
18 if ! _get_root "$fulldomain"; then
19 _err "Unable to determine root domain"
20 return 1
21 else
22 _debug _domain "$_domain"
23 fi
24
25 _info "Adding record"
26 if _rest POST "$_domain/entry_set/add/" "host=$fulldomain&type=TXT&value=$txtvalue&apikey=$FORNEX_API_KEY"; then
27 _debug _response "$response"
28 if _contains "$response" '"ok": true' || _contains "$response" 'Такая запись уже существует.'; then
29 _info "Added, OK"
30 return 0
31 fi
32 fi
33 _err "Add txt record error."
34 return 1
35}
36
37#Usage: dns_fornex_rm _acme-challenge.www.domain.com
38dns_fornex_rm() {
39 fulldomain=$1
40 txtvalue=$2
41
42 if ! _Fornex_API; then
43 return 1
44 fi
45
46 if ! _get_root "$fulldomain"; then
47 _err "Unable to determine root domain"
48 return 1
49 else
50 _debug _domain "$_domain"
51 fi
52
53 _debug "Getting txt records"
54 _rest GET "$_domain/entry_set.json?apikey=$FORNEX_API_KEY"
55
56 if ! _contains "$response" "$txtvalue"; then
57 _err "Txt record not found"
58 return 1
59 fi
60
61 _record_id="$(echo "$response" | _egrep_o "{[^{]*\"value\"*:*\"$txtvalue\"[^}]*}" | sed -n -e 's#.*"id": \([0-9]*\).*#\1#p')"
62 _debug "_record_id" "$_record_id"
63 if [ -z "$_record_id" ]; then
64 _err "can not find _record_id"
65 return 1
66 fi
67
68 if ! _rest POST "$_domain/entry_set/$_record_id/delete/" "apikey=$FORNEX_API_KEY"; then
69 _err "Delete record error."
70 return 1
71 fi
72 return 0
73}
74
75#################### Private functions below ##################################
76
77#_acme-challenge.www.domain.com
78#returns
79# _sub_domain=_acme-challenge.www
80# _domain=domain.com
81_get_root() {
82 domain=$1
83
a300df00 84 i=1
7278fd25
TU
85 while true; do
86 h=$(printf "%s" "$domain" | cut -d . -f $i-100)
87 _debug h "$h"
88 if [ -z "$h" ]; then
89 #not valid
90 return 1
91 fi
92
93 if ! _rest GET "domain_list.json?q=$h&apikey=$FORNEX_API_KEY"; then
94 return 1
95 fi
96
97 if _contains "$response" "\"$h\"" >/dev/null; then
98 _domain=$h
99 return 0
100 else
101 _debug "$h not found"
102 fi
103 i=$(_math "$i" + 1)
104 done
105
106 return 1
107}
108
109_Fornex_API() {
2b891f7f 110 FORNEX_API_KEY="${FORNEX_API_KEY:-$(_readaccountconf_mutable FORNEX_API_KEY)}"
7278fd25
TU
111 if [ -z "$FORNEX_API_KEY" ]; then
112 FORNEX_API_KEY=""
113
114 _err "You didn't specify the Fornex API key yet."
115 _err "Please create your key and try again."
116
117 return 1
118 fi
119
2b891f7f 120 _saveaccountconf_mutable FORNEX_API_KEY "$FORNEX_API_KEY"
7278fd25
TU
121}
122
123#method method action data
124_rest() {
125 m=$1
126 ep="$2"
127 data="$3"
128 _debug "$ep"
129
130 export _H1="Accept: application/json"
131
132 if [ "$m" != "GET" ]; then
133 _debug data "$data"
134 response="$(_post "$data" "$FORNEX_API_URL/$ep" "" "$m")"
135 else
136 response="$(_get "$FORNEX_API_URL/$ep" | _normalizeJson)"
137 fi
138
139 _ret="$?"
140 if [ "$_ret" != "0" ]; then
141 _err "error $ep"
142 return 1
143 fi
144 _debug2 response "$response"
145 return 0
146}