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