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