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 if ! _loopia_add_sub_domain
"$_domain" "$_sub_domain"; then
38 if ! _loopia_add_record
"$_domain" "$_sub_domain" "$txtvalue"; then
48 if ! _loopia_load_config
; then
54 _debug
"First detect the root zone"
55 if ! _get_root
"$fulldomain"; then
60 xml_content
=$
(printf '<?xml version="1.0" encoding="UTF-8"?>
62 <methodName>removeSubdomain</methodName>
65 <value><string>%s</string></value>
68 <value><string>%s</string></value>
71 <value><string>%s</string></value>
74 <value><string>%s</string></value>
77 </methodCall>' "$LOOPIA_User" "$Encoded_Password" "$_domain" "$_sub_domain")
79 response
="$(_post "$xml_content" "$LOOPIA_Api" "" "POST
")"
81 if ! _contains
"$response" "OK"; then
82 err_response
=$
(echo "$response" |
sed 's/.*<string>\(.*\)<\/string>.*/\1/')
83 _err
"Error could not get txt records: $err_response"
88 #################### Private functions below ##################################
90 _loopia_load_config
() {
91 LOOPIA_Api
="${LOOPIA_Api:-$(_readaccountconf_mutable LOOPIA_Api)}"
92 LOOPIA_User
="${LOOPIA_User:-$(_readaccountconf_mutable LOOPIA_User)}"
93 LOOPIA_Password
="${LOOPIA_Password:-$(_readaccountconf_mutable LOOPIA_Password)}"
95 if [ -z "$LOOPIA_Api" ]; then
96 LOOPIA_Api
="$LOOPIA_Api_Default"
99 if [ -z "$LOOPIA_User" ] ||
[ -z "$LOOPIA_Password" ]; then
103 _err
"A valid Loopia API user and password not provided."
104 _err
"Please provide a valid API user and try again."
109 if _contains
"$LOOPIA_Password" "'" || _contains
"$LOOPIA_Password" '"'; then
110 _err
"Password contains a quotation mark or double quotation marks and this is not supported by dns_loopia.sh"
114 Encoded_Password
=$
(_xml_encode
"$LOOPIA_Password")
118 _loopia_save_config
() {
119 if [ "$LOOPIA_Api" != "$LOOPIA_Api_Default" ]; then
120 _saveaccountconf_mutable LOOPIA_Api
"$LOOPIA_Api"
122 _saveaccountconf_mutable LOOPIA_User
"$LOOPIA_User"
123 _saveaccountconf_mutable LOOPIA_Password
"$LOOPIA_Password"
126 _loopia_get_records
() {
130 xml_content
=$
(printf '<?xml version="1.0" encoding="UTF-8"?>
132 <methodName>getZoneRecords</methodName>
135 <value><string>%s</string></value>
138 <value><string>%s</string></value>
141 <value><string>%s</string></value>
144 <value><string>%s</string></value>
147 </methodCall>' "$LOOPIA_User" "$Encoded_Password" "$domain" "$sub_domain")
149 response
="$(_post "$xml_content" "$LOOPIA_Api" "" "POST
")"
150 if ! _contains
"$response" "<array>"; then
151 err_response
=$
(echo "$response" |
sed 's/.*<string>\(.*\)<\/string>.*/\1/')
152 _err
"Error: $err_response"
166 xml_content
=$
(printf '<?xml version="1.0" encoding="UTF-8"?>
168 <methodName>getDomains</methodName>
171 <value><string>%s</string></value>
174 <value><string>%s</string></value>
177 </methodCall>' "$LOOPIA_User" "$Encoded_Password")
179 response
="$(_post "$xml_content" "$LOOPIA_Api" "" "POST
")"
181 h
=$
(echo "$domain" | cut
-d .
-f $i-100)
187 if _contains
"$response" "$h"; then
188 _sub_domain
=$
(printf "%s" "$domain" | cut
-d .
-f 1-$p)
199 _loopia_add_record
() {
204 xml_content
=$
(printf '<?xml version="1.0" encoding="UTF-8"?>
206 <methodName>addZoneRecord</methodName>
209 <value><string>%s</string></value>
212 <value><string>%s</string></value>
215 <value><string>%s</string></value>
218 <value><string>%s</string></value>
225 <value><string>TXT</string></value>
228 <name>priority</name>
229 <value><int>0</int></value>
233 <value><int>300</int></value>
237 <value><string>%s</string></value>
243 </methodCall>' "$LOOPIA_User" "$Encoded_Password" "$domain" "$sub_domain" "$txtval")
245 response
="$(_post "$xml_content" "$LOOPIA_Api" "" "POST
")"
247 if ! _contains
"$response" "OK"; then
248 err_response
=$
(echo "$response" |
sed 's/.*<string>\(.*\)<\/string>.*/\1/')
249 _err
"Error: $err_response"
255 _sub_domain_exists
() {
259 xml_content
=$
(printf '<?xml version="1.0" encoding="UTF-8"?>
261 <methodName>getSubdomains</methodName>
264 <value><string>%s</string></value>
267 <value><string>%s</string></value>
270 <value><string>%s</string></value>
273 </methodCall>' "$LOOPIA_User" "$Encoded_Password" "$domain")
275 response
="$(_post "$xml_content" "$LOOPIA_Api" "" "POST
")"
277 if _contains
"$response" "$sub_domain"; then
283 _loopia_add_sub_domain
() {
287 if _sub_domain_exists
"$domain" "$sub_domain"; then
291 xml_content
=$
(printf '<?xml version="1.0" encoding="UTF-8"?>
293 <methodName>addSubdomain</methodName>
296 <value><string>%s</string></value>
299 <value><string>%s</string></value>
302 <value><string>%s</string></value>
305 <value><string>%s</string></value>
308 </methodCall>' "$LOOPIA_User" "$Encoded_Password" "$domain" "$sub_domain")
310 response
="$(_post "$xml_content" "$LOOPIA_Api" "" "POST
")"
312 if ! _contains
"$response" "OK"; then
313 err_response
=$
(echo "$response" |
sed 's/.*<string>\(.*\)<\/string>.*/\1/')
314 _err
"Error: $err_response"
322 encoded_string
=$
(echo "$encoded_string" |
sed 's/&/\&/')
323 encoded_string
=$
(echo "$encoded_string" |
sed 's/</\</')
324 encoded_string
=$
(echo "$encoded_string" |
sed 's/>/\>/')
325 printf "%s" "$encoded_string"