]>
Commit | Line | Data |
---|---|---|
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 | 10 | LOOPIA_Api_Default="https://api.loopia.se/RPCSERV" |
cac3b3ea IL |
11 | |
12 | ######## Public functions ##################### | |
13 | ||
14 | #Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs" | |
15 | dns_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 | ||
40 | dns_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 | } |