4 #LOOPIA_User="username"
6 #LOOPIA_Password="password"
8 #LOOPIA_Api="https://api.loopia.<TLD>/RPCSERV"
10 LOOPIA_Api_Default
="https://api.loopia.se/RPCSERV"
12 ######## Public functions #####################
14 #Usage: add _acme-challenge.www.domain.com "XKrxpRBosdIKFzxW_CT3KLZNf6q0HG9i01zxXp5CPBs"
19 if ! _loopia_load_config
; then
25 _debug
"First detect the root zone"
26 if ! _get_root
"$fulldomain"; then
30 _debug _sub_domain
"$_sub_domain"
31 _debug _domain
"$_domain"
35 _loopia_add_sub_domain
"$_domain" "$_sub_domain"
36 _loopia_add_record
"$_domain" "$_sub_domain" "$txtvalue"
44 if ! _loopia_load_config
; then
50 _debug
"First detect the root zone"
51 if ! _get_root
"$fulldomain"; then
56 xml_content
=$
(printf '<?xml version="1.0" encoding="UTF-8"?>
58 <methodName>removeSubdomain</methodName>
61 <value><string>%s</string></value>
64 <value><string>%s</string></value>
67 <value><string>%s</string></value>
70 <value><string>%s</string></value>
73 </methodCall>' "$LOOPIA_User" "$LOOPIA_Password" "$_domain" "$_sub_domain")
75 response
="$(_post "$xml_content" "$LOOPIA_Api" "" "POST
")"
77 if ! _contains
"$response" "OK"; then
78 _err
"Error could not get txt records"
83 #################### Private functions below ##################################
85 _loopia_load_config
() {
86 LOOPIA_Api
="${LOOPIA_Api:-$(_readaccountconf_mutable LOOPIA_Api)}"
87 LOOPIA_User
="${LOOPIA_User:-$(_readaccountconf_mutable LOOPIA_User)}"
88 LOOPIA_Password
="${LOOPIA_Password:-$(_readaccountconf_mutable LOOPIA_Password)}"
90 if [ -z "$LOOPIA_Api" ]; then
91 LOOPIA_Api
="$LOOPIA_Api_Default"
94 if [ -z "$LOOPIA_User" ] ||
[ -z "$LOOPIA_Password" ]; then
98 _err
"A valid Loopia API user and password not provided."
99 _err
"Please provide a valid API user and try again."
107 _loopia_save_config
() {
108 if [ "$LOOPIA_Api" != "$LOOPIA_Api_Default" ]; then
109 _saveaccountconf_mutable LOOPIA_Api
"$LOOPIA_Api"
111 _saveaccountconf_mutable LOOPIA_User
"$LOOPIA_User"
112 _saveaccountconf_mutable LOOPIA_Password
"$LOOPIA_Password"
115 _loopia_get_records
() {
119 xml_content
=$
(printf '<?xml version="1.0" encoding="UTF-8"?>
121 <methodName>getZoneRecords</methodName>
124 <value><string>%s</string></value>
127 <value><string>%s</string></value>
130 <value><string>%s</string></value>
133 <value><string>%s</string></value>
136 </methodCall>' $LOOPIA_User $LOOPIA_Password "$domain" "$sub_domain")
138 response
="$(_post "$xml_content" "$LOOPIA_Api" "" "POST
")"
139 if ! _contains
"$response" "<array>"; then
154 xml_content
=$
(printf '<?xml version="1.0" encoding="UTF-8"?>
156 <methodName>getDomains</methodName>
159 <value><string>%s</string></value>
162 <value><string>%s</string></value>
165 </methodCall>' $LOOPIA_User $LOOPIA_Password)
167 response
="$(_post "$xml_content" "$LOOPIA_Api" "" "POST
")"
169 h
=$
(echo "$domain" | cut
-d .
-f $i-100)
175 if _contains
"$response" "$h"; then
176 _sub_domain
=$
(printf "%s" "$domain" | cut
-d .
-f 1-$p)
187 _loopia_add_record
() {
192 xml_content
=$
(printf '<?xml version="1.0" encoding="UTF-8"?>
194 <methodName>addZoneRecord</methodName>
197 <value><string>%s</string></value>
200 <value><string>%s</string></value>
203 <value><string>%s</string></value>
206 <value><string>%s</string></value>
212 <value><string>TXT</string></value>
215 <name>priority</name>
216 <value><int>0</int></value>
220 <value><int>60</int></value>
224 <value><string>%s</string></value>
229 </methodCall>' $LOOPIA_User $LOOPIA_Password "$domain" "$sub_domain" "$txtval")
231 response
="$(_post "$xml_content" "$LOOPIA_Api" "" "POST
")"
233 if ! _contains
"$response" "OK"; then
240 _sub_domain_exists
() {
244 xml_content
=$
(printf '<?xml version="1.0" encoding="UTF-8"?>
246 <methodName>getSubdomains</methodName>
249 <value><string>%s</string></value>
252 <value><string>%s</string></value>
255 <value><string>%s</string></value>
258 </methodCall>' $LOOPIA_User $LOOPIA_Password "$domain")
260 response
="$(_post "$xml_content" "$LOOPIA_Api" "" "POST
")"
262 if _contains
"$response" "$sub_domain"; then
268 _loopia_add_sub_domain
() {
272 if _sub_domain_exists
"$domain" "$sub_domain"; then
276 xml_content
=$
(printf '<?xml version="1.0" encoding="UTF-8"?>
278 <methodName>addSubdomain</methodName>
281 <value><string>%s</string></value>
284 <value><string>%s</string></value>
287 <value><string>%s</string></value>
290 <value><string>%s</string></value>
293 </methodCall>' $LOOPIA_User $LOOPIA_Password "$domain" "$sub_domain")
295 response
="$(_post "$xml_content" "$LOOPIA_Api" "" "POST
")"
297 if ! _contains
"$response" "OK"; then