]>
Commit | Line | Data |
---|---|---|
7278fd25 TU |
1 | #!/usr/bin/env sh |
2 | ||
3 | #Author: Timur Umarov <inbox@tumarov.com> | |
4 | ||
5 | FORNEX_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" | |
10 | dns_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 | |
38 | dns_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 | } |