]> git.proxmox.com Git - mirror_acme.sh.git/blob - dnsapi/dns_loopia.sh
Merge with latest dev branch.
[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 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
41 _loopia_add_record "$_domain" "$_sub_domain"
42 _loopia_update_record "$_domain" "$_sub_domain" "$txtvalue"
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
99 _get_root() {
100 domain=$1
101 _debug "get root"
102
103 domain=$1
104 i=2
105 p=1
106
107 xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
108 <methodCall>
109 <methodName>getDomains</methodName>
110 <params>
111 <param>
112 <value><string>%s</string></value>
113 </param>
114 <param>
115 <value><string>%s</string></value>
116 </param>
117 </params>
118 </methodCall>' $LOOPIA_User $LOOPIA_Password)
119
120 response="$(_post "$xml_content" "$LOOPIA_Api" "" "POST")"
121 while true; do
122 h=$(echo "$domain" | cut -d . -f $i-100)
123 if [ -z "$h" ]; then
124 #not valid
125 return 1
126 fi
127
128 if _contains "$response" "$h"; then
129 _sub_domain=$(printf "%s" "$domain" | cut -d . -f 1-$p)
130 _domain="$h"
131 return 0
132 fi
133 p=$i
134 i=$(_math "$i" + 1)
135 done
136 return 1
137
138 }
139
140 _loopia_update_record() {
141 domain=$1
142 sub_domain=$2
143 txtval=$3
144
145 xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
146 <methodCall>
147 <methodName>updateZoneRecord</methodName>
148 <params>
149 <param>
150 <value><string>%s</string></value>
151 </param>
152 <param>
153 <value><string>%s</string></value>
154 </param>
155 <param>
156 <value><string>%s</string></value>
157 </param>
158 <param>
159 <value><string>%s</string></value>
160 </param>
161 <param>
162 <struct>
163 <member>
164 <name>type</name>
165 <value><string>TXT</string></value>
166 </member>
167 <member>
168 <name>priority</name>
169 <value><int>0</int></value>
170 </member>
171 <member>
172 <name>ttl</name>
173 <value><int>60</int></value>
174 </member>
175 <member>
176 <name>rdata</name>
177 <value><string>%s</string></value>
178 </member>
179 <member>
180 <name>record_id</name>
181 <value><int>0</int></value>
182 </member>
183 </struct>
184 </param>
185 </params>
186 </methodCall>' $LOOPIA_User $LOOPIA_Password "$domain" "$sub_domain" "$txtval")
187
188 response="$(_post "$xml_content" "$LOOPIA_Api" "" "POST")"
189
190 if ! _contains "$response" "OK"; then
191 _err "Error"
192 return 1
193 fi
194 return 0
195 }
196
197 _loopia_add_record() {
198 domain=$1
199 sub_domain=$2
200
201 xml_content=$(printf '<?xml version="1.0" encoding="UTF-8"?>
202 <methodCall>
203 <methodName>addSubdomain</methodName>
204 <params>
205 <param>
206 <value><string>%s</string></value>
207 </param>
208 <param>
209 <value><string>%s</string></value>
210 </param>
211 <param>
212 <value><string>%s</string></value>
213 </param>
214 <param>
215 <value><string>%s</string></value>
216 </param>
217 </params>
218 </methodCall>' $LOOPIA_User $LOOPIA_Password "$domain" "$sub_domain")
219
220 response="$(_post "$xml_content" "$LOOPIA_Api" "" "POST")"
221
222 if ! _contains "$response" "OK"; then
223 _err "Error"
224 return 1
225 fi
226 return 0
227 }