]>
Commit | Line | Data |
---|---|---|
cac3b3ea IL |
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 | 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 | ||
46 | dns_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 | } |