]> git.proxmox.com Git - mirror_acme.sh.git/blame - dnsapi/dns_loopia.sh
Merge pull request #3964 from gabbe/Loopia_API_is_updated
[mirror_acme.sh.git] / dnsapi / dns_loopia.sh
CommitLineData
cac3b3ea
IL
1#!/usr/bin/env sh
2
3#
4#LOOPIA_User="username"
5#
6#LOOPIA_Password="password"
0daa225e
MT
7#
8#LOOPIA_Api="https://api.loopia.<TLD>/RPCSERV"
cac3b3ea 9
0daa225e 10LOOPIA_Api_Default="https://api.loopia.se/RPCSERV"
cac3b3ea
IL
11
12######## Public functions #####################
13
14#Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
15dns_loopia_add() {
16 fulldomain=$1
17 txtvalue=$2
18
978ec911 19 if ! _loopia_load_config; then
cac3b3ea
IL
20 return 1
21 fi
22
a7d61461 23 _loopia_save_config
cac3b3ea
IL
24
25 _debug "First detect the root zone"
26 if ! _get_root "$fulldomain"; then
27 _err "invalid domain"
28 return 1
29 fi
30 _debug _sub_domain "$_sub_domain"
31 _debug _domain "$_domain"
32
33 _info "Adding record"
34
40f0238b
MS
35 _loopia_add_sub_domain "$_domain" "$_sub_domain"
36 _loopia_add_record "$_domain" "$_sub_domain" "$txtvalue"
cac3b3ea
IL
37
38}
39
40dns_loopia_rm() {
41 fulldomain=$1
42 txtvalue=$2
43
978ec911 44 if ! _loopia_load_config; then
cac3b3ea
IL
45 return 1
46 fi
47
a7d61461 48 _loopia_save_config
cac3b3ea
IL
49
50 _debug "First detect the root zone"
51 if ! _get_root "$fulldomain"; then
52 _err "invalid domain"
53 return 1
54 fi
55
56 xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
57 <methodCall>
58 <methodName>removeSubdomain</methodName>
59 <params>
60 <param>
61 <value><string>%s</string></value>
62 </param>
63 <param>
64 <value><string>%s</string></value>
65 </param>
66 <param>
67 <value><string>%s</string></value>
68 </param>
69 <param>
70 <value><string>%s</string></value>
71 </param>
72 </params>
aec9c3c9 73 </methodCall>' "$LOOPIA_User" "$LOOPIA_Password" "$_domain" "$_sub_domain")
cac3b3ea
IL
74
75 response="$(_post "$xml_content" "$LOOPIA_Api" "" "POST")"
76
77 if ! _contains "$response" "OK"; then
78 _err "Error could not get txt records"
79 return 1
80 fi
81}
82
83#################### Private functions below ##################################
84
978ec911 85_loopia_load_config() {
0daa225e 86 LOOPIA_Api="${LOOPIA_Api:-$(_readaccountconf_mutable LOOPIA_Api)}"
978ec911
MT
87 LOOPIA_User="${LOOPIA_User:-$(_readaccountconf_mutable LOOPIA_User)}"
88 LOOPIA_Password="${LOOPIA_Password:-$(_readaccountconf_mutable LOOPIA_Password)}"
89
0daa225e
MT
90 if [ -z "$LOOPIA_Api" ]; then
91 LOOPIA_Api="$LOOPIA_Api_Default"
92 fi
93
978ec911
MT
94 if [ -z "$LOOPIA_User" ] || [ -z "$LOOPIA_Password" ]; then
95 LOOPIA_User=""
96 LOOPIA_Password=""
97
85be2b85
MT
98 _err "A valid Loopia API user and password not provided."
99 _err "Please provide a valid API user and try again."
978ec911
MT
100
101 return 1
102 fi
103
104 return 0
105}
106
a7d61461 107_loopia_save_config() {
0daa225e
MT
108 if [ "$LOOPIA_Api" != "$LOOPIA_Api_Default" ]; then
109 _saveaccountconf_mutable LOOPIA_Api "$LOOPIA_Api"
110 fi
a7d61461
MT
111 _saveaccountconf_mutable LOOPIA_User "$LOOPIA_User"
112 _saveaccountconf_mutable LOOPIA_Password "$LOOPIA_Password"
113}
114
40f0238b
MS
115_loopia_get_records() {
116 domain=$1
117 sub_domain=$2
118
119 xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
120 <methodCall>
121 <methodName>getZoneRecords</methodName>
122 <params>
123 <param>
124 <value><string>%s</string></value>
125 </param>
126 <param>
127 <value><string>%s</string></value>
128 </param>
129 <param>
130 <value><string>%s</string></value>
131 </param>
132 <param>
133 <value><string>%s</string></value>
134 </param>
135 </params>
b75e90f8 136 </methodCall>' "$LOOPIA_User" "$LOOPIA_Password" "$domain" "$sub_domain")
40f0238b
MS
137
138 response="$(_post "$xml_content" "$LOOPIA_Api" "" "POST")"
139 if ! _contains "$response" "<array>"; then
140 _err "Error"
141 return 1
142 fi
143 return 0
144}
145
cac3b3ea
IL
146_get_root() {
147 domain=$1
148 _debug "get root"
149
150 domain=$1
151 i=2
152 p=1
153
154 xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
155 <methodCall>
156 <methodName>getDomains</methodName>
157 <params>
158 <param>
159 <value><string>%s</string></value>
160 </param>
161 <param>
162 <value><string>%s</string></value>
163 </param>
164 </params>
b75e90f8 165 </methodCall>' "$LOOPIA_User" "$LOOPIA_Password")
cac3b3ea
IL
166
167 response="$(_post "$xml_content" "$LOOPIA_Api" "" "POST")"
168 while true; do
413f0718 169 h=$(echo "$domain" | cut -d . -f $i-100)
cac3b3ea
IL
170 if [ -z "$h" ]; then
171 #not valid
172 return 1
173 fi
174
175 if _contains "$response" "$h"; then
176 _sub_domain=$(printf "%s" "$domain" | cut -d . -f 1-$p)
177 _domain="$h"
178 return 0
179 fi
180 p=$i
181 i=$(_math "$i" + 1)
182 done
183 return 1
184
185}
186
40f0238b 187_loopia_add_record() {
cac3b3ea
IL
188 domain=$1
189 sub_domain=$2
190 txtval=$3
191
192 xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
193 <methodCall>
40f0238b 194 <methodName>addZoneRecord</methodName>
cac3b3ea
IL
195 <params>
196 <param>
197 <value><string>%s</string></value>
198 </param>
199 <param>
200 <value><string>%s</string></value>
201 </param>
202 <param>
203 <value><string>%s</string></value>
204 </param>
205 <param>
206 <value><string>%s</string></value>
207 </param>
208 <param>
0ed4fc6a
GT
209 <value>
210 <struct>
211 <member>
212 <name>type</name>
213 <value><string>TXT</string></value>
214 </member>
215 <member>
216 <name>priority</name>
217 <value><int>0</int></value>
218 </member>
219 <member>
220 <name>ttl</name>
221 <value><int>300</int></value>
222 </member>
223 <member>
224 <name>rdata</name>
225 <value><string>%s</string></value>
226 </member>
227 </struct>
228 </value>
cac3b3ea
IL
229 </param>
230 </params>
b75e90f8 231 </methodCall>' "$LOOPIA_User" "$LOOPIA_Password" "$domain" "$sub_domain" "$txtval")
cac3b3ea
IL
232
233 response="$(_post "$xml_content" "$LOOPIA_Api" "" "POST")"
234
8995d343 235 if ! _contains "$response" "OK"; then
cac3b3ea
IL
236 _err "Error"
237 return 1
238 fi
239 return 0
240}
241
40f0238b 242_sub_domain_exists() {
cac3b3ea
IL
243 domain=$1
244 sub_domain=$2
245
40f0238b
MS
246 xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
247 <methodCall>
248 <methodName>getSubdomains</methodName>
249 <params>
250 <param>
251 <value><string>%s</string></value>
252 </param>
253 <param>
254 <value><string>%s</string></value>
255 </param>
256 <param>
257 <value><string>%s</string></value>
258 </param>
259 </params>
b75e90f8 260 </methodCall>' "$LOOPIA_User" "$LOOPIA_Password" "$domain")
40f0238b
MS
261
262 response="$(_post "$xml_content" "$LOOPIA_Api" "" "POST")"
263
264 if _contains "$response" "$sub_domain"; then
265 return 0
266 fi
267 return 1
268}
269
270_loopia_add_sub_domain() {
271 domain=$1
272 sub_domain=$2
273
274 if _sub_domain_exists "$domain" "$sub_domain"; then
275 return 0
276 fi
277
cac3b3ea
IL
278 xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
279 <methodCall>
280 <methodName>addSubdomain</methodName>
281 <params>
282 <param>
283 <value><string>%s</string></value>
284 </param>
285 <param>
286 <value><string>%s</string></value>
287 </param>
288 <param>
289 <value><string>%s</string></value>
290 </param>
291 <param>
292 <value><string>%s</string></value>
293 </param>
294 </params>
b75e90f8 295 </methodCall>' "$LOOPIA_User" "$LOOPIA_Password" "$domain" "$sub_domain")
cac3b3ea
IL
296
297 response="$(_post "$xml_content" "$LOOPIA_Api" "" "POST")"
298
8995d343 299 if ! _contains "$response" "OK"; then
cac3b3ea
IL
300 _err "Error"
301 return 1
302 fi
303 return 0
304}